Как контролировать доступ на основе IP-адреса клиента в NGINX
Существует несколько способов повышения безопасности веб-сервера NGINX, одним из которых является контроль доступа на основе IP-адреса. В этом руководстве объясняется, как защитить веб-приложения, контролируя доступ на основе IP-адреса клиента в NGINX.
В этом руководстве предполагается, что у вас установлен и работает веб-сервер NGINX, в противном случае ознакомьтесь с этими руководствами:
- Как установить веб-сервер Nginx в Ubuntu
- Как установить Nginx на CentOS
- Как установить Nginx на Debian
- Как установить Nginx на RHEL
Управление доступом на основе IP-адреса клиента в NGINX
Модуль ngx_http_access_module в NGINX позволяет ограничить доступ к определенным IP-адресам клиентов. Вы можете активировать его с помощью директив allow и deny.
Директива allow, как следует из названия, разрешает доступ для определенного IP-адреса, сети, сокета Unix или всех (ключевое слово для предыдущих объектов), а директива deny запрещает доступ. для определенного IP-адреса, сети, сокета Unix или всех.
Обе директивы действительны в контексте HTTP, сервера, местоположения, а также в контексте limit_Exception. Вот пример использования директив 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 разрешен только для 10.10.10.20, 10.10.40.29, 192.168.2.23 . IP-адреса и любые из сетей 192.168.10.0/24. Запросы с любого другого IP-адреса, сети или сокета UNIX-домена будут отклонены.
NGINX ответит клиенту запрещенной ошибкой 403, как показано.
Проверив журнал ошибок /var/log/nginx/app_api_error.log, вы обнаружите записи, подобные показанным на следующем снимке экрана:
cat /var/log/nginx/app_api_error.log debug
Дополнительные советы по усилению безопасности веб-сервера NGINX можно найти в: Полное руководство по защите и усилению безопасности веб-сервера Nginx.