라즈베리파이 설정

공유기 설정

공유기의 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 허용 규칙을 먼저 적용합니다.

권장 순서는 다음과 같습니다.

  1. SSH 포트 변경
  2. /etc/services 수정
  3. ufw allow ssh
  4. ufw limit ssh/tcp
  5. 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 없이 실행할 수 있도록 사용자 권한을 부여합니다.