CSF

📖 Hướng dẫn đầy đủ: Chặn truy cập theo quốc gia bằng CSF trên DirectAdmin (sử dụng DB-IP)

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.

CSF

🌍 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.gz

Ví 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  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.sh

Cronjob tự động (ví dụ chạy ngày 1 hàng tháng lúc 3h sáng):

crontab -e

Thê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.conf

Chỉ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 chain cc_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 script csfgeoip (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.conf với LF_IPSET, CC_DENY/CC_ALLOW.
  • Reload CSF và kiểm tra ipset.

4.4/5 - (10 bình chọn)