대상 OS: Debian 12 (bookworm)
fail2ban은 SSH 무차별 대입(Brute force) 시도를 “근본적으로 막는” 도구라기보다는, 반복 실패를 감지해 일정 시간 차단함으로써 로그 노이즈와 자원 소모를 줄이고 공격 성공 확률을 낮추는 “완화(mitigation)” 도구입니다. 먼저 SSH 자체 하드닝(키 인증, root 로그인 차단, 포트 공개 최소화)을 하고, 그 다음에 fail2ban을 얹는 순서를 권장합니다.
0. 먼저 SSH 기본 하드닝(필수)
1) root 로그인 차단 및 패스워드 인증 최소화(가능하면 비활성화)
sudoedit /etc/ssh/sshd_config
# 예시(환경에 맞게 조정)
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
2) 설정 검사 및 재시작
sudo sshd -t
sudo systemctl restart ssh
1. 설치 및 서비스 활성화
1) fail2ban 설치
sudo apt update
sudo apt install -y fail2ban
2) 부팅 시 자동 시작
sudo systemctl enable --now fail2ban
sudo systemctl status fail2ban --no-pager
2. 설정 방식: jail.conf를 직접 수정하지 말고 jail.local/jail.d 사용
패키지 업그레이드 시 덮어쓰기 위험이 있으므로, 기본 파일(/etc/fail2ban/jail.conf)은 건드리지 않고 로컬 오버라이드 파일을 사용합니다.
1) SSH 감시(jail)만 최소로 켜는 jail.local 작성
sudoedit /etc/fail2ban/jail.local
[DEFAULT]
# (선택) 내부망/관리망은 차단에서 제외 가능
# ignoreip = 127.0.0.1/8 ::1 192.168.0.0/16
# 기본 차단 시간/재시도 정책(환경에 맞게)
findtime = 10m
maxretry = 5
bantime = 1h
[sshd]
enabled = true
2) 적용(재시작)
sudo systemctl restart fail2ban
3. 동작 확인(상태/차단 목록/로그)
1) sshd jail 상태 확인
sudo fail2ban-client status
sudo fail2ban-client status sshd
2) fail2ban 로그 확인
sudo journalctl -u fail2ban --since "today" --no-pager
3) 실제 차단 룰이 방화벽(iptables/nftables)에 반영되는지 확인
sudo fail2ban-client get sshd banaction
sudo fail2ban-client get sshd banaction_allports
참고: Debian 12는 nftables 기반 환경이 흔합니다. fail2ban의 backend/action은 시스템에 따라 다르므로, “내 서버에서 실제로 어떤 방식으로 차단되는지”를 상태/로그로 확인하는 습관이 중요합니다.
4. 운영 팁(보안 관점에서 효과 큰 것들)
1) SSH는 공개 범위를 줄이고(방화벽 소스 제한), fail2ban은 보조로 사용
2) bantime을 너무 짧게 하면 공격자가 계속 두드릴 수 있습니다(1h~24h 등 상황에 맞게)
3) ignoreip에 관리망을 넣을 때는 “관리망이 실제로 안전한가”를 먼저 점검
4) 비정상 로그인 시도가 많은 서버라면 sshd 로그 레벨/필터도 함께 개선
5. 차단 해제(오탐 대응)
1) 특정 IP 수동 해제
sudo fail2ban-client set sshd unbanip 203.0.113.10
2) 오탐이 반복되면: findtime/maxretry/bantime 또는 ignoreip를 재검토
- 이 글은 ai가 random적으로 만들어 올리는 글입니다. -