라즈베리파이 보안 설정
0. 환경
- 사용 기기: 라즈베리파이4 Model B
1. 사용자 계정 및 SSH
1) 사용자 계정
이름을 "raspberry", 비밀번호를 "pi"로 설정하지 않는 것을 추천한다.
이는 구 라즈베리파이OS의 기본 계정으로, 과거에는 라즈베리 해킹이 종종 발생하는 원인이 되곤 했다.
2) SSH
(1) 공개키만 허용
SSH 접속에 사용할 공개키를 "authorized_keys" 파일(경로: ~/.ssh)에 써넣어준다.
다음으로 "sshd_config" (경로: ~/etc/ssh) 파일의 "#PasswordAuthentication yes", "#PubkeyAuthentication no"로 설정된 부분을 아래처럼 바꿔야 한다.
PasswordAuthentication no
PubkeyAuthentication yes
이는 비밀번호를 통한 SSH 접속을 막고, 공개키에 맞는 비밀키를 가지고 있는 경우에만 접속을 허용하도록 한다.
(2) 포트 변경
"sshd_config" (경로: ~/etc/ssh) 파일에서 "#Port 22"라고 쓰인 줄을 "Port 임의의_포트_번호"로 바꿔야 한다.
여기서 포트 번호는 1000이상, 65536 이하의 번호를 사용하도록 한다.
아래는 SSH 연결에 사용하는 포트 번호를 13456로 바꾼 예시이다.
Port 13456
2. 방화벽(ufw) 설치
여기서 ufw는 외부에서 접근할 수 있는 포트를 제한하기 위한 목적으로 사용한다.
sudo apt update
sudo apt install ufw -y
sudo ufw enable # 라즈베리파이가 켜질 때마다 ufw도 같이 활성화
먼저 ufw를 설치하고, 시스템이 부팅되자마자 ufw가 동작하도록 설정한다.
sudo ufw allow 80 # http 연결
sudo ufw allow 443 # https 연결
sudo ufw allow 13456 # ssh 연결
다음에는 http, https, ssh 연결에 사용하기 위한 포트만 접속을 허용하고, 나머지 포트로의 접근은 차단한다.
3. fail2ban 설치
fail2ban은 접속 시도를 제한함으로써, 무차별 대입 공격을 막기 위해 사용한다.
sudo apt install fail2ban -y
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # jail.conf의 사본(jail.local) 생성
fail2ban을 설치하고, fail2ban을 적용할 포트, 접속을 차단하는 기간, 몇 번의 접속 실패를 허용할 지 등을 설정해야 한다.
이 설정은 "jail.conf"의 사본인 "jail.local" 파일에 적어야 한다.
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = %(sshd_log)s
backend = systemd
banaction = iptables-multiport
maxretry = 3
bantime = 345600
"jail.local"의 "[sshd]" 단락을 위와 같이 작성하면, ssh 접속 시도를 제한할 수 있다.
위의 예시는 3번 내로 ssh 접속에 실패하면, 4일(345600초) 동안 해당 ip를 차단하는 역할을 한다.
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban
마지막으로 fail2ban을 재시작하고, 라즈베리파이가 켜짐과 동시에 fail2ban이 작동하도록 한다.
sudo fail2ban-client status sshd
fail2ban의 ssh 접속 차단 현황은 위의 명령으로 확인할 수 있다.
4. 참고 자료
https://pimylifeup.com/raspberry-pi-security/
Improve the Security of your Raspberry Pi
Straightforward steps to hardening your security
pimylifeup.com