메뉴 닫기

Fail2ban을 이용한 SSH 브루트포스 공격 방어

Fail2Ban

Fail2Ban

Fail2ban은 로그 파일을 분석하여 특정 패턴을 감지하고, 악의적 접근으로 판단될 경우 방화벽(iptables/nftables)을 이용해 자동으로 IP를 차단하는 보안 도구다.
서버에 대한 무차별 대입 공격(Brute Force Attack)을 방어하기 위해 개발된 이 도구는 주로 SSH와 같은 네트워크 서비스에 적용됩니다.

[개요]

종류 : 개념정의

난이도 : ⭐

내용요약 : Fail2Ban을 이용한 SSH 브루트포스 공격 방어

테스트환경

관련직무 : 시스템 엔지니어, 클라우드 엔지니어, 데이터 엔지니어

 

사전 요구사항

포트 확인

 
sudo ss -tulnp | grep ssh

기본 패키지 업데이트

 
sudo apt update
sudo apt install fail2ban -y

Fail2ban 설치 후 서비스 시작:

 
sudo systemctl enable fail2ban

상태 확인:

 
sudo fail2ban-client status
 

SSH 전용 Jail 설정

Fail2ban은 /etc/fail2ban/jail.conf 파일을 직접 수정하지 않는다.

그 대신 /etc/fail2ban/jail.local을 생성하여 원하는 설정만 오버라이드한다.

 
sudo nano /etc/fail2ban/jail.local

내용:

 
[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
backend = systemd
findtime = 600
maxretry = 3
bantime = 300

설명:

  • enabled = true : SSH 보호 활성화

  • findtime = 600 : 10분 안에

  • maxretry = 3 : 로그인 실패 3번이면

  • bantime = 300 : 5분간 차단

Fail2ban 재시작:

 
sudo systemctl restart fail2ban
 

SSH 브루트포스 공격 시뮬레이션

이제 공격을 직접 재현해보자.

테스트용 사용자 생성

(기존 사용자로 해도 되지만 예제에서는 별도 생성)

 
sudo adduser testuser

의도적으로 잘못된 비밀번호로 로그인 시도

다른 터미널에서 다음 명령을 여러 번 수행한다:

 
ssh testuser@<서버-IP>

비밀번호를 계속 틀리게 입력하여 3회 실패하도록 만든다.

Fail2ban 동작 확인

Fail2ban이 SSH Jail을 활성화했는지 확인:

 
sudo fail2ban-client status sshd

예상 출력:

 
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| `- Total failed: 3
`- Actions
|- Currently banned: 1
`- Total banned: 1

특히 Currently banned: 1 이면 성공적으로 차단된 것.

차단된 IP 확인

 
sudo iptables -L -n

또는 nftables 환경이면:

 
sudo nft list ruleset

Fail2ban이 자동으로 INPUT 체인에 DROP 규칙을 추가한 것을 볼 수 있다.

접속 차단 확인

3회 실패 후 다시 ssh 시도:

 
ssh testuser@<서버-IP>

몇 초 후 응답 없음 → 정상적으로 차단된 상태.

차단 해제(unban) 테스트

관리자가 IP를 수동으로 해제할 수도 있다.

현재 차단된 IP 조회:

 
sudo fail2ban-client status sshd

해제:

 
sudo fail2ban-client unban <차단된-IP>

해제 후 확인:

 
sudo fail2ban-client status sshd

 

🔒 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 공격 시 자동 차단”

➡️ 불필요한 해외 공격 차단으로 부하 감소

[참조]

https://monkeybusiness.tistory.com/696

[이전 게시글]

답글 남기기

이메일 주소는 공개되지 않습니다.