Хотите узнать, как установить Nginx и отказать в доступе из страны? В этом учебнике мы собираемся настроить сервер Nginx, чтобы заблокировать доступ из страны.

• Ubuntu 18
• Ubuntu 19
• Ubuntu 20
• Nginx 1.18.0

В нашем примере сервер Nginx принимает веб-сайт WWW.GAMEKING.TIPS.

Учебник Nginx — Установка базы данных GEOIP2

Получите доступ к веб-сайту MAXMIND и создайте новую учетную запись.

Получите доступ к профилю учетной записи и создайте новый ключ.

Nginx - GeoIP2 key

Добавьте репозиторий MAXMIND в свой Ubuntu Linux.

add-apt-repository ppa:maxmind/ppa

Установите пакет под названием GEOIPUPDATE.

apt-get updateapt-get install geoipupdate

Редактировать файл конфигурации GEOIPUPDATE.

vi /etc/GeoIP.conf

Вставьте идентификатор учетной записи и ключ лицензии.

Вот файл, перед нашей конфигурацией.

AccountID YOUR_ACCOUNT_ID_HERELicenseKey YOUR_LICENSE_KEY_HEREEditionIDs GeoLite2-Country GeoLite2-City

Вот файл, после нашей конфигурации.

AccountID 555555LicenseKey AAAAAAAAAAAAAAAAEditionIDs GeoLite2-Country GeoLite2-City

Обновление базы данных GEOIP2.

geoipupdate -v

Проинстрация установки базы данных GEOIP2.

ls -la /usr/share/GeoIP

Вот вывод команды.

-rw-r—r— 1 root root 63884020 Apr 17 16:01 GeoLite2-City.mmdb-rw-r—r— 1 root root 4013279 Apr 17 16:01 GeoLite2-Country.mmdb

Вы установили базу данных GEOIP2 для стран и городов.

Поздравляю! Вы закончили установку GEOIPUPDATE.

Учебник Nginx — Блокирование доступа из страны

Установите сервер Nginx и необходимый модуль.

apt-get updateapt-get install nginx libnginx-mod-http-geoip2

Отредактируйте файл конфигурации Nginx.

vi /etc/nginx/nginx.conf

Добавьте следующую строку в файл конфигурации.

geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {auto_reload 60m;$geoip2_metadata_country_build metadata build_epoch;$geoip2_data_country_code country iso_code;$geoip2_data_country_name country names en;}map $geoip2_data_country_code $allowed_country {default yes;US no;BR no;}

В нашем примере мы отказали в доступе из Бразилии и Соединенных Штатов.

Проверить список стран кодов.

Вот файл, перед нашей конфигурацией.

user www-data;worker_processes auto;pid /run/nginx.pid;include /etc/nginx/modules-enabled/*.conf;events { worker_connections 768;}http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; ssl_prefer_server_ciphers on; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*;}

Вот файл, после нашей конфигурации.

user www-data;worker_processes auto;pid /run/nginx.pid;include /etc/nginx/modules-enabled/*.conf;events { worker_connections 768;}http {geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {auto_reload 60m;$geoip2_metadata_country_build metadata build_epoch;$geoip2_data_country_code country iso_code;$geoip2_data_country_name country names en;}map $geoip2_data_country_code $allowed_country {default yes;US no;BR no;} sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; ssl_prefer_server_ciphers on; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*;}

Отредактируйте файл конфигурации Nginx для веб-сайта по умолчанию.

vi /etc/nginx/sites-available/default

Добавьте следующую строку в файл конфигурации.

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

Вот файл, перед нашей конфигурацией.

server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name _; location / { try_files $uri $uri/ =404; }}

Вот файл, после нашей конфигурации.

server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name _; location / {if ($allowed_country = no) {return 403;} try_files $uri $uri/ =404; }}

Перезапустите сервис Nginx.

service nginx restart

Сервер Nginx будет отказывать в доступе на основе страны IP-адреса источника.

С удаленного компьютера в ограниченной стране, попробуйте получить доступ к вашему сайту.

curl -I http://www.gameking.tips

Вот вывод команды.

HTTP/1.1 403 ForbiddenServer: nginx/1.18.0 (Ubuntu)Date: Sat, 17 Apr 2021 17:25:15 GMTContent-Type: text/htmlContent-Length: 162Connection: keep-alive

Поздравляю! Вы можете настроить Nginx, чтобы ограничить доступ к вашему веб-сайту в зависимости от страны запроса.

Учебник GEOIP2 — Обновление базы данных

Создание запланированной задачи по обновлению базы данных GEOIP2.

vi /etc/cron.d/geoip2update

Вот содержимое файла.

SHELL=/bin/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin​0 */12 * * * root /usr/bin/geoipupdate

Поздравляю! Вы настроили автоматическое обновление базы данных GEOIP2.

Учебник Nginx — Включите код страны в журнал

Отредактируйте файл конфигурации Nginx.

vi /etc/nginx/nginx.conf

Удалите следующие строки из файла конфигурации.

access_log /var/log/nginx/access.log;

Добавьте следующие строки в файл конфигурации.

log_format main ‘$remote_addr — $remote_user [$time_local] «$request» $status $body_bytes_sent «$http_referer» «$http_user_agent» $geoip2_data_country_code’;access_log /var/log/nginx/access.log main;

В качестве примера, вот наш файл конфигурации.

user www-data;worker_processes auto;pid /run/nginx.pid;include /etc/nginx/modules-enabled/*.conf;events { worker_connections 768;}http {geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {auto_reload 60m;$geoip2_metadata_country_build metadata build_epoch;$geoip2_data_country_code country iso_code;$geoip2_data_country_name country names en;}map $geoip2_data_country_code $allowed_country {default yes;US no;BR no;}log_format main ‘$remote_addr — $remote_user [$time_local] «$request» $status $body_bytes_sent «$http_referer» «$http_user_agent» $geoip2_data_country_code’; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; ssl_prefer_server_ciphers on; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log; gzip on; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*;}

Перезапустите сервис Nginx.

service nginx restart

Сервер Nginx будет регистрировать код страны запроса в файле журнала.

cat /var/log/nginx/access.log

Вот пример журнала Nginx.

200.200.200.200 — — [17/Apr/2021:17:17:47 +0000] «GET /test.html HTTP/1.1» 403 196 «-» «Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36» BR54.187.45.85 — — [17/Apr/2021:17:05:16 +0000] «GET /test.html HTTP/1.1» 403 564 «-» «Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36» US

Поздравляю! Вы настроили сервер Nginx для включения кода страны в файлы журнала.