Giao diện
Câu hỏi thường gặp (FAQ) — IP Restriction
Câu hỏi chung
Bật whitelist và bị khoá ngoài, làm sao vào lại?
Có 3 cách:
Truy cập trực tiếp server qua SSH, kết nối database và cập nhật:
sqlUPDATE "ipRestrictionConfig" SET config = '{"mode":"blacklist","ipList":""}' WHERE key = 'ip-restriction-config';Tắt plugin bằng cách sửa database:
sqlUPDATE "applicationPlugins" SET enabled = false WHERE name = 'ip-restriction';Restart server — nếu IP list trong cache, cache sẽ được rebuild từ database
Plugin có hỗ trợ giới hạn theo user hoặc role không?
Hiện tại không. IP restriction áp dụng cho tất cả người dùng không phân biệt. Mọi request (kể cả chưa đăng nhập) đều bị kiểm tra IP.
Có hỗ trợ IPv6 không?
Có. Thư viện ip-range-check hỗ trợ cả IPv4 và IPv6, bao gồm CIDR notation.
Thay đổi danh sách IP có cần khởi động lại server không?
Không. Cấu hình được cache và tự động cập nhật qua hook afterSave. Thay đổi có hiệu lực ngay lập tức.
Plugin có ảnh hưởng hiệu suất không?
Không đáng kể. Kiểm tra IP sử dụng thư viện ip-range-check với thuật toán hiệu quả. Cấu hình được cache trong memory nên không cần truy vấn database mỗi request.
Cấu hình
Dùng Cloudflare, IP luôn là IP của Cloudflare?
Đúng nếu không cấu hình đúng. Cloudflare gửi IP gốc trong header CF-Connecting-IP. DigiForce cần:
- Cấu hình trusted proxy với dải IP của Cloudflare
- Middleware
extractClientIpsẽ đọc IP từ header phù hợp
Có thể hạn chế theo quốc gia (GeoIP) không?
Plugin chỉ hỗ trợ IP và CIDR range. Để hạn chế theo quốc gia:
- Dùng Cloudflare với firewall rules (tầng proxy)
- Dùng Nginx GeoIP module (tầng web server)
- Tìm danh sách IP theo quốc gia và thêm CIDR range vào plugin
CIDR notation nghĩa là gì?
CIDR (Classless Inter-Domain Routing) cho phép chỉ định dải IP:
| CIDR | Dải IP | Số IP |
|---|---|---|
192.168.1.0/32 | Chỉ 192.168.1.0 | 1 |
192.168.1.0/24 | 192.168.1.0 → 192.168.1.255 | 256 |
192.168.0.0/16 | 192.168.0.0 → 192.168.255.255 | 65,536 |
10.0.0.0/8 | 10.0.0.0 → 10.255.255.255 | 16,777,216 |
Danh sách IP nhập thế nào?
Nhập mỗi IP/CIDR trên một dòng, hoặc phân cách bằng dấu phẩy:
192.168.1.100
10.0.0.0/24
172.16.0.0/16Xử lý lỗi thường gặp
Lỗi 403 khi truy cập từ IP đã được thêm
Kiểm tra:
- IP thực tế: IP bạn thấy có thể khác IP thực do NAT hoặc proxy. Dùng whatismyip.com để kiểm tra
- Reverse proxy: Nếu dùng proxy, đảm bảo header
X-Forwarded-Forđược truyền đúng - CIDR range: Kiểm tra IP nằm trong range. VD:
192.168.1.100nằm trong192.168.1.0/24nhưng không nằm trong192.168.2.0/24 - Chế độ: Đảm bảo đang ở đúng chế độ (whitelist vs blacklist)
IP nội bộ (192.168.x.x) bị chặn dù đã thêm
Khi server và client cùng mạng nội bộ, IP có thể hiển thị là 127.0.0.1 hoặc ::1 (localhost) thay vì IP LAN. Thêm 127.0.0.1 và ::1 vào whitelist nếu cần.
Trang lỗi 403 hiển thị sai ngôn ngữ
Plugin bypass action app:getLang khỏi kiểm tra IP để trang lỗi hiển thị đúng ngôn ngữ. Nếu vẫn sai, kiểm tra:
- DigiForce đã cấu hình ngôn ngữ mặc định
- Trình duyệt gửi header
Accept-Languagephù hợp
Câu hỏi kỹ thuật
Plugin đăng ký middleware ở đâu?
Middleware được đăng ký trên app.dataSourceManager với tag ip-restriction, chạy sau middleware extractClientIp (để có ctx.state.clientIp).
Cấu trúc dữ liệu cấu hình
typescript
interface IControlConfig {
mode?: 'blacklist' | 'whitelist';
ipList?: string; // Danh sách IP phân cách bằng \n hoặc dấu phẩy
}Lưu trong collection ipRestrictionConfig với key cố định ip-restriction-config.