Wie erfasse ich Client-IP-Adressen in den Webserverprotokollen hinter einem ELB?
Ich verwende Elastic Load Balancing (ELB) für meinen Webserver, und ich kann die IP-Adresse meines Load Balancers in den Zugriffsprotokollen des Webservers sehen. Wie kann ich stattdessen Client-IP-Adressen erfassen?
Kurzbeschreibung
Ihre Webserver-Zugriffsprotokolle erfassen die IP-Adresse Ihres Load Balancers, da der Load Balancer die Verbindung zu Ihren Instances herstellt. Um die IP-Adressen von Clients in Ihren Webserver-Zugriffsprotokollen zu erfassen, konfigurieren Sie Folgendes:
- Bei Application-Load-Balancers und Classic-Load-Balancers mit HTTP/HTTPS-Listeners erfasst der X-Forwarded-For HTTP-Header Client-IP-Adressen. Anschließend können Sie Ihre Webserver-Zugriffsprotokolle so konfigurieren, dass diese IP-Adressen aufgezeichnet werden.
- Aktivieren Sie für Classic Load Balancer mit TCP/SSL-Listeners die Unterstützung des Proxy-Protokolls auf dem Classic Load Balancer und der Zielanwendung. Stellen Sie sicher, dass die Unterstützung des Proxy-Protokolls sowohl auf dem Load Balancer als auch in der Anwendung konfiguriert ist.
- Für Network Load Balancers registrieren Sie Ihre Ziele anhand der Instanz-ID, um Client-IP-Adressen ohne zusätzliche Webserverkonfiguration zu erfassen. Anweisungen finden Sie unter Zielgruppenattribute anstelle der folgenden Auflösungen.
- Wenn Sie für Network Load Balancer nur IP-Adressen als Ziele registrieren können, aktivieren Sie das Proxyprotokoll Version 2 auf dem Load Balancer. Anweisungen finden Sie unter Proxyprotokoll aktivieren anstelle der folgenden Auflösungen.
Behebung
Application Load Balancer und Classic Load Balancer mit HTTP/HTTPS-Listeners (Apache)
1.Öffnen Sie Ihre Apache-Konfigurationsdatei mit einem Texteditor. Der Speicherort variiert je nach Konfiguration, z. B. /etc/httpd/conf/httpd.conf für Amazon Linux und RHEL**,** oder etc/apache2/apache2.conf für Ubuntu.
2.Fügen Sie im Abschnitt LogFormat %{X-Forwarded-For}i hinzu, etwa wie folgt:
... LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common ...
3.Speichern Sie Ihre Änderungen.
4.Laden Sie den Apache-Dienst neu.
Für Sysvinit, Debian-basierte Systeme (wie Ubuntu) und SUSE (wie SLES11) führen Sie diesen Befehl aus:
# /etc/init.d/apache2 reload
Für Sysvinit, RPM-basierte Systeme (wie RHEL 6 und Amazon Linux), außer SUSE, führen Sie diesen Befehl aus:
# /etc/init.d/httpd reload
Für Systemd, Debian-basierte Systeme (wie Ubuntu) und SUSE (wie SLES12) führen Sie diesen Befehl aus:
# systemctl reload apache2
Für Systemd, RPM-basierte Systeme (wie RHEL 7 und Amazon Linux 2), außer SUSE, führen Sie diesen Befehl aus:
# systemctl reload httpd
5.Öffnen Sie die Zugriffsprotokolle Ihres Apache Webservers. Der Standort ist je nach Konfiguration unterschiedlich.
6.Stellen Sie sicher, dass die Client-IP-Adressen jetzt im X-Forwarded-For-Header aufgezeichnet werden.
Application Load Balancer und klassische Load Balancer mit HTTP/HTTPS-Listeners (NGINX)
1.Öffnen Sie Ihre NGINX-Konfigurationsdatei mit einem Texteditor. Der Speicherort ist normalerweise /etc/nginx/nginx.conf.
2.Fügen Sie im Abschnitt LogFormat $http_x_forwarded_for hinzu, ähnlich wie folgt:
http { ... log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; ... }
3.Speichern Sie Ihre Änderungen.
4.Laden Sie den NGINX-Dienst neu.
Führen Sie zum Beispiel unter Amazon Linux 2 oder RHEL diesen Befehl aus:
systemctl reload nginx
**Hinweis:**Der Befehl zum Neuladen des NGINX-Dienstes ist auf anderen Systemen anders. Die Befehle zum Neuladen von NGINX ähneln den Befehlen zum Neuladen des Apache-Dienstes im vorherigen Abschnitt.
5.Öffnen Sie die Zugriffsprotokolle Ihres NGINX-Webservers. Der Standort ist je nach Konfiguration unterschiedlich.
6.Stellen Sie sicher, dass die Client-IP-Adressen jetzt im X-Forwarded-For-Header aufgezeichnet sind.
Klassische Load Balancer mit TCP/SSL-Listeners (Apache)
1.Öffnen Sie Ihre Apache-Konfigurationsdatei mit einem Texteditor. Der Speicherort variiert je nach Konfiguration, z. B. /etc/httpd/conf/httpd.conf für Amazon Linux und RHEL, oder /etc/apache2/apache2.conf für Ubuntu.
2.Stellen Sie sicher, dass Ihre Apache-Konfiguration das Modul mod_remoteip lädt (verfügbar für Apache Version 2.4.31 und neuer). Dieses Modul enthält die RemoteIPProxyProtocol-Direktive. Suchen Sie in Ihrer Konfigurationsdatei nach einer Zeile, die der folgenden ähnelt:
Amazon Linux oder RHEL:
LoadModule remoteip_module modules/mod_remoteip.so
Ubuntu:
LoadModule remoteip_module /usr/lib/apache2/modules/mod_remoteip.so
3.Bestätigen Sie, dass das Modul mod_remoteip geladen wird:
$ sudo apachectl -t -D DUMP_MODULES | grep -i remoteip
4.Überprüfen Sie die Ausgabe und stellen Sie sicher, dass die Ausgabe eine Zeile enthält, die der folgenden ähnelt:
remoteip_module (shared)
**Wichtig:**Wenn die Ausgabe diese Zeile nicht enthält, ist das Modul nicht in Ihrer Konfiguration enthalten oder geladen. Stellen Sie sicher, dass Sie das Modul aktivieren, bevor Sie fortfahren.
5.Fügen Sie Ihrer Apache-Konfigurationsdatei die folgende Zeile hinzu, um die Unterstützung des Proxy-Protokolls zu aktivieren:
RemoteIPProxyProtocol On
6.Bearbeiten Sie den Abschnitt LogFormat der Konfigurationsdatei, um die Remote-IP-Adresse (%a) und den Remote-Port (%{remote}p:) zu erfassen, ähnlich wie im Folgenden:
LogFormat "%h %p %a %{remote}p %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
7.Speichern Sie Ihre Änderungen.
8.Laden Sie den Apache-Dienst neu.
Führen Sie für Sysvinit, Debian-basierte Systeme (wie Ubuntu) und SUSE (wie SLES11) diesen Befehl aus:
# /etc/init.d/apache2 reload
Für Sysvinit, RPM-basierte Systeme (wie RHEL 6 und Amazon Linux), außer SUSE, führen Sie diesen Befehl aus:
# /etc/init.d/httpd reload
Für Systemd, Debian-basierte Systeme (wie Ubuntu) und SUSE (wie SLES12) führen Sie diesen Befehl aus:
# systemctl reload apache2
Für Systemd, RPM-basierte Systeme (wie RHEL 7 und Amazon Linux 2), außer SUSE, führen Sie diesen Befehl aus:
# systemctl reload httpd
9.Öffnen Sie die Zugriffsprotokolle des Apache Webservers. Der Standort ist je nach Konfiguration unterschiedlich.
10.Stellen Sie sicher, dass die Client-IP-Adressen jetzt im Proxy-Protokoll-Header aufgezeichnet werden.
11.Aktivieren Sie die Unterstützung für das Proxy-Protokoll in Ihrer Zielanwendung.
Klassische Load Balancer mit TCP/SSL-Listeners (NGINX)
1.Öffnen Sie die NGINX-Konfigurationsdatei mit einem Texteditor. Der Speicherort ist normalerweise /etc/nginx/nginx.conf.
2.Ändern Sie die Listen-Zeile des Server-Abschnittes in *HINWEIS: DAS IST PLATZHALTERINHALT, DER NACH DER BEARBEITUNG ERSETZT WIRD*
###Long Sentences XX ###Wrong/Misspelled Service Name ###Link broken or incorrect title link ###Sensitive Terms Terms ###Changes **WAS:** **IS:** **REASON:** **WAS:** **IS:** **REASON:** **WAS:** **IS:** **REASON:** **WAS:** **IS:** **REASON:** proxy_protocol
Stellen Sie sicher, dass Sie die Zeile log_format des HTTP-Abschnitts ändern, um die Proxy_protocol_addr festzulegen:
http { ... log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$proxy_protocol_addr"'; access_log /var/log/nginx/access.log main; ... } server { ... listen 80 default_server proxy_protocol; ... } ... }
3.Speichern Sie Ihre Änderungen.
4.Laden Sie den NGINX-Dienst neu.
Führen Sie zum Beispiel unter Amazon Linux 2 oder RHEL diesen Befehl aus:
systemctl reload nginx
**Hinweis:**Der Befehl zum Neuladen des NGINX-Dienstes ist auf anderen Systemen anders. Die Befehle zum Neuladen von NGINX ähneln den Befehlen zum Neuladen des Apache-Dienstes im vorherigen Abschnitt.
5.Öffnen Sie die Zugriffsprotokolle des NGINX-Webservers. Der Standort ist je nach Konfiguration unterschiedlich.
6.Stellen Sie sicher, dass die Client-IP-Adressen jetzt im Proxy-Protokoll-Header aufgezeichnet werden.
7.Aktivieren Sie die Unterstützung für das Proxy-Protokoll in Ihrer Zielanwendung.
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 8 Monaten
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 2 Jahren