Wie erfasse ich Client-IP-Adressen in den Webserverprotokollen hinter einem ELB?

Lesedauer: 6 Minute
0

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:

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.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren