Ricerca nel sito web

Come controllare l'accesso in base all'indirizzo IP del client in NGINX


Esistono diversi modi per rafforzare la sicurezza del server Web NGINX, uno dei quali è il controllo degli accessi basato sull'indirizzo IP. Questa guida spiega come proteggere le applicazioni web controllando l'accesso in base all'indirizzo IP di un client in NGINX.

Questa guida presuppone che tu abbia un server web NGINX installato e funzionante, altrimenti consulta queste guide:

  • Come installare il server Web Nginx su Ubuntu
  • Come installare Nginx su CentOS
  • Come installare Nginx su Debian
  • Come installare Nginx su RHEL

Controlla l'accesso in base all'indirizzo IP del client in NGINX

Il modulo ngx_http_access_module in NGINX consente di limitare l'accesso a determinati indirizzi IP del client. Puoi attivarlo con le direttive consenti e nega.

La direttiva allow, come suggerisce il nome, consente l'accesso per uno specifico indirizzo IP, rete, socket Unix o tutti (parola chiave per le entità precedenti), mentre la direttiva deny nega l'accesso per un indirizzo IP, una rete, un socket Unix specifico o tutti.

Entrambe le direttive sono valide nel contesto HTTP, server, posizione e limit_eccetto. Ecco un esempio di utilizzo delle direttive allow e deny all'interno di un contesto di località per limitare l'accesso a un servizio 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;
    }
}

Nell'esempio precedente, qualsiasi richiesta di accesso a uno qualsiasi degli endpoint API proxy è consentita solo per 10.10.10.20, 10.10.40.29, 192.168.2.23 indirizzi IP e tutti quelli nella rete 192.168.10.0/24. Le richieste provenienti da qualsiasi altro indirizzo IP, rete o socket del dominio UNIX verranno rifiutate.

NGINX risponderà con un errore proibito 403 al client come mostrato.

Quando controlli il registro degli errori /var/log/nginx/app_api_error.log, troverai voci come quelle mostrate nello screenshot seguente:

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

Per ulteriori suggerimenti sul rafforzamento della sicurezza del server Web NGINX, consulta: La guida definitiva per proteggere e rafforzare il server Web Nginx.