Website được thiết kế tối ưu cho thành viên chính thức. Hãy Đăng nhập hoặc Đăng ký để truy cập đầy đủ nội dung và chức năng. Nội dung bạn cần không thấy trên website, có thể do bạn chưa đăng nhập. Nếu là thành viên của website, bạn cũng có thể yêu cầu trong nhóm Zalo "CNTT" các nội dung bạn quan tâm.

Bài 8. Kiểm soát truy cập theo quốc gia (GeoIP)

ICT

1. GeoIP là gì và vai trò trong kiểm soát truy cập

GeoIP là kỹ thuật xác định quốc gia (hoặc khu vực) của người truy cập dựa trên địa chỉ IP nguồn, thông qua cơ sở dữ liệu ánh xạ IP → thông tin địa lý.

Trong kiểm soát truy cập website, GeoIP không phải là cơ chế bảo mật tuyệt đối, mà là một lớp lọc bổ trợ, giúp:

  • Giảm lượng truy cập không mong muốn từ các khu vực không liên quan

  • Giảm scan, bot, brute-force từ nước ngoài

  • Giảm tải cho hệ thống phía sau (QMS/AI/Application)

GeoIP phát huy hiệu quả nhất khi được triển khai tại Reverse Proxy, nơi toàn bộ lưu lượng truy cập đều đi qua.


2. Khi nào nên dùng GeoIP

GeoIP nên được sử dụng khi thỏa mãn đa số các điều kiện sau:

2.1 Website chỉ phục vụ người dùng trong nước

  • Cổng thông tin nội bộ

  • Website bệnh viện, cơ quan nhà nước

  • Hệ thống nghiệp vụ không hướng tới người dùng quốc tế

Ví dụ:

  • Website quản trị bệnh viện

  • Cổng tiếp nhận hồ sơ, biểu mẫu

  • Trang thông tin chuyên ngành tiếng Việt


2.2 Website thường xuyên bị scan, bot từ nước ngoài

Dấu hiệu nhận biết:

  • Log truy cập dày đặc từ nhiều quốc gia không liên quan

  • Nhiều request vào /wp-admin, /admin, /login dù không dùng WordPress

  • User-Agent bất thường, tool scan

Trong trường hợp này, GeoIP giúp lọc thô rất hiệu quả.


2.3 Có Reverse Proxy đứng trước hệ thống

GeoIP nên đặt tại:

  • Reverse Proxy (Nginx)

  • Điểm vào tập trung của toàn bộ website

Không khuyến nghị:

  • Cấu hình GeoIP riêng lẻ ở từng backend application


3. Khi nào không nên dùng GeoIP

GeoIP không phải lúc nào cũng phù hợp. Không nên áp dụng trong các trường hợp sau:

3.1 Website có người dùng quốc tế hợp lệ

  • Website đào tạo, học thuật

  • Website cung cấp tài liệu, dịch vụ toàn cầu

  • Hệ thống có chuyên gia, đối tác truy cập từ nước ngoài

Nếu dùng GeoIP trong trường hợp này, bắt buộc phải có whitelist IP hoặc cơ chế ngoại lệ.


3.2 API tích hợp giữa các hệ thống

Đặc biệt:

  • API nội bộ

  • API kết nối với đối tác

  • API gọi từ server cloud quốc tế

GeoIP rất dễ:

  • Gây lỗi ngầm

  • Gây gián đoạn tích hợp

  • Khó debug

Nguyên tắc:

API → kiểm soát bằng IP / token / header
Không dùng GeoIP làm lớp chính


3.3 Khi cần độ chính xác tuyệt đối

GeoIP:

  • Phụ thuộc database

  • Có độ trễ cập nhật

  • Có sai số (VPN, IP roaming, mobile network)

Do đó không dùng GeoIP cho xác thực người dùng, chỉ dùng để lọc truy cập.


4. Ưu và nhược điểm của chặn theo quốc gia

4.1 Ưu điểm

  • Giảm mạnh bot, scan từ nước ngoài

  • Cấu hình tương đối đơn giản

  • Hiệu quả rõ rệt ngay sau khi áp dụng

  • Giảm tải cho backend

  • Phù hợp với hệ thống nhiều website


