Chặn quốc gia truy cập VPS DirectAdmin bằng CSF và DB-IP: hướng dẫn chi tiết

Nếu quản lý VPS dùng DirectAdmin, hẳn bạn đã quen với ConfigServer Security & Firewall (CSF) — công cụ firewall miễn phí giúp chặn brute-force, lọc port và ghi log tấn công. Nhưng có một tính năng mạnh mẽ mà nhiều người bỏ sót: chặn truy cập theo quốc gia. Khi phát hiện phần lớn bot quét port, spam comment hay tấn công SSH đến từ một vài quốc gia nhất định, việc chặn gọn cả dải IP của quốc gia đó sẽ giảm tải đáng kể cho server và giúp log “sạch” hơn hẳn.

Bài viết này Hoidapwp sẽ hướng dẫn bạn chặn quốc gia trên DirectAdmin bằng CSF, dùng database GeoIP miễn phí của DB-IP, kèm script tự động cập nhật hàng tháng qua cronjob để không phải làm thủ công.

CSF chặn theo quốc gia hoạt động như thế nào?

CSF cần biết “IP này thuộc quốc gia nào” — thông tin đó nằm trong một GeoIP database. CSF mặc định dùng MaxMind, nhưng DB-IP có bản Country Lite miễn phí, cập nhật hàng tháng, hoàn toàn đủ dùng. CSF sẽ nạp database vào ipset (cơ chế lọc IP siêu nhanh của Linux), tạo các chain như cc_cn, cc_ru… tương ứng từng quốc gia bạn muốn chặn, rồi áp luật từ chối kết nối ngay ở tầng firewall.

Bước 1 – Chuẩn bị GeoIP database từ DB-IP

DB-IP Country Lite là gì?

DB-IP Country Lite là cơ sở dữ liệu IP → quốc gia được DB-IP phát hành miễn phí mỗi tháng. File ở định dạng CSV nén .csv.gz, đặt tên theo năm-tháng:

https://download.db-ip.com/free/dbip-country-lite-YYYY-MM.csv.gz

Ví dụ, file của tháng 01/2026 là dbip-country-lite-2026-01.csv.gz. Mỗi dòng trong file có dạng ip_start,ip_end,country_code — dải IP bắt đầu, dải IP kết thúc và mã quốc gia ISO 2 chữ cái.

Thư mục chứa database trên CSF

CSF lưu database GeoIP tại /var/lib/csf/Geo/. Script ở bước sau sẽ tự tải file DB-IP mới nhất của tháng hiện tại về đúng thư mục này.

Chặn quốc gia truy cập VPS DirectAdmin bằng CSF và DB-IP: hướng dẫn chi tiết

Bước 2 – Tạo script tự động tải và cập nhật DB-IP

DB-IP phát hành file mới mỗi tháng nên bạn cần cập nhật định kỳ. Tạo script sau tại /usr/local/bin/update-csf-geoip.sh:

#!/bin/bash
# update-csf-geoip.sh
# Script tai DB-IP Country Lite CSV hang thang va cap nhat cho CSF

YEAR=$(date +%Y)
MONTH=$(date +%m)
URL="https://download.db-ip.com/free/dbip-country-lite-${YEAR}-${MONTH}.csv.gz"
DEST="/var/lib/csf/Geo/dbip-country-lite.csv.gz"

# Tai file DB-IP
wget -O "$DEST" "$URL"

# Giai nen thanh CSV
gunzip -f "$DEST"

# Reload CSF de ap dung du lieu moi
csf -r

Script tự lấy năm-tháng hiện tại nên mỗi lần chạy đều tải đúng file mới nhất. Cấp quyền thực thi:

chmod +x /usr/local/bin/update-csf-geoip.sh

Tiếp theo, đặt cronjob để script chạy tự động lúc 3 giờ sáng ngày mùng 1 hàng tháng. Mở crontab:

crontab -e

Thêm dòng sau rồi lưu:

0 3 1 * * /usr/local/bin/update-csf-geoip.sh > /dev/null 2>&1

Bước 3 – Cấu hình trong csf.conf

Mở file cấu hình chính của CSF:

nano /etc/csf/csf.conf

Tìm và chỉnh các tham số sau:

