홈/엔지니어/보안 설정/Fail2Ban 고급 — 커스텀 필터·액션·화이트리…
보안 설정고급UbuntuDebianCentOSfail2ban커스텀필터브루트포스

Fail2Ban 고급 — 커스텀 필터·액션·화이트리스트

커스텀 필터로 애플리케이션 로그를 파싱하고, 액션을 추가하며, 화이트리스트·블랙리스트를 관리하는 Fail2Ban 고급 설정을 설명합니다.

목차
  1. Fail2Ban 구조 이해
  2. jail.local 기본 설정
  3. 커스텀 필터 작성
  4. Nginx 로그인 실패 차단
  5. 커스텀 액션 — Slack 알림
  6. 화이트리스트 · 블랙리스트
  7. 상태 확인 명령

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  = 2h

Nginx 로그인 실패 차단

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
#fail2ban#커스텀필터#브루트포스#침입차단#보안
편집 안내 · Editorial Note

AI 도구가 초안 작성에 사용될 수 있습니다. 명령어의 실행 여부와 검증 환경은 각 가이드에 기재된 근거를 확인하세요. 적용 전 사용 중인 버전의 공식 문서를 확인하고, 오류는 이메일로 알려주세요. 이메일로 제보

주제 관련 공식 문서(자동 연결 · 문장별 근거 아님)OWASP 공식 문서 ↗

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.