Хотите узнать, как установить Nginx и отказать в доступе из страны? В этом учебнике мы собираемся настроить сервер Nginx, чтобы заблокировать доступ из страны.
• Ubuntu 18
• Ubuntu 19
• Ubuntu 20
• Nginx 1.18.0
В нашем примере сервер Nginx принимает веб-сайт WWW.GAMEKING.TIPS.
Учебник Nginx — Установка базы данных GEOIP2
Получите доступ к веб-сайту MAXMIND и создайте новую учетную запись.
Получите доступ к профилю учетной записи и создайте новый ключ.

Добавьте репозиторий 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/bin0 */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 для включения кода страны в файлы журнала.