Rate Limiting con Reverse Proxy

Ho una domanda su quale header viene utilizzato per il rate-limiting. Per contesto, abbiamo un nginx.conf con set_real_ip e stiamo utilizzando un provider che ci invia traffico con l’IP effettivo del client nell’header Some-Client-IP.

  sendfile on;
set_real_ip_from ...;
set_real_ip_from ...;
set_real_ip_from ...;
set_real_ip_from ...;

real_ip_header Some-Client-IP;
real_ip_recursive on;

Some-Client-IP è ciò che otteniamo dall’upstream con l’IP effettivo dell’utente.

Nell’attuale discourse.conf in conf.d per nginx, abbiamo l’impostazione predefinita:

Per penso tutte le route in generale

    proxy_set_header Host $http_host;
    proxy_set_header X-Request-Start "t=${msec}";
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $thescheme;
    proxy_pass http://discourse;

Discourse guarda a X-Forwarded-For o X-Real-IP per il rate-limiting? Penso che stia guardando a X-Forwarded-For perché in production.log vedo l’IP del mio reverse proxy. La soluzione corretta è cambiare anche X-Forwarded-For per guardare a $remote_addr?

Da questo thread, sembra che qualcuno abbia semplicemente eliminato quella riga Last IP shows Reverse Proxy IP address - #5 by schleifer

Grazie

1 Mi Piace

Hai aggiunto quella sezione al tuo app.yml? Quelle impostazioni devono trovarsi nell’NGINX all’interno del container. Vedi anche Set up Discourse on a server with existing Apache sites. Quello è per Apache, ma la parte che va in app.yml è la stessa indipendentemente da ciò che sta facendo il reverse proxy.

Quelle strofe si trovano nell’attuale nginx.conf invece del nostro container sotto conf.d/discourse.conf.

Per la parte app.yml intendevi

run:
  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: "types {"
      to: |
        set_real_ip_from 172.17.0.0/24;
        real_ip_header X-Forwarded-For;
        real_ip_recursive on;
        types {

Non abbiamo HAProxy all’esterno dei container, abbiamo un provider DNS che esegue alcune pre-elaborazioni per noi, quindi il real_ip_header si trova in un altro valore di intestazione e abbiamo effettivamente un elenco di indirizzi IP che devono essere sostituiti.

Abbiamo anche visto un elenco di X-Forwarded-For, mi chiedo se questa sia la causa degli IP errati che vengono visualizzati.

Ad esempio, penso che vediamo 111.11.11.111 nei log di produzione, ma non 55.555.55.55 che è quello che vogliamo (poiché è impostato in x-real-ip)

HTTP_X_FORWARDED_FOR	111.11.11.111, 22.22.22.222, 333.33.33.333, 55.555.55.55
HTTP_X_REAL_IP	55.555.55.55

Quindi dovrai adattare la configurazione consigliata di conseguenza.

Oppure, se non ti interessano gli indirizzi IP o il rate limiting, puoi ricordare il modello di rate limiting.

1 Mi Piace