Recherche de site Web

Comment contrôler l'accès en fonction de l'adresse IP du client dans NGINX


Il existe plusieurs façons de renforcer la sécurité du serveur Web NGINX, dont le contrôle d'accès basé sur l'adresse IP. Ce guide explique comment sécuriser les applications Web en contrôlant l'accès en fonction de l'adresse IP d'un client dans NGINX.

Ce guide suppose qu'un serveur Web NGINX est installé et en cours d'exécution, sinon consultez ces guides :

  • Comment installer le serveur Web Nginx sur Ubuntu
  • Comment installer Nginx sur CentOS
  • Comment installer Nginx sur Debian
  • Comment installer Nginx sur RHEL

Contrôler l'accès en fonction de l'adresse IP du client dans NGINX

Le module ngx_http_access_module de NGINX permet de limiter l'accès à certaines adresses IP client. Vous pouvez l'activer avec les directives allow et deny.

La directive allow, comme son nom l'indique, autorise l'accès à une adresse IP, un réseau, un socket Unix spécifique ou à tous (mot-clé pour les entités précédentes), et la directive deny refuse l'accès. pour une adresse IP spécifique, un réseau, un socket Unix ou tout.

Les deux directives sont valides dans le contexte HTTP, serveur, emplacement ainsi que limit_sauf. Voici un exemple d'utilisation des directives allow et deny dans un contexte location pour restreindre l'accès à un service 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;
    }
}

Dans l'exemple ci-dessus, toute demande d'accès à l'un des points de terminaison d'API proxy est autorisée uniquement pour les 10.10.10.20, 10.10.40.29, 192.168.2.23. adresses IP et toutes celles du réseau 192.168.10.0/24. Les demandes provenant de toute autre adresse IP, réseau ou socket de domaine UNIX seront refusées.

NGINX répondra avec une erreur interdite 403 au client, comme indiqué.

Lorsque vous consultez le journal des erreurs /var/log/nginx/app_api_error.log, vous trouverez des entrées comme celles présentées dans la capture d'écran suivante :

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

Pour plus de conseils sur le renforcement de la sécurité du serveur Web NGINX, consultez : Le guide ultime pour sécuriser et renforcer le serveur Web Nginx.