가상화 및 서브 PC 활용

가상화 서버 보안 강화: Fail2ban 설치로 SSH 무차별 대입 공격 차단하기

content59998 2026. 11. 12. 11:32

리눅스(Linux) 기반 가상화 서버나 홈랩(Home Lab)을 구축한 후 외부 네트워크로 연결하면, 무작위 IP에서 22번(SSH) 포트를 노린 무차별 대입 공격(Brute Force Attack)과 사전 공격(Dictionary Attack) 시도가 수없이 발생합니다. 이러한 악의적인 접속 시도를 그대로 방치할 경우 서버 자원이 낭비될 뿐만 아니라, 자칫 로그인 비밀번호가 뚫려 전체 서버 권한을 빼앗기는 치명적인 보안 사고로 이어질 수 있습니다.

SSH 포트 번호를 변경하거나 방화벽(UFW)을 설정하는 것만으로는 끊임없이 변형되어 들어오는 자동화 공격을 완벽히 차단하기 어렵습니다. 이럴 때 필수적으로 도입해야 하는 강력한 보안 유틸리티가 바로 Fail2ban(페일투밴)입니다. Fail2ban은 서버 로그를 실시간으로 감시하여 지정된 횟수 이상 로그인에 실패한 악성 IP를 자동으로 탐지하고, 일정 시간 동안 방화벽 수준에서 완전히 차단(Jail)해 줍니다.

본 글에서는 Fail2ban의 핵심 작동 원리부터, 우분투/데비안 서버에서의 실전 설치 및 설정 방법, 차단 상태 조회 및 해제 명령어, 그리고 보안 검증 체크리스트까지 상세히 알아보겠습니다.

1. Fail2ban의 작동 원리와 SSH 무차별 대입 공격 방어 메커니즘

Fail2ban은 시스템 로그 파일(예: /var/log/auth.log 또는 systemd journal)을 실시간으로 분석하여, 설정된 규칙에 위배되는 침입 시도를 자동으로 차단하는 침입 방지 소프트웨어(IPS)입니다.

[이미지: Fail2ban 감시 데몬이 SSH 로그에서 반복 실패한 IP를 감지하고 iptables 방화벽 규칙을 추가해 해당 IP를 차단하는 메커니즘 구조도]

Fail2ban이 무차별 대입 공격을 차단하는 기본 메커니즘과 장점은 다음과 같습니다.

  • 실시간 로그 모니터링: SSH 인증 실패 로그(Failed password)가 특정 시간(findtime) 동안 지정된 횟수(maxretry) 이상 반복 누적되는지 지속적으로 모니터링합니다.
  • 동적 방화벽 차단 (Jail): 임계값을 초과한 공격자의 IP를 감지하는 즉시, 서버의 iptables, nftables 또는 UFW 방화벽 규칙에 해당 IP를 자동으로 추가하여 지정된 시간(bantime) 동안 접속을 완전 거부합니다.
  • 시스템 리소스 절약: 공격자의 IP를 네트워크 레이어 단에서 조기에 차단하므로, 불필요한 SSH 인증 처리로 인한 CPU 및 메모리 자원 낭비를 방지합니다.
  • 자동 차단 해제(Unban): 설정된 차단 시간이 지나면 해당 IP를 방화벽 규칙에서 안전하게 제거하여, 정상 사용자의 실수에 의한 차단 상황에 대비합니다.

2. Fail2ban 실전 설치 및 SSH 보호 규칙(jail.local) 설정 4단계

리눅스 서버에 Fail2ban 패키지를 설치하고, SSH 서비스를 보호하기 위한 맞춤형 규칙 설정 파일(jail.local)을 작성하는 실전 가이드입니다.

1.Fail2ban 패키지 설치:1분 내외 소요.

서버 터미널(SSH) 접속 후 패키지 관리자를 이용해 Fail2ban을 설치합니다.

  • 설치 명령어: sudo apt update && sudo apt install fail2ban -y
  • Verification: fail2ban-client --version 명령어를 입력하여 설치된 버전을 확인합니다.
2.jail.local 설정 파일 생성:보안 표준 준수.

기본 제공 파일인 jail.conf는 업데이트 시 덮어씌워질 수 있으므로, 재정의용 개별 파일인 jail.local을 복사하여 생성하고 편집합니다.

  • 설정 파일 복사 명령어: sudo cp /etc/apt/jail.conf /etc/fail2ban/jail.local (또는 sudo nano /etc/fail2ban/jail.local)
3.SSH 감시 규칙(Jail) 정의:파라미터 세팅.

jail.local 파일 내부에서 [sshd] 블록 구문을 찾아 감시 옵션을 수정하거나 파일 맨 아래에 추가합니다.

Ini, TOML
 