# Bat ipset de dung GeoIP
LF_IPSET = "1"

# Thu muc chua GeoIP database
GEOIP_DB = "/var/lib/csf/Geo/"

# Chan quoc gia (ma ISO 2 chu cai)
CC_DENY = "CN,RU,IR"

# Cho phep quoc gia (neu muon whitelist)
# CC_ALLOW = "VN,US"

# Chan quoc gia theo port (tuy chon)
# CC_DENY_PORTS = "CN:22,25"

# Cho phep quoc gia theo port (tuy chon)
# CC_ALLOW_PORTS = "US:22,80,443"

# Tat che do test
TESTING = "0"

Giải thích các tham số quan trọng

LF_IPSET

Bật dùng ipset — bắt buộc nếu muốn xài tính năng GeoIP của CSF, vì danh sách IP theo quốc gia rất lớn, iptables thường không xử lý nổi.

CC_DENY / CC_ALLOW

CC_DENY là danh sách quốc gia bị chặn hoàn toàn, nhập mã ISO 2 chữ cái cách nhau bằng dấu phẩy (ví dụ CN,RU,IR). CC_ALLOW là whitelist — khi bật, chỉ các quốc gia trong danh sách mới được phép kết nối.

CC_DENY_PORTS / CC_ALLOW_PORTS

Biến thể “nhẹ” hơn: chỉ chặn/cho phép quốc gia trên những port nhất định, ví dụ CN:22,25 là chặn Trung Quốc truy cập SSH (22) và SMTP (25), các dịch vụ khác vẫn mở bình thường.

Chặn quốc gia truy cập VPS DirectAdmin bằng CSF và DB-IP: hướng dẫn chi tiết

Bước 4 – Reload CSF và kiểm tra hoạt động

Sau khi lưu cấu hình, reload CSF để áp dụng:

csf -r

Kiểm tra xem ipset đã có dữ liệu quốc gia chưa:

ipset list

Nếu thành công, bạn sẽ thấy các chain cc_cn, cc_ru… với hàng nghìn entries (dải IP theo quốc gia). Đồng thời, mở log của CSF để xác nhận GeoIP đã load:

tail -f /var/log/lfd.log

Một số lưu ý quan trọng

File CSV cần convert sang CIDR

DB-IP CSV có dạng ip_start,ip_end,country_code, còn CSF cần định dạng CIDR. CSF có sẵn công cụ /usr/local/csf/bin/csfgeoip để chuyển đổi. Nếu các chain quốc gia vẫn trống sau khi reload, hãy chạy thủ công:

/usr/local/csf/bin/csfgeoip

Chặn toàn quốc gia là con dao hai lưỡi

Chặn gọn cả quốc gia có thể vô tình loại bỏ cả người dùng hợp pháp (khách hàng, đối tác). Nếu server phục vụ khách Việt Nam, hãy cân nhắc dùng CC_DENY_PORTS để chỉ chặn các port nhạy cảm (SSH, mail…) thay vì chặn toàn bộ.

Theo dõi định kỳ

Đừng quên kiểm tra cronjob tháng đầu tiên xem file DB-IP có được tải về và CSF có reload thành công không — chỉ cần một lần chạy lỗi là database sẽ cũ dần.

Tóm lại, chỉ với vài bước: chuẩn bị database DB-IP, tạo script cronjob tự động cập nhật, cấu hình csf.conf rồi reload — VPS DirectAdmin của bạn đã có thêm một lớp bảo vệ hiệu quả trước lưu lượng xấu từ các quốc gia không mong muốn.

👉 Cần VPS để thực hành? Đăng ký VPS BNIX tại đây: https://my.bnix.one/aff.php?aff=82


🏢 Chuyên thiết kế web cho doanh nghiệp và cá nhân
🤖 Giải pháp tự động hóa cho Doanh nghiệp và cá nhân
📞 0925045760 → https://zalo.me/0925045760
🌐 thietkewebdian.com → https://thietkewebdian.com

4.9/5 - (55 bình chọn)
Đăng ký
Thông báo về
guest
0 Bình Luận
Oldest
Newest Most Voted
Inline Feedbacks
Xem tất cả
0
Rất thích suy nghĩ của bạn, hãy bình luận.x
()
x