Echte IP-Adresse wird über Proxy nicht mehr erkannt

In den letzten beiden Monaten (ich bin mir nicht sicher, wann dies genau begann) habe ich festgestellt, dass meine externe Nginx-Konfiguration, wie in Add an offline page to display when Discourse is rebuilding or starting up dokumentiert, um die echte IP-Adresse durchzureichen, ignoriert wird.

Diese externe Nginx-Konfiguration funktionierte jahrelang:

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Real-IP $remote_addr;

Jetzt sehe ich, dass der gesamte Verkehr dem internen Docker-Netzwerk im RFC1918-Bereich zugeordnet wird, wie hier:

Dies bricht offensichtlich die Funktion „wende diese Strafe auf andere Benutzer an, die diese IP-Adresse teilen“ sowie alle anderen Verwendungen der echten Remote-IP-Adresse.

Ich vermute, dass dies irgendwo bereits angesprochen wurde und ich nur schlecht suche. :frowning: Aber ich würde mich über Hinweise darauf freuen, was sich geändert haben könnte, an das ich mich anpassen muss.

Ich erinnere mich, dass ich kürzlich etwas darüber gelesen habe, finde es aber auch nicht mehr. Handling the "chain of trust" of the end user's real IP - #8 by supermathie enthält einen Link zur Cloudflare-Vorlage, die meiner Meinung nach ein gutes Modell sein könnte.

So mache ich es, und es scheint immer noch zu funktionieren (Stand: „Discourse 2026.6.0-latest - GitHub - discourse/discourse: A platform for community discussion. Free, open, simple. · GitHub version 5c507d8359f4d6e8a5d98780c622d51cedbd9bd7“)

after_bundle_exec:
  - replace:
    filename: /etc/nginx/conf.d/discourse.conf
    from: "types {"
    to: |
      set_real_ip_from 192.168.1.0/24;
      set_real_ip_from 192.168.11.0/24;
      set_real_ip_from 172.16.0.0/12;
      set_real_ip_from 10.0.0.0/8;
      real_ip_recursive on;
      real_ip_header X-Forwarded-For;
      types {

Wahrscheinlich hängt es mit diesem Commit zusammen: FIX: nginx sample configuration should be setting x-f-f to the end us… · discourse/discourse@b4a3389 · GitHub

Das könnte dir helfen:

Wie üblich hilft es mir, den Beitrag zu veröffentlichen und die Antworten zu sehen, um andere ähnliche Beiträge zu finden. :rofl: z. B.

Danke an alle! Ab zum Konfigurieren von set_real_ip_from im Container-Nginx!

Ich werde jedoch den gesamten RFC1918-Adressraum verwenden. Für alle anderen als Referenz wäre das:

after_bundle_exec:
  - replace:
    filename: /etc/nginx/conf.d/discourse.conf
    from: "types {"
    to: |
      set_real_ip_from 192.168.0.0/16;
      set_real_ip_from 172.16.0.0/12;
      set_real_ip_from 10.0.0.0/8;
      real_ip_recursive on;
      real_ip_header X-Forwarded-For;
      types {

Bei mir funktioniert das nicht.

Ich verstehe jetzt, warum es bei mir mit dem referenzierten Commit aufgehört hat zu funktionieren; es hat den set_real_ip-Ersatz kaputt gemacht, den ich seit Jahren im Einsatz hatte. Die Begründung, ihn robuster zu machen, ist vernünftig, und das ist der bessere Weg; eine unterbrechende Änderung und dann sollte es in Zukunft weniger häufig kaputtgehen.

Ich weiß nicht, warum der after_bundle_exec-Ersatz nicht angewendet wird, aber ich werde zum Einfügen von Dateien wechseln.

Das funktioniert bei mir; teile es mit der nächsten Person:

run:
  - file:
     path: /etc/nginx/conf.d/outlets/server/real-ip-recursive.conf
     chmod: 644
     contents: |
       real_ip_recursive on;
  - file:
     path: /etc/nginx/conf.d/outlets/server/real-ip-header.conf
     chmod: 644
     contents: |
       real_ip_header X-Forwarded-For;
  - file:
     path: /etc/nginx/conf.d/outlets/server/set-real-ip-from.conf
     chmod: 644
     contents: |
       set_real_ip_from 192.168.0.0/16;
       set_real_ip_from 172.16.0.0/12;
       set_real_ip_from 10.0.0.0/8;