Существует несколько способов усиления безопасности веб-сервера NGINX, одним из которых является контроль доступа на основе IP-адреса.
Это руководство объясняет, как обеспечить безопасность веб-приложений путем контроля доступа на основе IP-адреса клиента в NGINX.
Управление доступом на основе IP-адреса клиента в NGINX
Модуль ngx_http_access_module в NGINX позволяет ограничить доступ к определенным IP-адресам клиентов.
Вы можете активировать его с помощью директив allow и deny.
Директива allow, как следует из названия, разрешает доступ для определенного IP-адреса, сети, сокета Unix или всех (ключевое слово для предыдущих сущностей), а директива deny запрещает доступ для определенного IP-адреса, сети, сокета Unix или всех.
Обе директивы действительны в контексте HTTP, server, location, а также limit_except.
Вот пример использования директив allow и deny в контексте location для ограничения доступа к службе API:
upstream app_api { keepalive 100; server 10.1.1.50:5000; server 10.1.1.71:5001; } server { listen 80; server_name _; access_log /var/log/nginx/app_api_access.log main; error_log /var/log/nginx/app_api_error.log debug; root /usr/share/nginx/html/; location / { try_files $uri /api; } location /api { proxy_read_timeout 3600; proxy_connect_timeout 3600s; keepalive_timeout 15; send_timeout 300; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_pass http://app_api$request_uri; #list of allowed IPs to access API allow 10.10.10.20; allow 10.10.40.29; allow 192.168.2.23; allow 192.168.10.0/24; deny all; } }
В приведенном выше примере любой запрос на доступ к любой из проксированных конечных точек API разрешен только для IP-адресов 10.10.10.20, 10.10.40.29, 192.168.2.23 и любого из тех, что находятся в сети 192.168.10.0/24.
Запросы с любого другого IP-адреса, сети или сокета UNIX-домена будут отклонены.
Когда вы проверите журнал логов /var/log/nginx/app_api_error.log, вы найдете записи access forbidden by rule
см. также
🌐 Как парсить логи доступа nginx
🌐 Ограничение скорости определенных URL-адресов с Nginx
🛡️ Как использовать обратный прокси Nginx для ограничения внешних вызовов внутри веб-браузера
🔏 Как настроить Nginx с Let’s Encrypt с помощью ACME на Ubuntu
🌐 Как собрать NGINX с ModSecurity на Ubuntu сервере
🌐 Как защитить паролем каталог с аутентификацией .htpasswd на Nginx
🌐 Как регистрировать информацию о шифровании и протоколе SSL в Nginx
🔐 Как защитить конкретную страницу паролем в Apache, Nginx, WordPress, на хостинге?