대상 OS: Debian 12 (bookworm)
fail2ban은 “침입을 완전히 막는 도구”라기보다, 로그 기반의 자동 방어(임시 차단)로 소모성 공격을 줄이는 장치입니다. 처음부터 여러 jail(nginx, postfix, wordpress 등)을 한꺼번에 켜면 오탐/운영 복잡도가 급격히 올라갑니다. 그래서 실무에서는 SSH 하나만 안정적으로 운영하며 기준을 만들고, 그 다음에 범위를 늘리는 방식을 권장합니다.
1) 설계 기준(왜 ‘SSH만 먼저’인가)
- 위협 모델이 명확함: SSH 무차별 대입은 거의 모든 서버가 겪는 공통 위협
- 로그가 표준화: Debian의 OpenSSH 로그는 분석/필터링이 상대적으로 쉬움
- 오탐 비용이 큼: 웹/앱 로그는 패턴이 다양해 오탐으로 정상 사용자가 차단되기 쉬움
2) 설치 및 기본 상태 확인
sudo apt update
sudo apt install -y fail2ban
# 서비스 상태
sudo systemctl enable --now fail2ban
sudo systemctl status fail2ban --no-pager
3) 최소 설정: jail.local에 sshd만 활성화
Debian에서는 기본 설정 파일을 직접 수정하기보다 /etc/fail2ban/jail.local 또는 /etc/fail2ban/jail.d/*.local로 오버라이드하는 방식이 안전합니다(업데이트 시 덮어쓰기 방지).
sudoedit /etc/fail2ban/jail.local
예시(가볍게 시작, 운영 친화):
[DEFAULT]
# 차단 시간(너무 길면 오탐 회복이 어려움)
bantime = 1h
# 관찰 구간(이 시간 내 시도가 maxretry를 넘으면 차단)
findtime = 10m
# 허용 실패 횟수
maxretry = 5
# 내부망/점프호스트 등 차단되면 곤란한 대역은 제외(예시)
ignoreip = 127.0.0.1/8 ::1
[sshd]
enabled = true
4) 적용 및 동작 확인
설정 로드/재시작
sudo systemctl restart fail2bansshd jail 활성 확인
sudo fail2ban-client status sudo fail2ban-client status sshd차단 목록 확인/해제 방법 숙지(운영 필수)
# 현재 차단된 IP 목록 sudo fail2ban-client get sshd banip # 특정 IP 해제 sudo fail2ban-client set sshd unbanip 203.0.113.10
5) 운영 팁(‘가볍게’의 핵심)
- 너무 공격적으로 잡지 말기:
maxretry=3같은 과한 값은 오탐을 부릅니다. 5 정도로 시작해 로그를 보고 조정하세요. - ignoreip는 신중하게: 내부망을 넓게 제외하면 내부 침해/오용에 취약해집니다. 꼭 필요한 점프호스트/관리망만 최소로.
- 차단 시간은 적당히: 10년(영구) 같은 설정은 “대응 프로세스”가 없는 상태에서 운영 리스크를 키웁니다.
- 로그/감사 체계와 같이: fail2ban은 차단만 하고 끝이 아니라, 누가 얼마나 시도했는지 기록을 남겨야 의미가 커집니다.
6) 사례(현장에서 자주 겪는 상황)
- “외주/협력사 IP가 바뀌면서 접속이 자주 막힘”: bantime을 과도하게 늘리기보다, 접속 정책(키 기반/허용 사용자/관리망 VPN)을 먼저 정비하고, 해제 절차를 문서화합니다.
- “새벽에 배치가 실패했는데 알고 보니 배치 서버가 차단됨”: 배치/점프호스트의 공인 IP가 고정인지 확인하고, 필요하면 해당 IP만 최소 범위로 ignoreip에 추가합니다.
- “공격 트래픽이 많은 날 CPU가 튐”: fail2ban 자체보다 sshd 로그 폭증이 원인일 수 있습니다. SSH 설정(키 인증 강제, MaxAuthTries, LoginGraceTime)과 함께 조정합니다.
7) 트러블슈팅(증상→원인→해결)
- 증상:
fail2ban-client status sshd에서 jail이 없음
원인: jail.local 문법 오류 또는 sshd jail 미활성
해결:sudo fail2ban-client -d로 설정 덤프 확인,[sshd]섹션에enabled=true재확인 후 재시작 - 증상: 정상 사용자가 자주 차단됨
원인: maxretry/findtime/bantime이 공격적으로 설정됨, 인증 실패가 많은 환경(키 배포 문제)
해결: maxretry를 5 이상으로 완화, 키 배포/에이전트 문제 해결 후 다시 조정 - 증상: 차단이 되는 것 같은데 실제로 접속이 계속 됨
원인: 방화벽 백엔드/체인 적용 이슈(환경별), 또는 다른 경로(프록시/바스천)로 접속
해결: 차단된 IP를 확인(get sshd banip)하고, 해당 IP에서 직접 접속 테스트. 필요 시 방화벽 정책(iptables/nftables) 확인
root.so · Linux/Security 운영 노트
fail2ban은 ‘마지막 방어막’이 아니라 ‘소모성 공격 완화’ 도구입니다. SSH 자체 하드닝과 함께 운영할 때 효과가 커집니다.