개요
오늘은 Ubuntu 서버에서 Fail2Ban을 사용하여 외부의 악의적인 트래픽으로부터 서버를 안전하게 지키는 방법에 대해 기록해보려고 한다.
서버를 운영하다 보면 무차별 대입 공격으로부터 서버를 보호하는 것이 얼마나 중요한지 느껴질거다.
Fail2Ban은 이러한 공격으로부터 서버를 지켜주는 강력한 도구이다.
설치부터 설정, 그리고 테스트까지 단계별로 자세히 알아보자.
1. Fail2Ban 이란?
Fail2Ban은 서버에 대한 무차별 대입 공격을 방지하기 위한 보안 도구이다.
로그 파일을 모니터링하여 지정된 횟수 이상으로 실패한 로그인 시도가 발생하면 해당 IP 주소를 일정 시간 동안 차단한다.
이를 통해 SSH, FTP, HTTP 등의 다양한 서비스의 보안을 강화할 수 있다.
2. Fail2Ban 설치
Fail2Ban을 설치하자.
sudo apt-get update -y
sudo apt-get install -y fail2ban
설치가 완료되면 /etc/fail2ban
디렉토리에 설정 파일들이 생성된다.
3. Fail2Ban 기본 설정 확
설치 후 Fail2Ban 서비스가 정상 실행 중인지 확인
sudo systemctl status fail2ban
만약 실행 중이 아니라면 서비스를 시작하고, 부팅 시 자동으로 시작되도록 설정하자.
sudo systemctl enable --now fail2ban
4. 설정 파일 편집 및 구성
기본 설정 파일을 직접 수정하는 대신 로컬 설정 파일을 생성하여 수정하는 것이 좋다.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo vim /etc/fail2ban/jail.local
4-1. DEFAULT 섹션 수정
[DEFAULT]
섹션에서 다음과 같은 기본 설정을 수정하자.
bantime
: 차단 시간 (초 단위)findtime
: 실패 시도 계산하는 시간 범위 (초 단위)maxretry
: 허용되는 최대 실패 시도 횟수
예시
[DEFAULT]
bantime = 3600 # 1시간 차단
findtime = 600 # 10분 동안 실패 시도 계산
maxretry = 5 # 5번 실패 시 차단
4-2. 이메일 알림 설정 (선택)
침임 시도가 감지되었을 때 이메일로 알림을 받으려면 다음을 설정하자.
destemail = your_email@example.com
sender = fail2ban@example.com
mta = sendmail
action = %(action_mw)s
이메일 전송을 위해 서버에 sendmail
을 설치해야 한다.
sudo apt-get install sendmail
5. SSH 보호 설정
[sshd]
섹션을 찾아 설정을 활성화하고 필요한 경우 수정하자.
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
ssh 포트를 변경했다면, port
를 해당 포트로 수정해야 한다.
예시
port = 20022
6. Fail2Ban 서비스 재시작
설정을 적용하기 위해 Fail2Ban 서비스를 재시작하자.
sudo systemctl restart fail2ban
7. Fail2Ban 상태 확인
현재 활성화된 jail과 그 상태를 확인해보자.
sudo fail2ban-client status
특정 jail의 상세 정보를 확인하려면
sudo fail2ban-client status sshd
8. 동작 테스트
Fail2Ban이 제대로 동작하는지 확인하기 위해 의도적으로 잘못된 SSH 로그인 시도를 해보자.
ssh invalid_user@your_server_ip
maxretry
에서 설정한 횟수 이상으로 실패하면 해당 IP에서 서버에 접근할 수 없는지 확인해보면 된다.
9. 차단된 IP 관리
차단된 IP 목록 확인
sudo fail2ban-client status sshd
특정 IP 차단 해제
sudo fail2ban-client set sshd unbanip <IP주소>
10. 기타 서비스 보호
Fail2Ban은 SSH 외에도 다양한 서비스에 적용 가능하다.
Apache 보호
[apache-auth]
섹션을 활성화
[apache-auth]
enabled = true
FTP 보호
[vsftpd]
섹션을 활성화합니다.
[vsftpd]
enabled = true
11. 로그 모니터링
Fail2Ban의 동작을 실시간으로 확인하기 위해 로그 파일을 모니터링하자.
더 체계적으로 로그를 관리하려면 Grafana, Loki
또는 ELK
를 도입하는 것을 권장한다.
sudo tail -f /var/log/fail2ban.log
12. 고급 설정
12-1. 영구 차단 설정
특정 IP를 영구 차단하려면 bantime
을 -1
로 설정
bantime = -1
12-2. 화이트리스트 설정
차단에서 제외할 IP 설정도 가능하다.
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24