Fail2ban 무차별 로그인 공격 화이트리스트 Apache Postfix 추가
블루호스트 VPS Fail2ban 무차별 로그인 공격 막는 법 화이트리스트 Apache Postfix까지
워드프레스 운영하다 보면 wp-login.php로 무단로그인 시도가 끝도 없이 들어올 때가 있습니다. 플러그인으로 제한을 걸어도 공격량이 크면 결국 서버가 먼저 지칩니다. 그래서 저는 VPS에서는 “워드프레스 안에서만 막기”보다 서버 단에서 먼저 끊어주는 Fail2ban을 같이 붙여두는 쪽이 체감이 훨씬 좋았습니다.

Fail2ban은 서버 로그 파일을 스캔해서 로그인 실패 같은 패턴이 반복되는 IP를 자동으로 차단합니다. 기본으로는 SSH를 감시하지만, 설정을 확장하면 Apache 인증 실패나 메일서버(Postfix) 인증 실패 같은 것도 같이 잡아낼 수 있습니다.
참고 : 워드프레스 스팸댓글 Akismet 설정법 클라우드플레어 방화벽
Fail2ban이 하는 일
Fail2ban은 간단히 말해 “로그 기반 자동 차단기”입니다.
1) 로그를 봅니다
예를 들어 SSH면 /var/log/auth.log 또는 /var/log/secure 같은 로그를 감시합니다.
2) 필터가 패턴을 찾습니다
/etc/fail2ban/filter.d/에 있는 필터 파일(regexp 규칙)이 “이건 공격이다”라고 판단할 문자열을 찾습니다.
3) jail이 차단 정책을 실행합니다
몇 번 실패하면(maxretry), 얼마 동안(bantime), 어느 기간(findtime)으로 판단할지를 jail이 결정하고, 해당 IP를 방화벽 레벨에서 막아버립니다.
구성요소 Server Client Jail
Server
fail2ban 서버 프로세스가 백그라운드에서 로그를 감시하고 룰을 실행합니다.
Client
관리 명령은 fail2ban-client로 합니다.
fail2ban-client start
fail2ban-client version
fail2ban-client status
fail2ban-client status sshd
Jail
실제 차단 규칙 세트입니다. 어떤 로그를 볼지(logpath), 몇 번 실패하면 막을지(maxretry), 얼마나 막을지(bantime) 같은 정책이 들어갑니다.
설치 방법 우분투 데비안 CentOS Rocky
블루호스트 VPS는 환경이 제각각이라, 가장 흔한 설치 방식 두 가지를 같이 적어둡니다.
먼저 패키지 설치가 편하고, 특수한 이유가 있을 때만 소스 설치를 권합니다.
패키지로 설치
Ubuntu Debian
sudo apt update
sudo apt install -y fail2ban
CentOS Rocky Alma
sudo dnf install -y epel-release
sudo dnf install -y fail2ban
서비스 등록과 시작
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
소스 설치 예시
패키지가 너무 오래됐거나 특정 버전이 필요할 때만 선택합니다.
sudo wget https://github.com/fail2ban/fail2ban/archive/0.11.2.tar.gz
sudo tar xzf 0.11.2.tar.gz
cd fail2ban-0.11.2
sudo python setup.py install
서비스 등록과 시작
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
설정은 jail.conf 말고 jail.local로
/etc/fail2ban 에 jail.conf와 jail.local이 있습니다.
기본 파일(jail.conf)은 건드리지 않고, jail.local에서만 커스텀하는 게 관리가 편합니다. jail.local이 없다면 jail.conf를 복사해서 시작하면 됩니다.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo vi /etc/fail2ban/jail.local
내 IP를 화이트리스트로 제외하기
운영자 본인 IP가 차단되면 진짜 골치 아픕니다. 그래서 제일 먼저 ignoreip로 내 IP를 제외합니다.
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 <your_ip_address>
복수 IP 예시
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 136.232.203.134 157.10.161.187
팁 하나만 더 얹으면, 집 인터넷이 유동 IP면 “매번 바뀌어서” 화이트리스트가 의미가 없어집니다. 이 경우엔 고정 IP 환경(사무실, VPN, 고정 IP 상품)으로 관리자 접속을 통일하는 쪽이 속 편합니다.
Apache 인증 실패를 잡는 jail 추가
워드프레스 무단로그인 시도는 보통 wp-login.php지만, 서버 단에서는 인증 실패 로그가 반복되는 패턴을 같이 잡아두면 도움이 됩니다. Apache 인증 실패를 감시하는 jail 예시입니다.
jail.local에 apache-auth 추가
sudo vi /etc/fail2ban/jail.local
[apache-auth]
enabled = true
port = http,https
logpath = /var/log/httpd/*error_log
maxretry = 3
bantime = 600
주의사항입니다. 배포판마다 Apache 로그 경로가 다릅니다.
CentOS Rocky 계열은 보통
/var/log/httpd/error_log
Ubuntu Debian 계열은 보통
/var/log/apache2/error.log
본인 서버에 맞게 logpath를 꼭 확인해 주세요.
필터 파일 생성 apache-auth.conf
필터 파일은 /etc/fail2ban/filter.d/ 아래에 만듭니다.
sudo vi /etc/fail2ban/filter.d/apache-auth.conf
[Definition]
failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$
ignoreregex =
재시작
sudo systemctl restart fail2ban
메일서버 Postfix 인증 실패 차단
메일서버를 운영한다면 SMTP 인증을 두들기는 공격이 생각보다 자주 들어옵니다.
Postfix 예시로 jail을 추가해두면 “무작위 발송 시도”나 “계정 대입” 같은 것을 자동으로 막을 수 있습니다.
jail.local에 postfix-sasl 추가
sudo vi /etc/fail2ban/jail.local
[postfix-sasl]
enabled = true
port = smtp,ssmtp
logpath = /var/log/maillog
maxretry = 5
bantime = 3600
Ubuntu Debian은 메일 로그가 /var/log/mail.log 인 경우가 많습니다.
필터 파일 생성 postfix-sasl.conf
sudo vi /etc/fail2ban/filter.d/postfix-sasl.conf
[Definition]
failregex = ^%(__prefix_line)s.*: warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed: authentication failure$
ignoreregex =
재시작
sudo systemctl restart fail2ban
차단된 IP 확인 방법
jail별 상태 확인은 아래 명령 하나로 끝납니다.
sudo fail2ban-client status <jail_name>
예를 들어 SSH jail에서 차단된 IP 확인
sudo fail2ban-client status sshd
전체 동작 jail 목록 확인
sudo fail2ban-client status
운영하면서 같이 챙기면 좋은 값
fail2ban에서 자주 만지는 값은 아래입니다.
maxretry 로그인 실패 몇 번이면 차단할지
findtime 몇 분 또는 몇 시간 동안의 실패를 묶어서 판단할지
bantime 차단 시간
시간은 1h, 1d 같은 형태로도 쓸 수 있는 버전이 있고, 너무 길게 잡으면 정상 사용자도 차단될 수 있습니다. 저는 처음엔 짧게 시작해서, 로그를 보며 올리는 방식을 추천합니다. 공격자는 대개 며칠이고 몇 달이고 반복합니다. 한 번 붙으면 끈질깁니다.
워드프레스 & WHM 보안 서치콘솔 오류부터 외부 유입 차단까지
검색 엔진 최적화(SEO)와 서버 보안을 동시에 잡는 1%의 설정 디테일 워드프레스 운영 중 구글 서치콘솔에서 "robots.txt가 유효하지 않음"이나 "REST API 403 오류" 메일을 받으셨나요? 혹은 댓글창을 껐
jab-guyver.co.kr
그리고 jail을 늘릴수록 밴 목록이 많아지고 메모리 사용량이 증가할 수 있어서, “필요한 것만” 넣는 쪽이 안정적입니다.
워드프레스 보안은 Fail2ban만으로 끝나지 않는다
Fail2ban은 강력하지만 근본 치료는 아닙니다. 저는 VPS에서는 이렇게 조합합니다.
1) 서버 단 Fail2ban으로 반복 공격 IP를 먼저 끊기
2) 워드프레스 단 로그인 시도 제한 플러그인과 2단계 인증 적용
3) 앞단 가능하면 WAF로 wp-login.php와 xmlrpc.php 경로를 별도로 방어
이렇게 해두면 “로그가 미친 듯이 쌓이는 상태”에서 벗어나는 속도가 빨라집니다. 저도 처음에는 플러그인만 믿고 버티다가, VPS 리소스가 먼저 체력 고갈 나는 걸 보고 서버 쪽 방어를 붙였습니다.
FAQ
Q. jail.conf를 수정하면 안 되나요
A. 수정은 가능하지만 업데이트나 재설치 시 꼬일 확률이 높습니다. jail.local로 커스텀하는 방식이 관리가 편합니다.
Q. 내 IP를 화이트리스트로 안 넣으면 어떻게 되나요
A. 비밀번호 몇 번 틀렸다고 운영자 본인이 차단되는 일이 실제로 생깁니다. 원격 서버에서 이 상황이 나오면 해제하느라 시간 낭비가 큽니다.
Q. Apache 로그 경로가 다르면 설정이 무용지물인가요
A. 맞습니다. logpath가 실제 로그를 못 보면 감지가 0으로 뜹니다. 먼저 /var/log 아래에서 apache2 또는 httpd 로그 위치를 확인하고 맞춰야 합니다.
Q. 워드프레스 무단로그인 방어에 Fail2ban만 쓰면 충분한가요
A. 공격량이 큰 경우엔 부족할 수 있습니다. 서버 단 차단은 기본이고, 워드프레스 2단계 인증과 앞단 WAF까지 같이 가면 안정감이 확 올라갑니다.
Cloudflare + WHM(cPanel) + ModSecurity + cPHulk 해외 로그인 공격(Brute Force) 차단
Cloudflare + WHM(cPanel) + ModSecurity + cPHulk로 해외 로그인 공격(Brute Force) 막은 실전 설정값 정리최근 워드프레스 사이트 운영 중 해외 IP에서 로그인 시도(무차별 대입, Brute Force)가 하루 수천~1만 건 단
jab-guyver.co.kr