Com controlar l'accés en funció de l'adreça IP del client a NGINX


Hi ha diverses maneres d'endurir la seguretat del servidor web NGINX, una de les quals és el control d'accés basat en l'adreça IP. Aquesta guia explica com protegir les aplicacions web controlant l'accés en funció de l'adreça IP d'un client a NGINX.

Aquesta guia suposa que teniu un servidor web NGINX instal·lat i en funcionament; en cas contrari, consulteu aquestes guies:

  • Com instal·lar el servidor web Nginx a Ubuntu
  • Com instal·lar Nginx a CentOS
  • Com instal·lar Nginx a Debian
  • Com instal·lar Nginx a RHEL

Control de l'accés basat en l'adreça IP del client a NGINX

El mòdul ngx_http_access_module de NGINX permet limitar l'accés a determinades adreces IP de client. Podeu activar-lo amb les directives allow i deny.

La directiva allow, tal com el seu nom indica, permet l'accés a una adreça IP, xarxa, sòcol Unix o tots (paraula clau per a les entitats anteriors), i la directiva denega l'accés a una adreça IP, xarxa, sòcol Unix o tots.

Les dues directives són vàlides al context HTTP, servidor, ubicació i limit_except. Aquí teniu un exemple d'ús de les directives allow i deny dins d'un context d'ubicació per restringir l'accés a un servei 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;
    }
}

A l'exemple anterior, qualsevol sol·licitud per accedir a qualsevol dels punts finals de l'API proxy només es permet per a les adreces IP 10.10.10.20, 10.10.40.29, 192.168.2.23 i qualsevol de les de la xarxa 192.168.10.0/24. Les sol·licituds de qualsevol altra adreça IP o xarxa o sòcol de domini UNIX seran denegades.

NGINX respondrà amb un error 403 prohibit al client tal com es mostra.

Quan comproveu el registre d'errors /var/log/nginx/app_api_error.log, trobareu entrades com les que es mostren a la captura de pantalla següent:

# cat /var/log/nginx/app_api_error.log debug

Per obtenir més consells sobre l'enfortiment de la seguretat del servidor web NGINX, consulteu: La guia definitiva per protegir i endurir el servidor web Nginx.