Cloudflare to rozwiązanie z którego sam często korzystam, ale może powodować też pewne problemy – bez dodatkowej konfiguracji webserwer może zwracać zły adres IP klienta/użytkownika strony.

Cloudflare i filtrowanie ich adresów IP

Jednym z problemów – poza błędnymi adresami IP w logach serwera – może być rozpoznawanie IP użytkownika w skryptach PHP. Np. taki prosty kod:

echo $_SERVER['REMOTE_ADDR'];

Normalnie zwróci IP użytkownika (oczywiście pomijam kwestie dodatkowego Proxy). Ale gdy strona będzie schowana za Cloudflare zamiast IP użytkownika skrypt wyświetli nam adres IP należący do Cloudflare.

Listę adresów IP należących do Cloudflare znajdziecie na tej stronie…

Nginx + Cloudflare

By temu zaradzić w przypadku serwera Nginx możemy skorzystać z modułu “http_realip_module”, który zapewne macie w standardzie, a dzięki któremu odfiltrujemy IP należące do Cloudflare.

Filtracja na poziomie hosta (lokalnie)

Można te kilka linijek dodać do pliku z konfiguracją vHosta, w przypadku którego chcemy uzyskać prawdziwe IP użytkowników:

# Cloudflare MyRealIP
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;
#real_ip_header     X-Forwarded-For;
real_ip_recursive on;
# /Cloudflare MyRealIP

W przypadku gdy korzystamy na naszym serwerze tylko z Cloudflare, można zastosować rozwiązanie dedykowane Cloudflare:

real_ip_header CF-Connecting-IP;

Gdy korzystamy (również) z innych usług tego typu lepiej skorzystać z bardziej uniwersalnego rozwiania:

real_ip_header X-Forwarded-For;

Filtracja na poziomie serwera (globalnie)

Kod możecie dodać do głównego pliku konfiguracyjnego Nginx:

/etc/nginx/nginx.conf

Ale jeszcze lepszym wyjściem będzie wykorzystanie faktu, że Nginx automatycznie “zaciąga” pliki z konfiguracją, które znajdują się w katalogu:

/etc/nginx/conf.d/

Możecie taki plik (np. cloudflare.conf) umieścić w tym katalogu ręcznie, lub skorzystać z polecenia:

sudo wget https://webinsider.pl/add/download/?link=nginx-cloudflare-ip-conf -O /etc/nginx/conf.d/nginx-cloudflare-ip.conf

Pamiętajcie by na koniec zmian (czy to ręczne, czy w formie pliku) odświeżyć ustawienia serwera:

sudo /etc/init.d/nginx configtest
sudo /etc/init.d/nginx reload
Cały proces można/warto zautomatyzować – przykładowy skrypt znajdziesz na tej stronie…

Apache2 + Cloudflare

W przypadku Apache2 możemy skorzystać z dodatkowego modułu przygotowanego przez Cloudflare, który wystarczy dodać do serwera.

Informacje jak to zrobić znajdziecie w pomocy Cloudflare, ja tylko szybko pokaże to na przykładzie systemu Debian, z którego najczęściej korzystam:

sudo apt-get install libtool apache2-dev libtool apache2-threaded-dev

wget https://www.cloudflare.com/static/misc/mod_cloudflare/mod_cloudflare.c

apxs -a -i -c mod_cloudflare.c
apxs2 -a -i -c mod_cloudflare.c

(apxs lub apxs2 – zależy od systemu, dlatego można wpisać oba polecenia)

(!) Zgłoś błąd na stronie | Lub postaw nam kawę :-)
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk