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

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.