apache über reverse-proxy: Client IP anzeigen

Hat man vor einem apache Web-Server einen reverse-proxy (z.B. nginx) am laufen, sieht man statt der „echten“ IP des Besuchers, lediglich die IP des reverse-proxies.
Damit man im apache die tatsächliche IP des Bescuhers sieht kann man mittels mod_remoteip den Header vom reverse-proxy auslesen.

Dazu aktiviert man im apache zuerst das Modul: mod_remoteip.

Danach fügt man in die Konfiguration des VirtualHosts folgendes ein:

  RemoteIPHeader X-Forwarded-For
  RemoteIPInternalProxy 127.0.0.1
  SetEnvIf X-Forwarded-Proto "^https$" HTTPS=on
 
  LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" proxy
  CustomLog /var/log/apache/example.org-access_log proxy
  • Der Parameter RemoteIPHeader sagt dem apache er soll im Header die IP-Adresse, welcher der reverse-proxy unter: X-Forwarded-For gesetzt hat als Client IP nehmen.
  • Mittels: RemoteIPInternalProxy wird em apache gesagt, dass dieser nur dem RemoteIPHeader Header von der angegeben IP-Adresse vertraut; diese muss also die IP addresse des reverse-proxies sein. – Dies ist sehr wichtig, da sich die IP im Header ansonsten einfach fälschen (spoofen) lässt!
  • SetEnvIf X-Forwarded-Proto ist optional und sagt dem apache, dass SSL (HTTPS) schon beim reverse-proxy gemacht wird, da die Verbindung zwischen reverse-proxy und web-server in der Regel ohne SSL (HTTP) ist (nützlich bei Applikationen, welche z.B. eine automatische HTTPS Weiterleitung machen).
  • Damit die echte IP auch in den apache logfiles sichtbar ist, muss noch das log-format mittels mod_log_config (bereits Standardmässig aktiv) um-konfiguriert werden: Der erste Parameter (normalerweise %h) muss %a sein.

Published by

Steven Varco

Steven ist ein Redhat RHCE-Zertifizierter Linux-Crack und ist seit über 18 Jahren sowohl beruflich wie auch privat auf Linux spezialisiert. In seinem Keller steht ein Server Rack mit diversen ESX und Linux Servern.

2 thoughts on “apache über reverse-proxy: Client IP anzeigen”

  1. Guten Tag Steven

    Vielen Dank für diesen Beitrag. Darf ich Dich etwas fragen?

    Und zwar ist es so, dass ich ein Raspberry Pi im Einsatz habe.
    Mit ProxyPass und ProxyPassReverse greife ich dann auf das NAS mit einer entsprechenden URL zu. Nun ist es so, dass wenn sich jemand mehrmals falsch über die entsprechende URL beim NAS falsch anmeldet, wird nicht die Client IP geblockt, sondern die vom Raspberry.

    Muss ich da noch etwas mehr machen, als das was im Beitrag erwähnt ist?

    Vielen Dank für Deine Hilfe im Voraus.
    Sascha

    1. Du hast hier das selbe Problem wie in diesem Beitrag, nur, halt auf dem NAS (web-server) und NICHT auf dem apache wo du die ProxyPass/ProxyPassReverse machst.

      In diesem Beitrag ist der apache der „Backend-Server“ (das wäre bei dir das NAS) und nginx der ReverseProxy.

      Um also in deinem Fall beim NAS die echte Client-IP und nicht die des proxies zu bekommen, musst du (falls möglich) die Konfiguration auf dem NAS ändern.
      Die echte Client-IP steht dabei im HTTP Request-Header als:
      „X-Forwarded-For“.

      Wenn du auf dem NAS auch einen apache am laufen hast musst du dort in der Konfiguration die folgende Zeile einfügen:

      RemoteIPHeader X-Forwarded-For

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.