fail2ban은 로그 파일을 실시간으로 감시하여 일정 횟수 이상 로그인에 실패한 IP를 방화벽으로 자동 차단하는 도구입니다. SSH, Nginx, Apache, WordPress 등 다양한 서비스에 적용할 수 있습니다.
설치
sudo apt update
sudo apt install -y fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
기본 설정
/etc/fail2ban/jail.local 파일을 생성합니다 (기본 설정 파일인 jail.conf는 직접 수정하지 않습니다):
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
기본 설정 부분을 수정합니다:
[DEFAULT]
# 차단 지속 시간 (초, -1이면 영구 차단)
bantime = 3600
# 감시 시간 범위 (초)
findtime = 600
# 허용 실패 횟수
maxretry = 5
# 차단에서 제외할 IP (관리자 IP)
ignoreip = 127.0.0.1/8 ::1 203.0.113.1
SSH 차단 설정
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
Nginx 로그인 실패 차단
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 3600
[nginx-limit-req]
enabled = true
filter = nginx-limit-req
logpath = /var/log/nginx/error.log
maxretry = 10
bantime = 600
WordPress 로그인 보호
WordPress 로그인 URL에 대한 차단 필터를 생성합니다:
sudo nano /etc/fail2ban/filter.d/wordpress.conf
[Definition]
failregex = ^<HOST> .* "POST /wp-login.php
ignoreregex =
jail.local에 추가:
[wordpress]
enabled = true
filter = wordpress
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 7200
findtime = 300
설정 적용 및 상태 확인
sudo systemctl restart fail2ban
# 전체 jail 상태 확인
sudo fail2ban-client status
# 특정 jail 상태 확인
sudo fail2ban-client status sshd
# 차단된 IP 목록
sudo fail2ban-client status sshd | grep "Banned IP"
IP 수동 차단/해제
# 수동 차단
sudo fail2ban-client set sshd banip 1.2.3.4
# 차단 해제 (실수로 자신을 차단했을 때)
sudo fail2ban-client set sshd unbanip 1.2.3.4
차단 알림 이메일 설정
[DEFAULT]
destemail = admin@example.com
sendername = Fail2Ban
action = %(action_mwl)s
fail2ban은 가장 기본적이면서도 효과적인 서버 보안 도구 중 하나입니다. 반드시 설치해 두세요.