nginx rate limiting con intestazione X-Forwarded-For


23

Sto esaminando la limitazione della velocità usando HttpLimitReqModule di nginx . Tuttavia, le richieste provengono tutte dallo stesso IP (un bilanciamento del carico), con l'indirizzo IP reale nelle intestazioni.

C'è un modo per avere il limite di velocità nginx basato sull'ip X-Forwarded-Fornell'intestazione anziché sull'ip della fonte?

Risposte:


28

Sì, la tipica stringa di definizione della configurazione con limitazione della velocità è simile a:

 limit_req_zone  $binary_remote_addr zone=zone:16m rate=1r/s;

dove $binary_remote_addrè la chiave univoca per limitatore. Dovresti provare a cambiarlo in $http_x_forwarded_forvariabile che ottiene il valore X-Forwarded-Fordell'intestazione. Anche se questo aumenterà il consumo di memoria perché $binary_remote_addrutilizza un formato binario compresso per la memorizzazione degli indirizzi IP e $http_x_forwarded_fornon lo è.

 limit_req_zone  $http_x_forwarded_for zone=zone:16m rate=1r/s;

Sono appena arrivato alla stessa conclusione e in un test rapido funziona benissimo. Grazie per aver sottolineato il maggiore utilizzo della memoria.
John Brodie,

2
Attenzione, potrebbero esserci gravi problemi di sicurezza: blog.ircmaxell.com/2012/11/anatomy-of-attack-how-i-hacked.html
ircmaxell

Si noti che le informazioni in quel post sul blog riguardanti symfony erano indirizzi con i seguenti: symfony.com/doc/current/components/http_foundation/…
calumbrodie

5
Se si utilizza il modulo realip, la $binary_remote_addrvariabile viene impostata correttamente.
Cenk Alti,

5

La limit_req_zonedirettiva definisce la variabile da utilizzare come chiave per il raggruppamento delle richieste.
Di solito, $binary_remote_addrviene utilizzato anziché $remote_addrperché è più piccolo e consente di risparmiare spazio.

Forse in alternativa si desidera utilizzare RealipModule .
Ciò riscriverà le variabili dell'indirizzo remoto all'indirizzo fornito in un'intestazione personalizzata e faciliterà anche la registrazione e l'utilizzo di altre variabili.


1
+1 per il modulo RealIP. Quando si utilizza questo modulo $binary_remote_addre $remote_addrsono impostati sul valore dell'intestazione configurata, in genere X-Forwarded-For, quindi le variabili standard sono ora "l'indirizzo IP client reale". Corri nginx -Vper vedere se è stato creato NGINX --with-http_realip. Quindi config è semplice come set_real_ip_from 10.0.0.0/8; real_ip_header X-Forwarded-For; :, dove l'intervallo CIDR è quello del bilanciamento del carico a monte che sta impostando l' X-Forwarder-Forintestazione.
markdsievers,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.