Bạn đã có DirectAdmin và CSF cài sẵn. Để chặn truy cập theo quốc gia, ta cần GeoIP database và cấu hình trong CSF. Bài này sẽ hướng dẫn chi tiết, kèm theo script .sh để cronjob tự động tải file DB-IP về đúng thư mục.

🌍 1. Chuẩn bị GeoIP Database (DB-IP)
CSF mặc định hỗ trợ MaxMind, nhưng bạn có thể dùng DB-IP Country Lite miễn phí. DB-IP phát hành file hàng tháng theo định dạng:
https://download.db-ip.com/free/dbip-country-lite-YYYY-MM.csv.gzVí dụ: tháng 01/2026 → dbip-country-lite-2026-01.csv.gz.
🛠 2. Script .sh tự động tải và cập nhật DB-IP
Tạo file /usr/local/bin/update-csf-geoip.sh:
#!/bin/bash
# update-csf-geoip.sh
# Script tải DB-IP Country Lite CSV hàng tháng và cập nhật 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"
# Tải file DB-IP
wget -O "$DEST" "$URL"
# Giải nén thành CSV
gunzip -f "$DEST"
# Reload CSF để áp dụng dữ liệu mới
csf -r
Thiết lập quyền chạy:
chmod +x /usr/local/bin/update-csf-geoip.shCronjob tự động (ví dụ chạy ngày 1 hàng tháng lúc 3h sáng):
crontab -eThêm dòng:
0 3 1 * * /usr/local/bin/update-csf-geoip.sh > /dev/null 2>&1🔧 3. Cấu hình trong csf.conf
Mở file cấu hình:
nano /etc/csf/csf.confChỉnh các tham số:
# Bật ipset để dùng GeoIP
LF_IPSET = "1"
# Thư mục chứa GeoIP database
GEOIP_DB = "/var/lib/csf/Geo/"
# Chặn quốc gia (ISO code 2 chữ cái)
CC_DENY = "CN,RU,IR"
# Cho phép quốc gia (nếu muốn whitelist)
# CC_ALLOW = "VN,US"
# Chặn quốc gia theo port (tùy chọn)
# CC_DENY_PORTS = "CN:22,25"
# Cho phép quốc gia theo port (tùy chọn)
# CC_ALLOW_PORTS = "US:22,80,443"
# Tắt chế độ test
TESTING = "0"
🚀 4. Reload CSF
Sau khi chỉnh cấu hình:
csf -r📊 5. Kiểm tra hoạt động
- Xem danh sách ipset:
ipset list→ sẽ thấy các chaincc_cn,cc_ru, … có entries (IP range theo quốc gia). - Kiểm tra log:
tail -f /var/log/lfd.log→ xác nhận CSF đã load GeoIP thành công.
⚠️ Lưu ý
- DB-IP CSV có dạng
ip_start,ip_end,country_code. CSF cần CIDR, nên phải dùng scriptcsfgeoip(có sẵn trong/usr/local/csf/bin/) để convert. - Nếu chain quốc gia vẫn trống, hãy chạy:
/usr/local/csf/bin/csfgeoip - Chặn theo quốc gia có thể ảnh hưởng người dùng hợp pháp. Nên cân nhắc dùng CC_DENY_PORTS thay vì chặn toàn bộ.
✅ Tóm lại:
- Tạo script
.shđể cronjob tải DB-IP về/var/lib/csf/Geo/. - Cấu hình
csf.confvớiLF_IPSET,CC_DENY/CC_ALLOW. - Reload CSF và kiểm tra ipset.






