NGINX – CloudFlare und reale IP-Adressen (set_real_ip_from)

CloudFlare ist ein CDN-Hosting Anbieter. CDN heist Content-Distribution-Network und meint damit das effiziente Verteilen von Webinhalten von einer Vielzahl an Servern an die Besucher. Zudem bietet Cloudflare auch Zusatzdienste wie DDoS Protection, Analytics uns vieles mehr.

Wenn man Cloudflare vor seinem Webserver betreibt führt dies dazu, dass unser Webserver nur noch die IPs von Cloudflare in seinen Logs vermerkt. Wem die reale IP seiner Besucher wichtig ist, der kann NGINX mit folgender Konfiguration dazu bringen die Reale IP zu verwenden.

Als Grundlage dient der Artikel der Installation von NGINX unter Centos 7. Es funktioniert natürlich auch bei Installationen unter anderen Betriebsystemen.

Zuerst schauen wir ob unser NGINX mit den notwendigen Modulen kompiliert wurde.

nginx -V
nginx version: nginx/1.6.2
built by gcc 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_spdy_module --with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'

Für die Reale IP benötigen wir folgendes Modul

--with-http_realip_module

und für den Fall, dass wir auch IPv6 benötigen ist dieses Modul ebenfalls erforderlich.

--with-ipv6

Sind diese Vorraussetzungen geschaffen können wir mit der Konfiguration fortfahren.

NGINX – reale IPs mit CloudFlare

In der von Knowledge Base von CloudFlare finden wir die für uns relevanten IPs. Diese fügen wir nun in die NGINX Konfiguration ein. Dazu erstellen eine neue Datei /etc/nginx/cloudflare-real-ip.conf 

vi /etc/nginx/cloudflare-real-ip.conf

mit folgenden Inhalt:

# Cloudflare
set_real_ip_from   199.27.128.0/21;
set_real_ip_from   173.245.48.0/20;
set_real_ip_from   103.21.244.0/22;
set_real_ip_from   103.22.200.0/22;
set_real_ip_from   103.31.4.0/22;
set_real_ip_from   141.101.64.0/18;
set_real_ip_from   108.162.192.0/18;
set_real_ip_from   190.93.240.0/20;
set_real_ip_from   188.114.96.0/20;   
set_real_ip_from   197.234.240.0/22;
set_real_ip_from   198.41.128.0/17;
set_real_ip_from   162.158.0.0/15;
set_real_ip_from   104.16.0.0/12;
set_real_ip_from   2400:cb00::/32;
set_real_ip_from   2606:4700::/32;
set_real_ip_from   2803:f800::/32;
set_real_ip_from   2405:b500::/32;
set_real_ip_from   2405:8100::/32;
real_ip_header     CF-Connecting-IP;

Nun können wir diese Datei für alle vHost einbinden bei denen wir Cloudflare nutzen. Dies geschieht innerhalb des Abschnitt Server.

server {
    listen 80;
    listen [::]:80;
    server_name der-linux-admin.de www.der-linux-admin.de;
    index index.php;
 
    # CloudFlare real ip
    include /etc/nginx/cloudflare-real-ip.conf;

    ...
}

Nach dem Neustart von NGINX sollte dieser nun der realen IPs der Besucher loggen und nicht mehr die IPs von CloudFlare.

Es loht die IPs in regelmäßigen Abständen auf der Seite von Cloudflare zu überprüfen. Es kommen am und zu ein paar neue IPs dazu.

Für weitere Information lohnt ein Blick auf die Projektseiten von NGINX und CloudFlare.

Ein Kommentar

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.