Jak získat IP klienta z AWS, Google Cloud LB a Cloudflare v Nginx?

Konfigurace webové aplikace v cloudovém prostředí je vždy fascinující a plná nových výzev.

Nedávno jsem uvedl do provozu nástroj etechblog.cz Tools, který běží v prostředí AWS s využitím Cloudflare.

Pro směrování provozu používám AWS Application Load Balancer a jako webový server slouží Nginx. Po spuštění jsem nahlédl do access.log a zjistil jsem, že veškeré požadavky jsou označeny jako pocházející z interních IP adres (load balanceru).

Toto není ideální stav, pokud chcete analyzovat logy webového serveru pro určení geografické polohy návštěvníků. Uvědomil jsem si, že je nutné provést úpravy v konfiguraci, aby se zobrazovaly skutečné IP adresy klientů.

Stává se vám totéž?

Zde je návod, jak získat skutečnou IP adresu klienta ve vašich Nginx access logech.

Získání IP adresy návštěvníka z AWS nebo Google Cloud LB

  • Přihlaste se k serveru, kde běží Nginx.
  • Přejděte do adresáře, kde je Nginx nainstalován (standardně /etc/nginx).
  • Vytvořte zálohu souboru nginx.conf.
  • Do sekce HTTP přidejte následující direktivy:
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
  • Restartujte Nginx. Po restartu byste v souboru access.log měli vidět IP adresy návštěvníků.

Pokud používáte Cloudflare, uvidíte IP adresy Cloudflare namísto IP adres klientů. Proto je třeba provést ještě další konfiguraci, popsanou níže.

Získání skutečné IP adresy klienta z Cloudflare

Cloudflare je skvělý poskytovatel CDN a bezpečnostních služeb a jsem s ním velmi spokojen. Pokud Cloudflare používáte podobně jako já a chcete ve webových serverových logách zobrazovat skutečné IP adresy návštěvníků, postupujte dle následujících kroků.

Za předpokladu, že jste přihlášeni k serveru, kde běží Nginx:

Vytvořte zálohu konfiguračního souboru vašeho webu (obvykle se nachází zde: /etc/nginx/sites-available/váše_doména).

Na začátek souboru přidejte následující konfiguraci:

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 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 199.27.128.0/21;
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;
set_real_ip_from 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;
real_ip_header CF-Connecting-IP;

Poznámka: Doporučuji ověřit si aktuální seznam IP adres na oficiální stránce Cloudflare.

Restartujte Nginx a nyní by se v logách měly objevovat skutečné IP adresy klientů. Mně to pomohlo a doufám, že to pomůže i vám.

Dále se můžete podívat, jak implementovat bezpečné hlavičky pomocí Cloudflare Workers.

Líbil se vám tento článek? Co takhle ho sdílet?