Chặn ip nước ngoài scan admin làm nặng sql bằng OpenLiteSpeed + CSF + Fail2Ban

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.php là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:

    /wp-login.php
    /wp-admin
    /xmlrpc.php
  • 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

  1. ✅ IP nước ngoài không vào được login WordPress admin ,xmlrpc.php ,wp-login.php
  2. ✅ IP nước ngoài không vào được DirectAdmin (2222) ,ssh ,ftp
  3. ✅ Bạn vẫn cho website hiển thị với khách quốc tế
  4. ✅ login admin sai 3 lần chặn 24h
  5. ✅ 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

5 1 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest
0 Góp ý
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận