VPS 악성 스캔 및 공격 방지: Fail2Ban 완벽 설치 및 보안 설정 가이드

새로운 VPS 서버를 구매하고 운영체제를 설치한 뒤 도메인을 공인 IP에 연결하는 순간, 여러분의 서버는 이미 전 세계 수만 개의 자동화된 공격 스크립트의 표적이 됩니다.

2026년 현재, 단순히 SSH 포트를 변경하거나 시각화된 보안 패널을 설치하는 것만으로는 충분하지 않습니다. /var/log/auth.log 파일을 확인해 보면 전 세계 각지에서 시도되는 무차별 대입 로그인 기록으로 가득할 것입니다. 설령 비밀번호 로그인을 비활성화했더라도, 이러한 악의적인 동시 요청은 서버의 CPU 자원과 네트워크 연결 수를 끊임없이 소모합니다.

소중한 서버가 스캐너에 의해 마비되거나 좀비 PC로 전락하는 것을 막기 위해, 오늘은 핵심 방어 솔루션인 Fail2Ban 설치 및 구성 방법을 상세히 알아보겠습니다.

이 가이드는 SSH 무차별 대입 공격을 정밀하게 차단할 뿐만 아니라, Nginx와 결합하여 악성 CC 공격 및 워드프레스 취약점 스캔을 방어하는 방법까지 다룹니다. 명확한 데이터와 즉시 적용 가능한 설정 파일을 통해 서버 보안 문제를 근본적으로 해결해 드리겠습니다.

침입 차단의 핵심: Fail2Ban의 작동 원리

공격적인 네트워크 환경에서 발생하는 일반적인 스캔은 크게 두 가지로 나뉩니다.

  1. 포트 스캔 및 SSH 무차별 대입: 봇이 24시간 내내 22번 포트 등을 확인하며 취약한 비밀번호 사전을 이용해 로그인을 시도합니다.
  2. 웹 취약점 및 CC 스캔: 워드프레스와 같은 프로그램을 겨냥해 wp-login.php나 민감한 플러그인 디렉토리를 스캔하며, 고빈도 CC 요청으로 데이터베이스 자원을 고갈시킵니다.

Fail2Ban의 논리는 매우 효율적입니다. 본질적으로 로그 기반의 침입 방지 시스템(IPS)인 이 도구는 SSH, Nginx, 시스템 로그 등을 실시간으로 감시합니다. 특정 IP가 설정된 시간(findtime) 내에 규정된 횟수(maxretry) 이상의 악의적인 행동을 보이면, Fail2Ban은 즉시 시스템 방화벽(iptables, ufw, firewalld)을 호출하여 해당 IP의 접속을 일정 시간(bantime) 동안 원천 차단(Drop)합니다.

🔥 Fail2Ban 핵심 방어 파라미터 요약
핵심 데이터
파라미터명 기능 설명 단위/형식 권장 안전값 실전 역할
findtime 통계 주기 초 (s) / 분 (m) 10m (600s) 공격 횟수를 합산할 시간 범위
maxretry 최대 허용 횟수 숫자 3 ~ 5 차단 전까지 허용되는 오류 횟수
bantime 차단 기간 시간 (h) / 일 (d) 24h 또는 48h 접속이 금지되는 형벌 시간

고속 설치 및 설정 파일 관리 규칙

사용 중인 VPS가 Debian이나 Ubuntu 계열이라면 설치 과정은 매우 간단합니다.

1. 한 줄 설치

sudo apt update
sudo apt install fail2ban -y

2. 설정 파일의 규칙 (주의사항)

설치가 완료되면 Fail2Ban 설정 파일은 /etc/fail2ban/ 디렉토리에 저장됩니다. 초보자가 흔히 하는 실수는 jail.conf 파일을 직접 수정하는 것입니다.

올바른 관리 방법: 시스템은 먼저 jail.conf의 기본 설정을 불러온 뒤 jail.local 파일을 읽어와 해당 내용을 덮어씁니다. 소프트웨어 업데이트 시 jail.conf는 초기화될 수 있지만, jail.local에 작성한 내용은 안전하게 유지됩니다.

따라서 가장 먼저 로컬 설정 파일을 복사 생성해야 합니다.

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

3. 전역 정책 편집

에디터로 /etc/fail2ban/jail.local 파일을 열고 [DEFAULT] 섹션을 찾아 보안 기준을 설정하세요.

Fail2Ban 기본 설정 화면
  • ignoreip = 127.0.0.1/8 ::1 사용자의 서버 접속용 IP (자신이 차단되는 것을 방지하기 위해 필수 등록).
  • bantime = 24h (차단 시간).
  • findtime = 10m (감시 시간 범위).
  • maxretry = 3 (허용 횟수).

