Các bước cấu hình Nginx để chặn truy cập từ một quốc gia nào đó hoàn toàn miễn phí dùng GeoIP module.

Chặn quốc gia miễn phí trên Nginx

Cách này sẽ sử dụng cơ sở dữ liệu IP của MaxMind GeoIP để xác định quốc gia của khách truy cập. Yêu cầu Nginx phải được kích hoạt module nginx-module-geoip thì mới dùng được.

Trong bài mình sử dụng CentOS 7, phiên bản CentOS khác hoặc hệ điều hành khác thao tác cũng tương tự.

Cài đặt Nginx với GeoIP module

Cài đặt module.

yum -y install nginx-module-geoip

Thêm dòng sau vào đoạn đầu tập tin /etc/nginx/nginx.conf.

load_module "modules/ngx_http_geoip_module.so";

Kiểm tra Nginx và khởi động lại nếu không có vấn đề gì.

nginx -t
service nginx restart

Lấy dữ liệu GeoLite2

Làm theo các bước sau.

  1. Đăng ký tài khoản MaxMind miễn phí tại đây.
  2. Kiểm tra email xác nhận, bấm vào liên kết đặt mật khẩu cho tài khoản rồi lấy AccountID và LicenseKey, chọn dòng versions older than 3.1.1.
  3. Cập nhật thông tin AccountID và LicenseKey trong tập tin /etc/GeoIP.conf.
  4. Cập nhật cơ sở dữ liệu IP GeoLite2 với lệnh: geoipupdate.

Có thể phải chờ 5 – 10 phút mới chạy được lệnh trên. Nếu như không có kết quả nào xuất hiện tức là bạn đã cập nhật xong, dữ liệu sẽ lưu trong thư mục /usr/share/GeoIP/.

Khi cần cài đặt trên server khác bạn chỉ cần sao chép lại AccountID và LicenseKey là được.

Cấu hình Nginx dùng GeoIP

Chỉnh sửa nội dung file /etc/nginx/nginx.conf, thêm đoạn sau vào block http {}, trước tất cả các dòng include.

geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
    default yes;
    RU no;
    AO no;
}

Ý nghĩa đoạn ví dụ trên là cho phép tất cả các nước truy cập, loại trừ Russia và Angola. Xem thêm danh sách mã các quốc gia tại đây.

Tiếp theo, chỉnh tập tin cấu hình tên miền muốn chặn tại /etc/nginx/conf.d/default.conf để sử dụng biến $allowed_country đã map, nên sử dụng ngay sau dòng server_name. Đoạn mã chặn như sau:

if ($allowed_country = no) {
    return 444;         
}

Kiểm tra Nginx và khởi động lại nếu không có vấn đề gì.

nginx -t
service nginx restart

Chúc các bạn thành công!

Nguồn: Canh Me.