라즈베리파이 설정
공유기 설정
공유기의 DHCP 서버를 확인해 할당된 IP 주소를 확인하고 해당 장치를 고정 IP로 할당합니다.
나중에 공유기 교체 등이 발생할 수 있으므로 고정 IP로 등록된 단말기들의 목록(IP/MAC)을 별도로 기록해 둡니다.
공유기가 아닌 라즈베리파이에 고정 IP를 직접 설정할 수도 있지만, 공유기 재부팅이나 교체 시 DHCP 서버가 다른 장치에 동일한 IP를 할당할 수 있습니다. 이 경우 DHCP 대여 범위 밖의 IP 주소를 사용해야 합니다.
운영 및 유지보수 관점에서는 공유기에서 고정 IP를 관리하는 방식이 안전합니다.
SSH 접속
IP 주소를 모를 경우 공유기의 DHCP Lease 목록에서 라즈베리파이를 확인하거나 mDNS(raspberrypi.local)를 이용해 SSH 접속합니다.
패키지 업데이트
sudo apt update && sudo apt full-upgrade -y
sudo reboot
Locale 설정
sudo raspi-config
- Localisation Options | Configure language and regional settings
- Locale | Configure language and regional settings
- en.GB.UTF-8 UTF-8
- en.US.UTF-8 UTF-8
- ko_KR.UTF-8 UTF-8
- OK
- ko_KR.UTF-8 UTF-8
Timezone 설정
sudo raspi-config
- Localisation Options | Configure language and regional settings
- Timezone | Configure time zone
- Asia
- Seoul
Expand Filesystem 설정
sudo raspi-config
- Advanced Options | Configure advanced settings
- Expand Filesystem | Ensures that all of the SD card is available
- Ok
- Finish
- Yes (Would you like to reboot now?)
SSH 포트 변경
sudo nano /etc/ssh/sshd_config
sudo nano /etc/services
sudo reboot
sshd_config 설정
/etc/ssh/sshd_config에서 SSH 데몬이 실제로 수신할 포트를 변경합니다.
#Port 22
주석을 해제하고 사용할 포트를 지정합니다.
Port 2222
이 설정은 sshd 프로세스의 listen 포트를 변경하는 설정입니다.
/etc/services 수정 이유
/etc/services는 서비스 이름과 포트/프로토콜 간의 매핑 정보를 정의한 파일입니다. UFW, fail2ban 등 여러 보안 도구는 포트 번호 대신 서비스 이름을 사용할 경우 이 파일을 참조합니다.
기본 SSH 정의는 다음과 같습니다.
ssh 22/tcp # SSH Remote Login Protocol
SSH 포트를 변경한 상태에서 이 항목을 수정하지 않으면 다음과 같은 문제가 발생할 수 있습니다.
- ufw allow ssh 실행 시 실제 SSH 포트가 아닌 22/tcp가 허용됨
- fail2ban에서 port = ssh 사용 시 잘못된 포트를 감시함
- 설정 상 서비스 이름과 실제 동작 포트가 불일치함
따라서 sshd_config에서 설정한 포트에 맞춰 /etc/services도 함께 수정합니다.
ssh 2222/tcp # SSH Remote Login Protocol
이를 통해 ssh라는 서비스 이름이 시스템 전반에서 동일한 의미로 해석되도록 유지할 수 있습니다.
ufw 설치 및 설정
sudo apt install ufw -y
sudo ufw default deny incoming
sudo ufw allow ssh
sudo ufw limit ssh/tcp
sudo ufw logging on
sudo ufw enable
기본 정책
sudo ufw default deny incoming
인바운드 트래픽을 기본적으로 차단하고, 명시적으로 허용한 서비스만 접근할 수 있도록 설정합니다.
SSH 허용 방식
sudo ufw allow ssh
이 명령은 포트 번호를 직접 지정하지 않고 /etc/services에 정의된 ssh 항목을 참조합니다.
내부적으로는 다음과 같이 해석됩니다.
ssh -> 2222/tcp
결과적으로 다음 명령과 동일한 효과를 가집니다.
sudo ufw allow 2222/tcp
서비스 이름을 사용하면 포트 변경 시 설정 일관성을 유지할 수 있습니다.
접속 시도 제한
sudo ufw limit ssh/tcp
짧은 시간 내 반복적인 접속 시도가 발생할 경우 자동으로 제한합니다. 무차별 대입 공격에 대한 1차 방어 수단으로 사용됩니다.
로깅 활성화
sudo ufw logging on
방화벽 허용 및 차단 내역을 로그로 기록합니다. 로그는 /var/log/ufw.log에서 확인할 수 있습니다.
ufw 활성화 주의사항
SSH로 접속한 상태에서 ufw enable을 실행하면 현재 연결이 끊길 수 있습니다. SSH 허용 규칙이 누락된 상태에서 활성화할 경우 재접속이 불가능해질 수 있으므로 반드시 SSH 허용 규칙을 먼저 적용합니다.
권장 순서는 다음과 같습니다.
- SSH 포트 변경
- /etc/services 수정
- ufw allow ssh
- ufw limit ssh/tcp
- ufw enable
fail2ban 설치
sudo apt install fail2ban -y
sudo nano /etc/fail2ban/jail.conf
[sshd]
enabled = true
port = ssh
maxretry = 5
bantime = -1
findtime = 1d
port 항목에 서비스 이름을 사용하면 /etc/services 기준으로 포트가 자동 해석됩니다.
홈 서버 환경에서는 대부분 직접 접근이 가능하므로 24시간 내 로그인 실패 5회 초과 시 영구 차단으로 설정했습니다.
장비가 물리적으로 접근 불가능한 위치에 있는 경우에는 bantime을 제한하거나 점진적 차단 정책을 고려해야 합니다.
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo 비밀번호 요청 설정
sudo nano /etc/sudoers.d/010_pi-nopasswd
초기 설정 단계에서는 재부팅과 반복 작업이 많으므로 편의를 위해 마지막 단계에서 진행합니다.
자신의 계정과 root 항목에서 NOPASSWD를 PASSWD로 변경해 sudo 실행 시 비밀번호를 요구하도록 설정합니다.
Docker 설치
sudo curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh
sudo rm get-docker.sh
sudo usermod -aG docker $USER
newgrp docker
docker ps -a //sudo 없이 실행 가능한지 확인
설치 후 docker 명령을 sudo 없이 실행할 수 있도록 사용자 권한을 부여합니다.