심화 실전 1: SSH 원천 방어 전략

‘비밀번호 로그인을 끄고 키(Key) 인증만 사용하면 Fail2Ban은 필요 없다’는 생각은 위험합니다. 키 인증만 사용하더라도 악성 스크립트는 지속적으로 TCP 연결을 시도하여 로그를 생성하고 SSH 서비스 자원을 소모시킵니다.

가장 완벽한 방어 조합은 다음과 같습니다: SSH 기본 포트 변경 + Root 로그인 금지 + 키 인증 전용 설정 + Fail2Ban 최종 방어. 이 조합은 공격 시도의 99%를 원천적으로 줄여주며, 나머지는 Fail2Ban이 네트워크 계층에서 폐기하여 서버 부하를 최소화합니다.

jail.local에서 [sshd] 모듈을 찾아 활성화하세요.

[sshd]
enabled = true
port    = 2222  # 변경된 SSH 포트 번호를 입력하세요
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 3

심화 실전 2: 워드프레스 보안 및 프리셋 활용

워드프레스의 wp-login.php 무차별 대입이나 XML-RPC 공격에 대해서는 최신 버전의 Fail2Ban에 이미 사전 정의된 필터 규칙이 포함되어 있습니다. 복잡한 정규식을 직접 작성할 필요가 없습니다.

jail.local 하단에 다음 설정을 추가하여 즉시 활성화하세요.

[wordpress]
enabled = true
port = http,https
filter = wordpress  # 기본 내장 규칙 호출
logpath = /var/log/nginx/access.log # 웹 서버 로그 경로와 일치해야 함
maxretry = 5
findtime = 10m
bantime = 24h

심화 실전 3: Nginx CC 공격 및 악성 크롤러 방어

CC 공격(Challenge Collapsar)은 다수의 시스템을 이용해 실제 사용자인 것처럼 고빈도 접속을 시도하여 PHP와 데이터베이스를 마비시킵니다. Nginx의 limit_req 모듈과 Fail2Ban을 결합하면 이를 효과적으로 차단할 수 있습니다.

1. 고빈도 CC 요청 차단

Nginx limit_req가 작동하면 error.log에 기록이 남습니다. 다음 설정을 통해 해당 IP를 차단하세요.

[nginx-limit-req]
enabled = true
port    = http,https
filter  = nginx-limit-req
logpath = /var/log/nginx/error.log
findtime = 1m
maxretry = 10  # 1분 내 10회 제한 초과 시 즉시 차단
bantime = 24h

2. 악성 404 취약점 스캐너 차단

해킹 도구로 .env, backup.zip 같은 민감한 파일을 탐색할 때 발생하는 대량의 404 오류를 감지합니다.

[nginx-botsearch]
enabled = true
port     = http,https
filter   = nginx-botsearch
logpath  = /var/log/nginx/access.log
maxretry = 3

설정 후 sudo systemctl restart fail2ban 명령어로 서비스를 재시작하세요. sudo fail2ban-client status nginx-limit-req 명령어로 차단 현황을 실시간 확인할 수 있습니다.

vps1111의 조언: 계층형 방어 전략

가장 피해야 할 보안 설정은 ‘과도한 설정’과 ‘논리적 공백’입니다. 운영 전문가로서 전해드리는 두 가지 핵심 원칙입니다.

💡 vps1111 운영 팁:

  • 영구 차단(bantime = -1)은 지양하세요: 영구 차단은 방화벽 규칙 체인을 불필요하게 길게 만들어 시스템 성능을 저하시키고, 오탐 시 대처를 어렵게 만듭니다. 24~48시간 정도의 차단만으로도 대부분의 자동화 스크립트는 비용 대비 효율이 낮아 공격을 포기하게 됩니다.
  • 계층형 방어의 이해: Fail2Ban은 애플리케이션 계층 소프트웨어입니다. 수백 Gbps급의 대규모 DDoS 공격은 호스트 내부 도구만으로는 막을 수 없습니다. 인프라 수준에서 기본 DDoS 방어(Cleaning) 능력을 갖춘 데이터센터의 VPS를 선택하는 것이 먼저이며, Fail2Ban은 그 내부에서 정밀한 침입 시도를 걸러내는 용도로 사용해야 완벽한 방어 체계가 완성됩니다.

이 가이드에서 제시한 전략을 서버에 적용하는 것만으로도, 여러분의 웹사이트는 시중 대다수 서버보다 훨씬 견고한 보안 환경을 갖추게 될 것입니다.

기사 끝
 0
댓글(댓글 없음)