Cloudflare + WHM(cPanel) + ModSecurity + cPHulk로 해외 로그인 공격(Brute Force) 막은 실전 설정값 정리
최근 워드프레스 사이트 운영 중 해외 IP에서 로그인 시도(무차별 대입, Brute Force)가 하루 수천~1만 건 단위로 폭증했습니다.
단순히 “보안 플러그인으로 차단” 수준을 넘어, 서버 부하(403/리디렉트 반복)와 서비스 품질 저하까지 체감되더군요.
특히 Cloudflare를 사용 중인데도 공격 IP가 서버 로그에 해외 IP로 그대로 찍히는 현상이 있어, “앞단(Cloudflare) + 서버(WHM/cPanel) + WAF(ModSecurity)”까지 보안 레이어를 제대로 잡는 방식으로 정리했습니다.
- WordPress /wp-login.php 대상으로 반복 로그인 시도 폭주
- /xmlrpc.php 취약점/멀티콜 기반 스캔 가능성
- Cloudflare 국가 차단을 했는데도 서버 로그에 해외 IP가 직접 기록
- 로그인 제한 플러그인의 리디렉트 폭증으로 서버 자원 소모
1) 대응 전략 (앞단에서 최대한 막고, 서버에서 한 번 더 차단)
- Cloudflare에서 워드프레스 로그인/XML-RPC를 먼저 방어
- WHM(cPanel)의 cPHulk로 서버 로그인 브루트포스 방어 강화
- ModSecurity(WAF)로 악성 요청/취약점 스캔을 403 차단
- 로그(Hits/Audit)로 “실제로 막히는지”를 확인해 오탐만 튜닝
2) WHM cPHulk 설정값 (실전 추천값)
공격이 심한 상황에선 “느슨하게” 두면 의미가 없습니다.


그래서 아래 값은 정상 사용자의 불편은 최소로 하면서도 외부(해외) 공격을 빠르게 컷할 수 있는 설정을 해줍니다.
ON
Brute Force Protection Period: 10 minutes
Maximum Failures by Account: 5
Apply protection to: local and remote addresses (중요)
Allow username protection to lock the "root" user: OFF
ON
IP Address-based Brute Force Protection Period: 60 minutes
Maximum Failures per IP Address: 3
Block IP addresses at the firewall level if they trigger brute force protection: ON
Maximum Failures per IP Address before the IP Address is Blocked for One Day: 10
Block IP addresses at the firewall level if they trigger a one-day block: ON
- whitelist 밖 IP에서 root 로그인 성공 시 알림: ON
- known netblock이라도 whitelist 밖 root 로그인 성공 시 알림: ON
- brute force user 감지 시 알림: ON (알림 폭탄이면 추후 OFF 조정)
3) ModSecurity (WAF) 적용 — “설치만으로는 안 되고, 엔진이 실제로 돌아야 함”

WHM의 ModSecurity Vendors에서 OWASP Core Rule Set(CRS)를 설치/활성화합니다.

그런데 여기서 자주 놓치는 게 있습니다. Connections Engine이 “Do not process the rules”로 되어 있으면 실제로 규칙을 검사하지 않습니다.
Connections Engine: Do not process the rules
Audit Log Level: Only log noteworthy transactions (Recommended)
Connections Engine: Process the rules
Rules Engine: Process the rules
4) 적용 결과 확인 (Hits List에서 403 차단 확인)
설정을 적용한 뒤 WHM의 ModSecurity Tools → Hits List에서 차단 로그가 쌓이기 시작했습니다.

여기서 핵심은 Severity=CRITICAL + Status=403 조합입니다.
- 930130 — Restricted File Access Attempt
- 949110 — Inbound Anomaly Score Exceeded (Total Score)
- 980130 — SQLi/XSS/RFI 등 복합 패턴 점수 초과
이런 로그가 반복되면 대부분 자동 스캐너/취약점 탐색입니다. (정상 사용자 트래픽이 막히는지 테스트만 꼭 해주세요)
5) Cloudflare 권장 룰 (서버 부하 줄이는 핵심)
ModSecurity가 잘 막고 있어도, 공격 요청이 서버까지 오면 매 요청마다 검사 비용이 듭니다.
- [IT 리뷰/블로그 SEO] - 워드프레스 index.php CPU 70% 과부하 wp-login 공격·해외 트래픽 차단·SSH 로그 확인
- [IT 리뷰/블로그 SEO] - 워드프레스 속도 최적화 관리자페이 로그인 후 속도 저하 문제 해결
그래서 가능한 한 Cloudflare에서 먼저 끊어 서버 부하를 줄이는 게 정답입니다.
- /xmlrpc.php → Block
- /wp-login.php → Managed Challenge
- 반복 공격 IP → IP Block
6) 내일 확인할 체크 포인트 (그래프가 내려가는지 보는 방법)
“내일 그래프가 내려가나?”만 보면 집계 기간 때문에 체감이 늦을 수 있습니다. 아래 3가지를 같이 보면 정확합니다.
- 최근 1시간/오늘 기준 로그인 실패가 줄었는지
- Cloudflare Security Events에서 wp-login/xmlrpc가 차단/챌린지 되는지
- WHM ModSecurity Hits에서 403 차단이 지속되는지 (오탐 여부 포함)
이상 이번 케이스에서 핵심은 “보안 기능을 설치했다”가 아니라, 실제로 규칙이 처리되고(Connections Engine), 서버/앱까지 오기 전에(Cloudflare) 최대한 차단하는 구조를 만든 것입니다. 이후에도 특정 IP/호스트(예: mail, server)가 반복적으로 맞으면 Cloudflare/서버 방화벽 레벨에서 추가 차단을 권장합니다.
'IT 리뷰 > 블로그 SEO' 카테고리의 다른 글
| 워드프레스 & WHM 보안 서치콘솔 오류부터 외부 유입 차단까지 (0) | 2026.02.12 |
|---|---|
| 구글 페이지스피드 Robots.txt AI봇 차단 해결후기 (0) | 2026.02.12 |
| 멀티 서버 세션 저장소는 왜 Redis 많을까? Memcached 비교로 정리 (0) | 2026.02.11 |