Nginx chặn truy cập

Hôm nay kienthuclinux.com sẽ hướng dẫn các bạn cấu hình nginx chặn truy cập site theo quốc gia sử dụng module GeoIP. Ngx_http_geoip_module tạo ra các biến với giá trị dựa trên IP của client truy cập, để làm được điều này GeoIP đã sử dụng cơ sở dữ liệu MaxMind đã được biên dịch trước đó.

Nginx chặn truy cập
Nginx chặn truy cập theo quốc gia

Module này mặc định không built khi bạn compile hoặc vì lý do nào đó bạn yum nginx về mà chưa có thì bạn có thể làm theo các bước sau:

1. Cài đặt

Nếu compile thì bạn thêm option này vào

--with-http_geoip_module

Còn nếu yum thì làm như sau

yum install epel* -y
yum provides geoip-devel
yum install geoip-devel

mặc định đường dẫn chứa database GeoIP /usr/share/GeoIP/GeoIP.dat

2. Cấu hình

Thêm đoạn sau vào khối http trong nginx.conf

#deny IP country
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
    default yes;
    CN no;
}

đoạn config trên cho phép tất cả IP các quốc gia truy cập trừ các IP của Trung Quốc. Bạn có thể lấy mã quốc gia tại link này

Tiếp đó bạn mở file cấu hình vhost ra và thêm vào đoạn config sau vào khối server hoặc khối location

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

Nếu IP đó là của Trung Quốc thì truy cập trang sẽ trả về status code 444, bạn cũng có thể trả về mã lỗi bất kỳ như 403 cũng được, tùy mình thích mã nào mình để mã đó thôi (tự để 1 trang html chửi tụi nó cũng được :v). Nhớ reload lại nginx service các bạn nhé.

Nginx chặn truy cập
Kết quả khi truy cập trang bằng IP của quốc gia bị cấm

Vậy là mình đã hoàn tất hướng dẫn Nginx chặn truy cập theo quốc gia rồi. Cám ơn các bạn đã theo dõi!

Leave a Reply

Your email address will not be published. Required fields are marked *