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

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

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

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)

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