Fail2Ban
Fail2Ban
Fail2ban은 로그 파일을 분석하여 특정 패턴을 감지하고, 악의적 접근으로 판단될 경우 방화벽(iptables/nftables)을 이용해 자동으로 IP를 차단하는 보안 도구다. 서버에 대한 무차별 대입 공격(Brute Force Attack)을 방어하기 위해 개발된 이 도구는 주로 SSH와 같은 네트워크 서비스에 적용됩니다.
[개요]
✅ 종류 : 개념정의
✅ 난이도 : ⭐
✅ 내용요약 : Fail2Ban을 이용한 SSH 브루트포스 공격 방어
✅ 테스트환경 :
✅ 관련직무 : 시스템 엔지니어, 클라우드 엔지니어, 데이터 엔지니어
사전 요구사항
포트 확인
기본 패키지 업데이트
Fail2ban 설치 후 서비스 시작:
상태 확인:
SSH 전용 Jail 설정
Fail2ban은 /etc/fail2ban/jail.conf 파일을 직접 수정하지 않는다.
그 대신 /etc/fail2ban/jail.local을 생성하여 원하는 설정만 오버라이드한다.
내용:
설명:
-
enabled = true: SSH 보호 활성화 -
findtime = 600: 10분 안에 -
maxretry = 3: 로그인 실패 3번이면 -
bantime = 300: 5분간 차단
Fail2ban 재시작:
SSH 브루트포스 공격 시뮬레이션
이제 공격을 직접 재현해보자.
테스트용 사용자 생성
(기존 사용자로 해도 되지만 예제에서는 별도 생성)
의도적으로 잘못된 비밀번호로 로그인 시도
다른 터미널에서 다음 명령을 여러 번 수행한다:
비밀번호를 계속 틀리게 입력하여 3회 실패하도록 만든다.
Fail2ban 동작 확인
Fail2ban이 SSH Jail을 활성화했는지 확인:
예상 출력:
특히 Currently banned: 1 이면 성공적으로 차단된 것.
차단된 IP 확인
또는 nftables 환경이면:
Fail2ban이 자동으로 INPUT 체인에 DROP 규칙을 추가한 것을 볼 수 있다.
접속 차단 확인
3회 실패 후 다시 ssh 시도:
몇 초 후 응답 없음 → 정상적으로 차단된 상태.
차단 해제(unban) 테스트
관리자가 IP를 수동으로 해제할 수도 있다.
현재 차단된 IP 조회:
해제:
해제 후 확인:
🔒 Fail2Ban을 꼭 써야 하는 이유
1) 무차별 대입(Brute-force) 공격을 자동 차단
인터넷에 공개된 SSH 포트는 항상 공격 대상입니다.
공격자는 비밀번호를 수천 번, 수만 번 시도하며 침입을 시도합니다.
Fail2Ban은
-
로그인 실패 횟수 감지
-
특정 기준을 넘으면 자동 차단
을 수행하여 공격자가 더 이상 시도조차 하지 못하게 만듭니다.
➡️ 서버의 부하 감소 + 침입 위험 감소
2) 관리자가 직접 방화벽을 조정할 필요 없음
iptables/nftables로 직접 차단 규칙을 추가할 수도 있지만,
실패 IP가 계속 바뀌기 때문에 사람이 일일이 관리하는 것은 비현실적입니다.
Fail2Ban은 자동으로 처리합니다:
-
감지 → 차단 → 일정 시간 후 해제
-
로그 기반으로 재발하는 IP는 지속적으로 차단
➡️ 자동화된 보안 관리
3) 로그 기반의 지능형 방어
Fail2Ban은 단순한 접속 차단 도구가 아니라 로그를 분석하는 IDS(침입 탐지 시스템) 역할도 합니다.
로그에서 아래처럼 다양한 공격 패턴을 인식할 수 있습니다:
-
SSH 인증 실패
-
웹 서버 공격 (404 스캔, SQL Injection 패턴 등)
-
Postfix/Exim 메일 인증 실패
-
FTP 접속 공격
-
Apache/Nginx 경로 스캔
➡️ 서비스별로 정교한 보안 정책 설정 가능
4) 특정 국가/특정 IP 자동 차단 가능
Fail2Ban은 GeoIP와 연동하여 특정 국가에서 오는 공격을 자동 차단하기도 합니다.
예: “한국 서버인데 해외 IP에서 SSH 공격 시 자동 차단”
➡️ 불필요한 해외 공격 차단으로 부하 감소
[참조]



