Come negare l'accesso alle risorse basate su intestazioni X-forwarded for

Sto cercando di limitare l'accesso alle risorse dietro Nginx in base al client IP passato in X-forwarded-for intestazioni. Nginx è in esecuzione in un contenitore su un cluster di Kubernetes su Google Cloud Platform e ips client reali vengono passati solo in intestazione x-forwarded

Finora sono riuscito a farlo per un singolo IP con il seguente codice:

set $allow false; if ($http_x_forwarded_for ~* 123.233.233.123) { set $allow true; } if ($http_x_forward_for ~* 10.20.30.40) { set $allow false; } if ($allow = false) { return 403; } 

Ma come posso farlo per interi intervalli di IP? Specificando centinaia di IP manualmente non ha molto senso.

Tutto l'aiuto è apprezzato

  • Nginx un ip e certificati multipli SSL
  • C'è un posto standard per mettere tutti i miei siti web in linux / nginx?
  • Apache o NGINX per PHP?
  • Imansible get Nginx per servire la catena del certificato corretto
  • usando le barre di traino in configuration nginx
  • nginx -s stop e -s chiude cosa è la differenza?
  • come eliminare il file singolo nginx cache?
  • Codice di stato personalizzato per la pagina predefinita Nginx
  • 2 Solutions collect form web for “Come negare l'accesso alle risorse basate su intestazioni X-forwarded for”

    Utilizzare il module RealIP per rispettare il valore dell'intestazione X-Forwarded-For . Impostare set_real_ip_from all'indirizzo IP del proxy inverso (il valore corrente di $remote_addr ).

    Per esempio:

     server { ... real_ip_header X-Forwarded-For; set_real_ip_from 10.1.2.3; ... } 

    Ora dovresti essere in grado di utilizzare $remote_addr e allow / deny direttive utilizzando il vero indirizzo IP del client. Vedere questo documento per ulteriori informazioni.

    La risposta di Richard già conteneva le informazioni su come get il vero indirizzo IP a nginx.

    Nel frattempo, ciò che viene alla domanda di specificare intervalli IP, è ansible utilizzare http://nginx.org/it/docs/http/ngx_http_geo_module.html .

    Il module geo funziona come il module di map , cioè una variabile ottiene i valori assegnati a seconda del valore dell'indirizzo IP.

    Un esempio:

     geo $allow { default 0; 192.168.168.0/24 1; } server { real_ip_header X-Forwarded-For; set_real_ip_from 10.1.2.3; if ($allow = 0) { return 403; } } 

    Qui assegniamo la mappa geo , where il valore predefinito per $allow è 0. Se l'indirizzo IP è nella substring 192.168.168.0/24 , allora $allow valore 1 e la richiesta è consentita.

    Puoi avere tante righe nel block geo come è necessario definire i tuoi intervalli IP.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.