Nếu bạn đang vận hành website WordPress trên server riêng (VPS / Dedicated) chạy OpenLiteSpeed, khả năng rất cao sẽ gặp tình trạng:
Bot nước ngoài liên tục scan
/wp-login.php,/wp-admin,/xmlrpc.phplàm CPU + MySQL load tăng cao, server lag, thậm chí treo.
Bài này mình sẽ chia sẻ cách chặn triệt để bot nước ngoài scan admin bằng OpenLiteSpeed + CSF + Fail2Ban, đã áp dụng thực tế cho server của mình có traffic lớn ~ 200k visit/day
📌 Dấu hiệu server bị bot scan login
Bạn sẽ thấy các hiện tượng:
Load CPU, MySQL tăng bất thường
Log access xuất hiện liên tục:
Trong access log có rất nhiều IP nước ngoài (US, CN, RU…)
🎯 Mục tiêu của bài viết
- ✅ IP nước ngoài không vào được login WordPress admin ,
xmlrpc.php ,wp-login.php - ✅ IP nước ngoài không vào được DirectAdmin (2222) ,ssh ,ftp
- ✅ Bạn vẫn cho website hiển thị với khách quốc tế
- ✅ login admin sai 3 lần chặn 24h
- ✅ Server nhẹ, đỡ load SQL / đỡ tốn tài nguyên
✅ Phần 1: Chặn IP nước ngoài vào WordPress Admin bằng OpenLiteSpeed
OpenLiteSpeed hỗ trợ GeoIP, rất phù hợp để chặn theo quốc gia.
🔧 Bước 1: Mở file cấu hình OLS
nano /usr/local/lsws/conf/httpd.conf
🔧 Bước 2: Thêm rule chặn IP không phải Việt Nam
<IfModule mod_rewrite.c>
RewriteEngine On
# Chặn xmlrpc
RewriteCond %{REQUEST_URI} ^/xmlrpc\.php$ [NC]
RewriteRule ^.*$ - [F,L]
# Chặn IP không phải VN vào WordPress admin
RewriteCond %{REQUEST_URI} ^/(wp-login\.php|wp-admin) [NC]
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^VN$
RewriteRule ^.*$ - [F,L]
</IfModule>
🔧 Bước 3: Bật GeoIP trong OpenLiteSpeed
nano /usr/local/lsws/conf/ips.conf
Tìm enableIpGeo Thêm hoặc sửa thành: enableIpGeo 1
Restart lại OpenLiteSpeed
/usr/local/lsws/bin/lswsctrl restart
🔐 Phần 2: Chặn IP nước ngoài login DirectAdmin / SSH / FTP (2222 / 22 / 21)
Bot và hacker nước ngoài không chỉ scan WordPress, mà còn scan DirectAdmin, SSH, FTP liên tục.
Nếu không chặn, chúng sẽ gây:
Tăng load server
Brute force mật khẩu
Lộ cổng quản trị server
Giải pháp an toàn nhất là:
👉 Chỉ cho phép IP Việt Nam + IP của bạn truy cập các cổng này.
👉 IP nước ngoài → Block từ Firewall, không cho tới gần server.
⚠️ CẢNH BÁO RẤT QUAN TRỌNG
Trước khi làm, bạn bắt buộc phải whitelist IP của bạn:
csf -a IP_CUA_BAN
✅ Cách làm bằng CSF (Chuẩn cho DirectAdmin server)
nano /etc/csf/csf.post.sh
Dán đoạn sau vào cuối file:
# -------- Allow Vietnam only for Admin Ports --------
# Allow IP Vietnam to Admin services
for ip in $(/usr/sbin/csf -g VN | awk '{print $1}'); do
iptables -I INPUT -p tcp -s $ip --dport 22 -j ACCEPT
iptables -I INPUT -p tcp -s $ip --dport 21 -j ACCEPT
iptables -I INPUT -p tcp -s $ip --dport 2222 -j ACCEPT
done
# Block all foreign IP to Admin services
iptables -I INPUT -p tcp --dport 22 -j DROP
iptables -I INPUT -p tcp --dport 21 -j DROP
iptables -I INPUT -p tcp --dport 2222 -j DROP
🔹 Bước 2: Restart CSF để áp dụng : csf -r
🔥 Phần 3: Bắt & Ban Bot Login Sai Bằng Fail2Ban + CSF (3 lần = khóa 24h)
Ở phần trước, bạn đã:
✅ Chặn IP nước ngoài vào admin
✅ Chặn SSH / FTP / DA cho quốc tế
Nhưng vẫn còn một nhóm nguy hiểm:
Bot nội địa hoặc VPN dùng IP Việt Nam để brute-force login WordPress.
Lúc này, ta cần thêm một lớp nữa:
✅ /wp-login.php
✅ /wp-admin
✅ /xmlrpc.php
✅ Bước 1: Kiểm tra Fail2Ban đã cài chưa
fail2ban-client -V
Nếu có version → OK
Nếu chưa có:
dnf install fail2ban -y systemctl enable fail2ban --now
✅ Bước 2: Tạo Filter Cho WordPress
nano /etc/fail2ban/filter.d/wordpress-login.conf
[Definition]
failregex = <HOST> -.*"(POST|GET) /wp-login.php
<HOST> -.*"(POST|GET) /xmlrpc.php
<HOST> -.*"(POST|GET) /wp-admin"
ignoreregex =
✅ Bước 3: Tạo Jail Cho WordPress
nano /etc/fail2ban/jail.local
[DEFAULT] banaction = iptables-multiport [wordpress-login] enabled = true filter = wordpress-login logpath = /var/log/httpd/domains/*.log maxretry = 3 findtime = 300 bantime = 86400 port = http,https
Bước 4: Restart Fail2Ban : systemctl restart fail2ban
Bước 5: Kiểm tra hoạt động fail2ban-client status

