IP-Adressen hinter Cloudflare wiederherstellen

Wenn Cloudflare als Proxy für eine Webseite fungiert, wird die ursprüngliche IP-Adresse der Besucher maskiert. Um diese wiederherzustellen, empfiehlt Cloudflare, den CF-Connecting-IP-Header zu nutzen. Für Apache-Server wird das Modul mod_remoteip verwendet, da mod_cloudflare nicht mehr unterstützt wird. So können die echten IP-Adressen wieder korrekt in den Logs erscheinen.

Es folgt die Installationsanleitung für Apache 2.4 unter Debian 12.

mod_remoteip aktivieren

Prüfen ob mod_remoteip vorhanden ist

ls /etc/apache2/mods-available/ | grep remoteip
remoteip.load

Aktivieren

sudo a2enmod remoteip
Enabling module remoteip.
To activate the new configuration, you need to run:
  systemctl restart apache2

Testen ob installiert

apache2ctl -M | grep remoteip
 remoteip_module (shared)

Trusted Proxy-Konfiguration

sudo nano /etc/apache2/apache2.conf
<IfModule mod_remoteip.c>
    RemoteIPHeader CF-Connecting-IP
    RemoteIPTrustedProxy 173.245.48.0/20
    RemoteIPTrustedProxy 103.21.244.0/22
    RemoteIPTrustedProxy 103.22.200.0/22
    RemoteIPTrustedProxy 103.31.4.0/22
    RemoteIPTrustedProxy 141.101.64.0/18
    RemoteIPTrustedProxy 108.162.192.0/18
    RemoteIPTrustedProxy 190.93.240.0/20
    RemoteIPTrustedProxy 188.114.96.0/20
    RemoteIPTrustedProxy 197.234.240.0/22
    RemoteIPTrustedProxy 198.41.128.0/17
    RemoteIPTrustedProxy 162.158.0.0/15
    RemoteIPTrustedProxy 104.16.0.0/13
    RemoteIPTrustedProxy 104.24.0.0/14
    RemoteIPTrustedProxy 172.64.0.0/13
    RemoteIPTrustedProxy 131.0.72.0/22
    RemoteIPTrustedProxy 2400:cb00::/32
    RemoteIPTrustedProxy 2606:4700::/32
    RemoteIPTrustedProxy 2803:f800::/32
    RemoteIPTrustedProxy 2405:b500::/32
    RemoteIPTrustedProxy 2405:8100::/32
    RemoteIPTrustedProxy 2a06:98c0::/29
    RemoteIPTrustedProxy 2c0f:f248::/32
</IfModule>

LogFormat anpassen

Statt der Direktive %h die Direktive %a nehmen

LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

Konfiguration prüfen

sudo apache2ctl configtest
Syntax OK

Apache neu starten

sudo service apache2 restart

Fertig!

sudo service apache2 status
● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; preset: enabled)
     Active: active (running) since Sat 2024-10-05 18:13:07 CEST; 1min 19s ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 644382 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
      Tasks: 130 (limit: 9249)
     Memory: 56.6M
        CPU: 499ms
     CGroup: /system.slice/apache2.service
             ├─644415 /usr/sbin/apache2 -k start
             ├─644416 "vlogger (access log)"
             ├─644417 /usr/sbin/apache2 -k start
             ├─644418 /usr/sbin/apache2 -k start
             ├─644420 "Passenger watchdog"
             ├─644423 "Passenger core"
             ├─644444 /usr/sbin/apache2 -k start
             └─644445 /usr/sbin/apache2 -k start

Oct 05 18:13:07 cloud2 systemd[1]: Starting apache2.service - The Apache HTTP Server...
Oct 05 18:13:07 cloud2 systemd[1]: Started apache2.service - The Apache HTTP Server.
tail -F /var/log/apache2/access.log | egrep '^[^ ]+'

Siehe auch

Cloudflare: restoring original visitor IPs
https://developers.cloudflare.com/support/troubleshooting/restoring-visitor-ips/restoring-original-visitor-ips

Cloudflare IP range, last updated: 28.09.2023
https://www.cloudflare.com/ips/

Apache module mod_remoteip
https://httpd.apache.org/docs/2.4/mod/mod_remoteip.html

Apache module mod_log_config
https://httpd.apache.org/docs/current/mod/mod_log_config.html