Slik kontrollerer du tilgang basert på klientens IP-adresse i NGINX


Det er flere måter å styrke NGINX-nettserversikkerheten på, hvorav én er tilgangskontroll basert på IP-adresse. Denne veiledningen forklarer hvordan du sikrer nettapplikasjoner ved å kontrollere tilgang basert på en klients IP-adresse i NGINX.

Denne veiledningen forutsetter at du har en NGINX-webserver installert og kjører, ellers kan du sjekke ut disse veiledningene:

  • Hvordan installere Nginx Web Server på Ubuntu
  • Hvordan installere Nginx på CentOS
  • Hvordan installere Nginx på Debian
  • Hvordan installere Nginx på RHEL

Kontroller tilgang basert på klientens IP-adresse i NGINX

ngx_http_access_module-modulen i NGINX gjør det mulig å begrense tilgangen til visse klient-IP-adresser. Du kan aktivere den med tillat- og avslå-direktivene.

allow-direktivet som navnet tilsier tillater tilgang for en spesifikk IP-adresse, nettverk, Unix-socket eller alle (søkeord for de tidligere enhetene), og nekt-direktivet nekter tilgang for en spesifikk IP-adresse, nettverk, Unix-kontakt eller alt.

Begge direktivene er gyldige i HTTP-, server-, plasserings- og limit_except-konteksten. Her er et eksempel på bruk av tillat og nekt-direktivene innenfor en sted-kontekst for å begrense tilgangen til en API-tjeneste:

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;
    }
}

I eksemplet ovenfor er enhver forespørsel om tilgang til noen av de proxyede API-endepunktene kun tillatt for 10.10.10.20, 10.10.40.29, 192.168.2.23 IP-adresser, og hvilken som helst av de i 192.168.10.0/24-nettverket. Forespørsler fra enhver annen IP-adresse eller nettverk eller UNIX-domenekontakt vil bli avvist.

NGINX vil svare med en 403 forbudt feil til klienten som vist.

Når du sjekker /var/log/nginx/app_api_error.log feilloggen, vil du finne oppføringer som de som vises i følgende skjermbilde:

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

For flere NGINX-nettserversikkerhetstips, sjekk ut: The Ultimate Guide to Secure and Harden Nginx Web Server.