4.2 Nhược điểm

  • Không chính xác 100%

  • Người dùng dùng VPN có thể bị chặn nhầm

  • Dễ gây lỗi nếu áp dụng cho API

  • Phải cập nhật database GeoIP định kỳ

📌 Kết luận quan trọng:
GeoIP là lớp lọc thô, không phải lớp bảo mật cuối cùng.


5. Thực hành: Cấu hình GeoIP2 trên Nginx

Phần này giả định:

  • Bạn đang dùng Nginx

  • Có quyền root

  • Triển khai tại Reverse Proxy


5.1 Cài module GeoIP2 cho Nginx

apt update
apt install libnginx-mod-http-geoip2 -y

Kiểm tra module đã được load:

nginx -V 2>&1 | grep geoip

5.2 Tải database GeoIP (Country)

Khuyến nghị dùng GeoLite2 Country:

mkdir -p /usr/share/GeoIP
wget https://git.io/GeoLite2-Country.mmdb \
 -O /usr/share/GeoIP/GeoLite2-Country.mmdb

5.3 Khai báo GeoIP2 (global)

Tạo file:

nano /etc/nginx/conf.d/geoip2.conf

Nội dung:

geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
   $geoip2_country_code country iso_code;
   $geoip2_country_name country names en;
}

Kiểm tra cấu hình:

nginx -t && systemctl reload nginx

5.4 Chỉ cho phép truy cập từ Việt Nam

Bước 1: map quốc gia được phép

 
map $geoip2_country_code $allow_country {
    default 0;
    VN 1;
 }

Bước 2: áp dụng trong server block

Dán ngay vào file cấu hình nginx của website.
server {
    listen 80;
    server_name example.vn;
 
    if ($allow_country = 0) {
        return 403;
    }
 
    include /etc/nginx/snippets/backend/backend-active.conf;
 }
 
Hoặc có thể đặt tại snippets và include.
 

📌 Khuyến nghị:

  • Đặt map ở file dùng chung

  • Chỉ bật rule này cho website phù hợp


5.5 Whitelist IP nội bộ (bắt buộc)

Không bao giờ bật GeoIP mà không whitelist IP nội bộ.

 
geo $trusted_ip {
    default 0;
    10.10.0.0/16 1;
    192.168.1.0/24 1;
    203.113.130.10 1;
 }

Kết hợp:

 
map "$trusted_ip:$geoip2_country_code" $allow_access {
    default 0;
    "1:*"  1;
    "0:VN" 1;
 }
 
 
if ($allow_access = 0) {
    return 403;
 }

5.6 Không áp dụng GeoIP cho API nội bộ

Ví dụ:

 
location /api/internal/ {
    allow 10.10.0.0/16;
    deny all;
 
    include /etc/nginx/snippets/backend/backend-active.conf;
 }

6. Lỗi thường gặp khi dùng GeoIP

  1. Bật GeoIP cho toàn bộ hệ thống → API lỗi

  2. Không whitelist IP quản trị → tự khóa mình

  3. Đặt rule ở backend → không đồng bộ

  4. Quên cập nhật database GeoIP

  5. Debug sai vì không log country code

Khuyến nghị log kiểm tra:

 
log_format geo '$remote_addr $geoip2_country_code $request';

7. Checklist nhanh khi triển khai GeoIP

  •  Có Reverse Proxy

  •  Đã whitelist IP nội bộ

  •  Không áp dụng cho API

  •  Chỉ dùng cho website public phù hợp

  •  Có kế hoạch cập nhật database

  •  Có log để kiểm tra truy cập bị chặn


Kết luận

Kiểm soát truy cập theo quốc gia (GeoIP) là công cụ mạnh nhưng phải dùng đúng chỗ.
Khi triển khai đúng:

  • Giảm rủi ro

  • Giảm tải

  • Dễ vận hành

Khi triển khai sai:

  • Gây lỗi dịch vụ

  • Khó phát hiện

  • Ảnh hưởng hệ thống tích hợp

Trong mô hình vận hành chuyên nghiệp, GeoIP luôn đi sau kiểm soát IP, và đứng trước application, đúng vai trò của nó như một lớp lọc thông minh tại Reverse Proxy.