Fail2Ban 구조 이해
CODE
/etc/fail2ban/
├── fail2ban.conf # 메인 설정 (수정 금지)
├── jail.conf # 기본 jail 설정 (수정 금지)
├── fail2ban.local # 로컬 오버라이드
├── jail.local # jail 로컬 설정 (여기서 수정)
├── filter.d/ # 필터 정의
└── action.d/ # 액션 정의jail.local 기본 설정
INI
# /etc/fail2ban/jail.local
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1 10.0.0.0/8 192.168.0.0/16
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 24h커스텀 필터 작성
애플리케이션 로그에서 실패 패턴을 찾는 정규식 필터입니다.
INI
# /etc/fail2ban/filter.d/myapp.conf
[Definition]
# 실패 로그 예시: 2025-05-27 10:23:45 LOGIN_FAILED from 203.0.113.45
failregex = ^%Y-%m-%d %H:%M:%S LOGIN_FAILED from <HOST>$
^.* authentication failure.* rhost=<HOST>.*$
# 무시할 패턴
ignoreregex = ^.* from 127\.0\.0\.1.*$Bash
# 필터 테스트
fail2ban-regex /var/log/myapp/auth.log /etc/fail2ban/filter.d/myapp.conf -v
# jail에 추가
# /etc/fail2ban/jail.local
[myapp]
enabled = true
filter = myapp
logpath = /var/log/myapp/auth.log
maxretry = 5
bantime = 2hNginx 로그인 실패 차단
INI
# /etc/fail2ban/filter.d/nginx-auth.conf
[Definition]
failregex = ^<HOST> -.*"POST /api/login HTTP.*" (401|403) .*$
# /etc/fail2ban/jail.local
[nginx-auth]
enabled = true
filter = nginx-auth
logpath = /var/log/nginx/access.log
maxretry = 10
findtime = 5m
bantime = 1h커스텀 액션 — Slack 알림
INI
# /etc/fail2ban/action.d/slack-notify.conf
[Definition]
actionstart =
actionstop =
actioncheck =
actionban = curl -X POST -H 'Content-type: application/json' \
--data '{"text":"🚫 Fail2Ban: <ip> banned in <name> (%(bantime)s)"}' \
https://hooks.slack.com/services/YOUR/WEBHOOK/URL
actionunban =
# jail.local에 추가
[myapp]
action = iptables-multiport[name=myapp, port="80,443"]
slack-notify화이트리스트 · 블랙리스트
Bash
# IP 화이트리스트 (영구 무시)
# jail.local [DEFAULT] ignoreip에 추가
ignoreip = 127.0.0.1/8 1.2.3.4 10.0.0.0/8
# 즉시 특정 IP 차단 (수동)
fail2ban-client set sshd banip 203.0.113.45
# 차단 해제
fail2ban-client set sshd unbanip 203.0.113.45상태 확인 명령
Bash
# 전체 상태
fail2ban-client status
# 특정 jail 상태
fail2ban-client status sshd
# 현재 차단된 IP 목록
fail2ban-client status sshd | grep "Banned IP"
# 실시간 로그
tail -f /var/log/fail2ban.log
# 재시작 (설정 변경 후)
sudo systemctl reload fail2ban편집 안내 · Editorial Note
AI 도구가 초안 작성에 사용될 수 있습니다. 명령어의 실행 여부와 검증 환경은 각 가이드에 기재된 근거를 확인하세요. 적용 전 사용 중인 버전의 공식 문서를 확인하고, 오류는 이메일로 알려주세요. 이메일로 제보
주제 관련 공식 문서(자동 연결 · 문장별 근거 아님)OWASP 공식 문서 ↗
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.