fail2ban jail.local 빌더 완벽 가이드
fail2ban은 로그 파일에서 인증 실패 패턴을 탐지해 일정 횟수(maxretry)를 넘으면 해당 IP를 일정 시간(bantime) 차단하는 침입 차단(IPS) 도구입니다. 설정 파일 jail.conf를 직접 수정하지 않고 사용자 정의 파일 jail.local에 오버라이드 값을 두는 것이 표준 운영 방식입니다. 본 도구는 [DEFAULT] 전역 값과 서비스별 jail 블록을 폼으로 입력해 즉시 jail.local 텍스트를 생성하므로, /etc/fail2ban/jail.local 에 복사 후 systemctl restart fail2ban 만 실행하면 됩니다.
핵심 파라미터
- bantime: 차단 지속 시간. 10m(10분) / 1h(1시간) / 1d(1일) / -1(영구). 운영 SSH는 1시간 이상을 권장합니다.
- findtime: 실패 카운트 윈도우. 이 시간 안에 maxretry 회 실패 시 ban 처리됩니다.
- maxretry: 허용 실패 횟수. 일반 서비스 5회, 노출도 높은 SSH는 3회를 권장합니다.
- ignoreip: 절대 차단하지 않을 IP/CIDR. 본인 사무실, VPN 게이트웨이, 모니터링 서버 IP를 반드시 등록하세요.
- banaction: 차단 실행자. iptables-multiport(기본), ufw(Ubuntu), firewallcmd-ipset(RHEL/CentOS) 중 시스템에 맞춰 선택합니다.
서비스별 권장 설정
SSH(sshd)는 22번 또는 비표준 포트로 운영하며 노출도가 가장 높습니다. logpath는 일반적으로 /var/log/auth.log(Debian/Ubuntu) 또는 /var/log/secure(RHEL)입니다. nginx-http-auth는 .htpasswd 기반 401 응답을 트리거로 동작하고, nginx-limit-req는 limit_req_zone 설정이 선행되어야 합니다. postfix-sasl은 SMTP 인증 실패 폭주를 막아 메일 서버 평판을 보호합니다. vsftpd는 익명 FTP가 활성화된 경우 brute force 가 매우 흔하므로 maxretry 3회를 권장합니다.
운영 팁
변경 후 반드시 fail2ban-client status [jail-name]으로 활성 여부와 현재 차단 목록을 확인하세요. fail2ban-client unban [IP]로 즉시 해제할 수 있고, allowlist는 ignoreip를 통해 영구 적용합니다. 클라우드 환경에서는 보안그룹/방화벽이 먼저 트래픽을 차단하므로 fail2ban은 어디까지나 2차 방어선임을 기억하세요. 또한 logpath가 비어 있으면 jail이 enabled=true 라도 실제로는 차단 동작이 발생하지 않으므로, 새 서비스를 추가할 때는 로그 경로 확인이 가장 흔한 디버깅 포인트입니다.
자주 묻는 질문 (FAQ)
Q. jail.conf와 jail.local 중 어디를 수정해야 하나요?
A. 항상 jail.local 입니다. 패키지 업그레이드 시 jail.conf는 덮어쓰여 변경 사항이 사라질 수 있습니다.
Q. bantime을 영구로 설정해도 되나요?
A. bantime=-1로 설정하면 영구 차단됩니다. 실수로 본인 IP가 걸리면 unban이 필수이므로, ignoreip에 본인 IP를 반드시 사전 등록하세요.
Q. logpath를 잘못 적으면 어떻게 되나요?
A. fail2ban이 시작은 되지만 아무 패턴도 매칭되지 않아 ban이 발생하지 않습니다. fail2ban-client status [jail]의 "File list" 가 비어 있는지 확인하세요.