🌐 Как использовать базу данных GeoIP с nginx |

🌐 Как использовать базу данных GeoIP с nginx

Мануал

Используйте базу данных GeoIP с nginx для регистрации запросов и ограничения доступа.

Установим веб-сервер nginx.

sudo apt install nginx

Установим пакеты geoip-database и libnginx-mod-http-geoip.

Как заблокировать IP-адреса из стран, используя Iptables Geoip Addons

sudo apt install libnginx-mod-http-geoip geoip-database

Убедимся, что модуль geoip включен.

cat /etc/nginx/modules-enabled/50-mod-http-geoip.conf
load_module modules/ngx_http_geoip_module.so;

Определим местоположение базы данных страны.

sudo tee /etc/nginx/conf.d/010-geoip.conf <<EOF
geoip_country /usr/share/GeoIP/GeoIP.dat;
EOF

Определим формат логов, включающий код страны geoip.

sudo tee /etc/nginx/conf.d/020-log_format.conf <<'EOF'
log_format combined_with_country '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$geoip_country_code"';
EOF

Удалим виртуальный хост по умолчанию.

sudo unlink /etc/nginx/sites-enabled/default

Определим виртуальный хост с помощью пользовательского формата лога.

sudo tee /etc/nginx/sites-available/country_example <<'EOF'
server {
listen 80 default_server;
listen [::]:80 default_server;
access_log  /var/log/nginx/country.access.log combined_with_country;
error_log   /var/log/nginx/country.error.log;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
EOF
sudo ln -s /etc/nginx/sites-available/country_example /etc/nginx/sites-enabled/

Проверим синтаксис конфигурации.

🌐 Блокирование вредоносных ботов, спама, юзер-агентов, Ransomware на Nginx

sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезагрузим конфигурацию nginx.

sudo systemctl reload nginx

Проверим

curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Date: Mon, 23 Oct 2023 22:32:08 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 23 Oct 2023 20:53:45 GMT
Connection: keep-alive
ETag: "6536dd59-264"
Accept-Ranges: bytes
tail /var/log/nginx/country.access.log
127.0.0.1 - - [23/Oct/2023:22:32:08 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.81.0" "-"

Обновите виртуальный хост, чтобы разрешить только выбранное количество стран.

sudo tee /etc/nginx/sites-available/country_example <<'EOF'
map $geoip_country_code $blocked_country {
PL      0;
DE      0;
US      0;
default 1;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
access_log  /var/log/nginx/country.access.log combined_with_country;
error_log   /var/log/nginx/country.error.log;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
if ($blocked_country) {
return 403;
}
try_files $uri $uri/ =404;
}
}
EOF

Проверим конфигурацию nginx.

sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезагрузим конфигурацию nginx.

Linux: как перезапустить Nginx на Ubuntu / Centos / Docker

sudo systemctl reload nginx

Посмотрим, как это работает.

curl -I localhost
HTTP/1.1 403 Forbidden
Server: nginx/1.18.0 (Ubuntu)
Date: Mon, 23 Oct 2023 22:33:00 GMT
Content-Type: text/html
Content-Length: 162
Connection: keep-alive
tail /var/log/nginx/country.access.log
127.0.0.1 - - [23/Oct/2023:22:32:08 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.81.0" "-"
127.0.0.1 - - [23/Oct/2023:21:18:46 +0000] "HEAD / HTTP/1.1" 403 0 "-" "curl/7.81.0" "-"

Дополнительные примечания

Nginx, установленный из официального репозитория, требует наличия модуля пакета nginx-module-geoip, который может быть включен в nginx.conf, и структура конфигурации немного отличается.

Основное отличие заключается в том, что он не поддерживает базу данных geoip2.

Версия Ubuntu более старая, но она может использовать базу данных geoip2 с самого начала.

см. также:

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий