Fail2Ban 효과적으로 운영하기: 실전 사례 기반 보안 최적화 가이드

1. 들어가며

리눅스 서버를 운영하다 보면 SSH 포트를 열어둔 것만으로도 수많은 로그인 시도가 발생하는 것을 경험하게 됩니다. 이를 막기 위해 많은 사람들이 사용하는 도구가 바로 Fail2Ban입니다. 하지만 단순히 설치하고 설정하는 것만으로는 충분하지 않습니다. 장기간 운영하다 보면 밴 리스트가 수백, 수천 개씩 쌓이면서 오히려 서버 성능에 영향을 줄 수 있기 때문이죠.

이 글은 실제 서버 운영 경험을 바탕으로, Fail2Ban을 보다 효과적으로, 효율적으로 운용하는 방법을 공유합니다.

Fail2Ban의 설치방법 및 기본 설정방법이 궁금하신 분들은 이전 글을 참고해주세요! Linux 서버를 지키는 수호자, Fail2Ban


2. 실전 경험: 3주 만에 1,113개의 IP가 밴되다

필자가 운영 중인 테스트용 리눅스 서버에 fail2ban을 설정한 지 약 3주, 어느 날 아래 명령어를 실행해보았습니다:

sudo fail2ban-client status sshd

결과는 다음과 같았습니다:

Currently failed: 1
Total failed: 5330
Currently banned: 1110
Total banned: 1113

3주 만에 1,113개의 IP가 차단되었고, 그중 1,110개가 여전히 차단 상태였습니다. bantime = -1 설정으로 영구 차단되도록 구성했기 때문이죠.

처음엔 "한 번이라도 시도한 놈은 용서 없다!"는 마음으로 설정했지만, 수천 개의 차단 IP가 iptables에 쌓이고 나니 시스템 자원 소모와 관리 효율이 걱정되기 시작했습니다.

결국, 지속 가능하고 전략적인 Fail2Ban 운영 방식을 고민하게 되었습니다.


Tux가 recidive jail을 지키는 모습

3. Fail2Ban 설정 개선 전략

✅ bantime을 유동적으로 조정하자

  • 무조건 영구차단보다는 시간 기반 차단이 더 현실적입니다.
  • 예시:
  • bantime = 86400        # 1일 차단
    findtime = 600         # 10분 내
    maxretry = 3           # 3번 실패 시

Fail2Ban 차단 흐름도

✅ recidive jail 활용

🔎 recidive jail이란?

fail2ban이 관리하는 fail2ban.log 파일을 모니터링하여, 특정 IP가 여러 jail에서 반복적으로 차단될 경우 그 IP를 장기적으로 다시 차단하는 고급 기능입니다. 쉽게 말해, 재범자에게 더 무거운 처벌을 주는 '누범 감시 시스템'입니다.

일반적으로 sshd, nginx, ftp 등의 개별 jail은 짧은 시간 동안만 차단하지만, recidive jail은 이런 '누적 범죄 이력'이 있는 IP만을 선별해 더 오랫동안 차단합니다.

  • 반복적으로 밴되는 IP에 대해서만 장기 차단 적용
  • 일반 공격자는 하루면 사라지지만, 재시도하는 공격자는 필터링 가능
  • 예시 설정:
  • [recidive]
    enabled = true
    logpath = /var/log/fail2ban.log
    bantime = 604800        # 1주일
    findtime = 86400
    maxretry = 5

✅ 로그 관리 자동화

  • /var/log/fail2ban.log가 커지기 전에 logrotate 설정으로 자동 정리
  • cron이나 systemd timer로 fail2ban-client status 결과를 요약 정리해 메일 발송

4. 참고 스크립트 예시

#!/bin/bash
fail2ban-client status sshd > /tmp/sshd-status.log
echo "Current Ban Count: $(grep 'Currently banned' /tmp/sshd-status.log)" | mail -s "Fail2Ban SSHD Status" your@email.com

5. 마무리: Fail2Ban은 무기가 아니라 도구입니다

Fail2Ban은 무작위 공격을 막는 데 매우 유용한 도구지만, 운영이 지나치면 블로킹이 목적이 아니라 서버 과부하의 원인이 될 수도 있습니다.

현실적인 차단 정책과 자동화된 관리 도구를 함께 구성하면, Fail2Ban은 더 이상 골칫거리가 아닌 든든한 보안 파트너가 됩니다.


다음 글 예고

Fail2Ban의 로그파일 /var/log/fail2ban.log가 커지는 것을 예방하기 위한 logrotate 설정에 대해서 알아보고자 합니다. 관심있으신 분들은 구독해 주세요!