Nginx: Sử dụng GeoIP (v1) chặn truy cập theo quốc gia và whitelist các IP address tin cậy

Sử dụng nginx để chặn truy cập vào trang web / dịch vụ của bạn đối với các khu vực không cần thiết sẽ rất hữu ích, đặc biệt khi phát hiện dịch vụ bị tấn công từ các IP không có user của dịch vụ.

Cấu hình nginx block theo quốc gia

ref: https://stackoverflow.com/a/30930303/2533787

ref: https://www.howtoforge.com/tutorial/how-to-use-geoip-with-nginx-on-ubuntu-16.04/

Kiểm tra phiên bản nginx có phù hợp và cài 1 số module cần thiết.

# kiểm tra nginx có complite với module --with-http_geoip_module
nginx -V
# cài đặt geoip database (thường có sẵn trong ubuntu)
sudo apt-get install geoip-database libgeoip1
# Update GeoIP Database
# /usr/share/GeoIP/GeoIP.dat but it could be outdated, let update
mv /usr/share/GeoIP/GeoIP.dat /usr/share/GeoIP/GeoIP.dat_bk
cd /usr/share/GeoIP/
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz
  • IP v4: https://dl.miyuru.lk/geoip/maxmind/country/maxmind4.dat.gz
  • IP v6: https://dl.miyuru.lk/geoip/maxmind/country/maxmind6.dat.gz

Tiếp theo, cấu hình nginx với GeoIP:

Mở file /etc/nginx/nginx.conf, thêm vào nội dụng sau trong http {}, trước các dòng include

ví dụ cho phép IP từ VN truy cập

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

bước này chưa chặn truy cập, chúng ta mới chỉ set giá trị cho biến $allowed_country

Bước tiếp theo, cấu hình virtualhost của chúng ta, (/etc/nginx/conf.d/YOURDOMAINHERE.conf) - đặt nội dung sau trong server {}:

location /testing/ {
    if ($allowed_country = no) {
        return 403;
    }
}

Chạy nginx -t để kiểm tra nếu có lỗi và service nginx reload để áp dụng cấu hình.

Tạo whitelist cho các địa chỉ IP tin cậy

Case này áp dụng trong 1 số trường hợp IP cần truy cập server nằm trong vùng bị block

Tượng tự, kiểm tra và reload lại nginx.


Đối với các phiên bản nginx mới (vd: 1.18.0), thường không còn bundle sẵn module --with-http_geoip_module, bạn nên chuyển sang sử dụng module GeoIP v2

Tags:
#nginx #geo-ip #security #firewall