Kako kontrolisati pristup na osnovu IP adrese klijenta u NGINX-u


Postoji nekoliko načina za jačanje sigurnosti NGINX web servera od kojih je jedan kontrola pristupa zasnovana na IP adresi. Ovaj vodič objašnjava kako osigurati web aplikacije kontrolom pristupa na osnovu IP adrese klijenta u NGINX-u.

Ovaj vodič pretpostavlja da imate instaliran i pokrenut NGINX web server, inače pogledajte ove vodiče:

  • Kako instalirati Nginx web server na Ubuntu
  • Kako instalirati Nginx na CentOS
  • Kako instalirati Nginx na Debian
  • Kako instalirati Nginx na RHEL

Kontrolirajte pristup na osnovu IP adrese klijenta u NGINX-u

Modul ngx_http_access_module u NGINX-u omogućava ograničavanje pristupa određenim IP adresama klijenta. Možete ga aktivirati pomoću dozvolji i zabranjivanja direktiva.

Direktiva allow kao što naziv implicira dozvoljava pristup za određenu IP adresu, mrežu, Unix socket ili sve (ključna riječ za prethodne entitete), a deny direktiva odbija pristup za određenu IP adresu, mrežu, Unix utičnicu ili sve.

Obje direktive su važeće u kontekstu HTTP, servera, lokacije kao i limit_except. Evo primjera korištenja dopusti i deny direktiva unutar lokacijskog konteksta za ograničavanje pristupa API servisu:

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

U gornjem primjeru, svaki zahtjev za pristup bilo kojoj krajnjoj tački proksijenog API-ja je dozvoljen samo za 10.10.10.20, 10.10.40.29, 192.168.2.23 jake> IP adrese, i bilo koje od onih u mreži 192.168.10.0/24. Zahtjevi sa bilo koje druge IP adrese ili mreže ili utičnice UNIX domene bit će odbijeni.

NGINX će odgovoriti sa 403 zabranjenom greškom klijentu kao što je prikazano.

Kada provjerite /var/log/nginx/app_api_error.log dnevnik grešaka, naći ćete unose poput onih prikazanih na sljedećem snimku ekrana:

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

Za više savjeta za jačanje sigurnosti NGINX web servera, pogledajte: Ultimate Guide to Secure and Harden Nginx Web Server.