[sshd]
enabled   = true
port      = ssh
filter    = sshd
logpath   = /var/log/auth.log
maxretry  = 5
findtime  = 10m
bantime   = 1h
ignoreip  = 127.0.0.1/8 192.168.0.0/24
  • maxretry = 5: 5회 로그인 실패 시 차단합니다.
  • findtime = 10m: 10분 이내의 실패 횟수를 집계합니다.
  • bantime = 1h: 감지된 IP를 1시간 동안 차단합니다. (영구 차단 시 -1 지정)
  • ignoreip: 관리자 PC나 내부 네트워크 IP가 실수로 차단되지 않도록 예외 처리합니다.
4.Fail2ban 서비스 재시작 및 동작 검증:데몬 적용.

작성한 규칙을 시스템에 적용하기 위해 Fail2ban 서비스를 재시작합니다.

  • 재시작 명령어: sudo systemctl restart fail2ban
  • 상태 확인 명령어: sudo systemctl enable fail2ban && sudo fail2ban-client status sshd
  • Verification: 출력되는 결과 중 Status for the jail: sshd 및 Currently banned: 0 항목이 표시되어 감시가 활성화되었는지 확인합니다.

3. 차단 상태 관리: IP 조회, 수동 차단 해제(Unban) 및 테스트

Fail2ban 구축 완료 후 현재 차단된 IP 목록을 조회하거나, 차단된 정상 관리자의 IP를 수동으로 풀어주는 관리 명령어 모음입니다.

[이미지: fail2ban-client status sshd 명령어를 실행하여 현재 차단된 악성 IP 목록을 터미널 콘솔 화면에서 확인하는 모습]

  1. 현재 차단된 IP 목록 조회 (status sshd)
    • SSH 서비스에 의해 감지되어 차단된 IP 리스트를 실시간으로 점검합니다.
    • 명령어: sudo fail2ban-client status sshd
  2. 차단된 특정 IP 수동 해제 (set unbanip)
    • 로그인 실수 등으로 차단된 관리자 IP(예: 192.168.0.50)를 수동으로 해제합니다.
    • 명령어: sudo fail2ban-client set sshd unbanip 192.168.0.50
    • Verification: 다시 status sshd 명령을 실행해 해당 IP가 목록에서 정상적으로 제거되었는지 확인합니다.
  3. 특정 IP 수동 즉시 차단 (set banip)
    • 의심스러운 악성 IP를 수동으로 감시 목록에 등록하여 차단합니다.
    • 명령어: sudo fail2ban-client set sshd banip [차단할_IP]

자주 묻는 질문 (FAQ)

Q1. Fail2ban을 켜두면 관리자인 저도 접속이 차단될 수 있나요?

A1. 네, 비밀번호를 지정된 횟수(maxretry) 이상 틀리게 입력하면 관리자 IP도 예외 없이 자동으로 차단될 수 있습니다. 이를 방지하기 위해 jail.local 설정 파일 내부의 ignoreip 항목에 본인이 사용하는 집이나 사무실의 고정 IP 대역(예: 192.168.0.0/24)을 사전에 예외 IP로 등록해 두는 것이 안전합니다.

Q2. SSH 기본 포트(22번)를 다른 임의의 포트(예: 22222번)로 바꿨는데 Fail2ban이 작동하나요?

A2. SSH 포트 번호를 변경하셨다면 jail.local 설정 내부의 port 항목을 수정해야 합니다. port = ssh 대신 port = 22222와 같이 변경한 포트 번호를 명시하거나, SSH 서비스 이름을 정확히 지정해 주어야 신규 포트에 대한 무차별 대입 공격을 정상적으로 모니터링합니다.

Q3. UFW 방화벽을 사용 중인데 Fail2ban과 충돌하지 않나요?

A3. 충돌하지 않고 서로 완벽하게 연동됩니다. Fail2ban은 UFW의 하단 동작 엔진인 iptables/nftables에 직접 차단 규칙을 동적으로 주입하므로, UFW 방화벽을 켜둔 상태에서도 정상적으로 차단 동작이 수행됩니다. 필요시 banaction = ufw 옵션을 적용하여 UFW 전용 규칙으로 차단하도록 설정할 수도 있습니다.

결론

외부와 통신하는 리눅스 가상화 서버의 보안을 지키기 위한 핵심 방어책은 Fail2ban을 이용한 자동 차단 시스템 구축입니다.

단순히 포트를 변경하는 1차원적 대안을 넘어, jail.local 기반의 실시간 로그 감시와 자동 IP 차단 규칙을 세팅해 두면 무차별 대입 공격 트래픽을 네트워크 입구에서 원천 차단할 수 있습니다.

본 가이드의 설치 4단계와 관리 명령어를 참고하셔서, 24시간 해킹 위협 없이 안심하고 사용할 수 있는 나만의 강력한 보안 가상화 인프라를 완성해 보시기 바랍니다.