Cloudflare Real IP | Swag & Nginx Proxy Manager!

Permalänk
Medlem

Cloudflare Real IP | Swag & Nginx Proxy Manager!

Denna tråd började med att jag planerade att ge ett simpelt svar till @tobias86aa i hans tråd här: https://www.sweclockers.com/forum/trad/1706595-npm-and-forwar...
Men svaret blev så långt så jag bestämde mig för att göra en egen tråd och sen länka in svaret. 😋

Skrivet av tobias86aa:

Det som jag vill åstadkomma att Apache loggarna visar rätt IP information. Lite osäker på vad för typ av information du är ute efter här men trafiken kommer in via Cloudflare -> OPNsense (Skickar vidare 80/443 trafik) -> Docker/NPM (192.168.1.118) -> webmin/virtualmin (192.168.1.146) -> tokar86a.top

Jag kan se mitt internets ip nummer i Wordpress men apache/php verkar använda sig av information

$_SERVER['REMOTE_ADDR'] 192.168.1.118
$_SERVER['SERVER_PORT'] 443
$_SERVER['SERVER_ADDR'] 192.168.1.146
$_SERVER['SERVER_NAME'] tokar86a.top

Men när jag kollar Wordfence så ser jag följande information

IP Detection Methods of detecting a visitor's IP address.
IPs Value Used
REMOTE_ADDR 192.168.1.118
CF-Connecting-IP 92.35.60.* In use
X-Real-IP 162.158.222.6
X-Forwarded-For 92.35.60.**, 162.158.222.6
Trusted Proxies (not set)
Trusted Proxy Preset (not set)

Så behöver få apache/php att använda CF-Connecting-IP ?

Om du inte får rätt IP i log så är det för att du missat att lägga till cloudflares IP range i din nginx.conf
https://www.cloudflare.com/ips/

Så här har jag konfigurerat min nginx så jag får rätt IP.
Jag skapade en ny fil i min nginx mapp, döpte filen till cf_real-ip.conf klistrade in rätt IP range från Cloudflare.
Ser ut så här om jag kör en cat på min .conf

När detta är klart så behöver man se till så denna rad med kod finns med i nginx.conf
Min nginx.conf fil ligger här: /config/appdata/nginx/nginx.conf

Starta sen om Swag.
Sen får man ut rätt IP till Wordpress & Wordfence med mera.

Men!
Om man nu kör Nginx Proxy Manager så är det lite annorlunda,
nedan är en step by step guide på exakt hur man gör!

1. Se till att containern är igång.
2. Bash in i containern, docker exec -it Nginx-Proxy-Manager-Official bash
(Jag har denna container)
3. Kolla vad du har för OS version i containern. cat /etc/os-release
4. Är din contaner debian/ubuntu kör följande kommando, apt-get update > apt-get install nano -y

5. Navigera in till nginx.conf > cd /etc/nginx > nano nginx.conf

6. Scrolla ner tills du ser detta,
# Real IP Determination
# Local subnets:

Sen lägger du till denna kod så som jag gjort i bilden nedan.
##
# CF Real IP
include conf.d/include/cf_real-ip.conf;
#

Spara sen med CTRL + O > Enter

7. Navigera sen in till följande mapp och skapa denna .conf fil
cd conf.d > cd include > nano cf_real-ip.conf

8. Klistra in IP range från Cloudflare, samt skriv syntax som i bilden nedan.

Spara sen med CTRL + O > Enter

9. ls för att se till så filen ligger där.

10. exit > exit > Done! > Restart Nginx Proxy Manager. > kolla logs så inga fel finns.

11. Nginx Proxy Manager log status!

Notera!
Du kan även ställa in detta i själva webui men jag har ej testat då container config fungerar perfekt!
(Webui är fint, men jag föredrar och ställa in CF Real IP korrekt från början, och då är det containern som gäller.)

~Fin

stavning -.-"
Visa signatur

[ Custom Thermaltake Case ] [ ASUS Rog Strix Z790-E Gaming Wifi ] [ Intel Core i9 14900KS ]
[ G.Skill Trident Z5 7200Mhz 32GB DDR5 ] [ Lian Li Galahad II 360 Performance ]
[ Samsung 870 QVO MZ-77Q1T0BW 1TB ] [ Samsung 870 QVO 8TB MZ-77Q8T0BW ]
[ WD Black SN850X NVMe SSD 1TB ] [ ASUS TUF GeForce RTX 5090 32GB ] [ Dedikerad PhysX GPU Msi 3050 LP 6G OC ]
[ Seasonic Prime TX-1600 Nocua Edition 80 Plus Titanium ] [ Gigabyte 32" M32U IPS 4K 144 Hz HDMI 2.1 ]

Permalänk

Hej @Zidichy

Hur fungerar det här när Container behöver uppdateras? Då kommer de här inställningarna/ändringar att försvinna eftersom det görs om då.

Sen är problemet mer att jag får det IP numret från min NPM docker cointerner host alltså 192.168.1.118 och det är inte ett Cloudflare IP.

Med följande text information får jag det rätta IP nummer från Cloudflare: real_ip_header CF-Connecting-IP;

Här är den information som jag ser och som verkar ha det mesta antydan till att saker inte får rätt ip nummer när jag kollar upp php informationen på Apache servern.

När trafiken går igenom NPM 192.168.1.118 till min Webserver 192.168.1.146 : $_SERVER['REMOTE_ADDR'] 192.168.1.118
När trafiken inte går igenom NPM utan skickas direkt från min brandvägg till webserven: $_SERVER['REMOTE_ADDR'] 92.35.60.**

Cloudlfare är fortfarande aktiverat.

Så får det inte att ändra när jag väljer att sätta real IP för 192.168.1.118

Permalänk
Medlem
Skrivet av tobias86aa:

Hej @Zidichy

Hur fungerar det här när Container behöver uppdateras? Då kommer de här inställningarna/ändringar att försvinna eftersom det görs om då.

Sen är problemet mer att jag får det IP numret från min NPM docker cointerner host alltså 192.168.1.118 och det är inte ett Cloudflare IP.

Med följande text information får jag det rätta IP nummer från Cloudflare: real_ip_header CF-Connecting-IP;

Här är den information som jag ser och som verkar ha det mesta antydan till att saker inte får rätt ip nummer när jag kollar upp php informationen på Apache servern.

När trafiken går igenom NPM 192.168.1.118 till min Webserver 192.168.1.146 : $_SERVER['REMOTE_ADDR'] 192.168.1.118
När trafiken inte går igenom NPM utan skickas direkt från min brandvägg till webserven: $_SERVER['REMOTE_ADDR'] 92.35.60.**

Cloudlfare är fortfarande aktiverat.

Så får det inte att ändra när jag väljer att sätta real IP för 192.168.1.118

Ja stämmer att filen försvinner, men du kan skapa script som återskapar filen direkt efter att containern är uppdaterad, då kommer filen att ligga kvar efter varje uppdateringen.

Det är inte konstigt att du får ut ditt lokala IP i loggen.
Får du ut extern IP i loggen så har du gjort rätt.

Visa signatur

[ Custom Thermaltake Case ] [ ASUS Rog Strix Z790-E Gaming Wifi ] [ Intel Core i9 14900KS ]
[ G.Skill Trident Z5 7200Mhz 32GB DDR5 ] [ Lian Li Galahad II 360 Performance ]
[ Samsung 870 QVO MZ-77Q1T0BW 1TB ] [ Samsung 870 QVO 8TB MZ-77Q8T0BW ]
[ WD Black SN850X NVMe SSD 1TB ] [ ASUS TUF GeForce RTX 5090 32GB ] [ Dedikerad PhysX GPU Msi 3050 LP 6G OC ]
[ Seasonic Prime TX-1600 Nocua Edition 80 Plus Titanium ] [ Gigabyte 32" M32U IPS 4K 144 Hz HDMI 2.1 ]

Permalänk
Skrivet av Zidichy:

Ja stämmer att filen försvinner, men du kan skapa script som återskapar filen direkt efter att containern är uppdaterad, då kommer filen att ligga kvar efter varje uppdateringen.

Det är inte konstigt att du får ut ditt lokala IP i loggen.
Får du ut extern IP i loggen så har du gjort rätt.

Fast det löser ändå inte mitt problem med att Webmin fortfarande ser mitt docker IP när jag loggar in via exempelvis webmin.exemple.com

NPM visar rätt ip i loggarna för den hosten men när jag kollar men webmins egna loggar visar den 192.168.1.118

[28/Jan/2024:07:24:38 +0000] - 200 200 - GET https webmin.***.top "/stats.cgi?xhr-stats=general" [Client 92.35.**.**] [Length 501] [Gzip -] [Sent-to 192.168.1.146] "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0" "https://webmin.***.top/webmin/?xnavigation=1"

Men jag har get upp eftersom det verkar vara omöjligt att få webmin att se något annat ip än 192.168.1.118 när man skickar trafiken via NPM. Som tur är ser Apache och Wordpress mitt riktiga IP så antar att det är det viktigaste.

Permalänk
Medlem
Skrivet av tobias86aa:

Fast det löser ändå inte mitt problem med att Webmin fortfarande ser mitt docker IP när jag loggar in via exempelvis webmin.exemple.com

NPM visar rätt ip i loggarna för den hosten men när jag kollar men webmins egna loggar visar den 192.168.1.118

[28/Jan/2024:07:24:38 +0000] - 200 200 - GET https webmin.***.top "/stats.cgi?xhr-stats=general" [Client 92.35.**.**] [Length 501] [Gzip -] [Sent-to 192.168.1.146] "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0" "https://webmin.***.top/webmin/?xnavigation=1"

Men jag har get upp eftersom det verkar vara omöjligt att få webmin att se något annat ip än 192.168.1.118 när man skickar trafiken via NPM. Som tur är ser Apache och Wordpress mitt riktiga IP så antar att det är det viktigaste.

Om det fortfarande inte fungerar så är det yttligare konfig som krävs för just själva reverse proxy då det är den som inte får ut rätt IP från logs.
Det är inte omöjligt att lyckas, men det krävs tålamod samt att man inte ger upp.

Hade jag haft tid över samt en testmiljö tillhands så hade jag gärna satt upp allt själv, men om du har lust och så kan du gärna få berätta mer om din miljö så kan jag fortsätta att hjälpa dig.

Visa signatur

[ Custom Thermaltake Case ] [ ASUS Rog Strix Z790-E Gaming Wifi ] [ Intel Core i9 14900KS ]
[ G.Skill Trident Z5 7200Mhz 32GB DDR5 ] [ Lian Li Galahad II 360 Performance ]
[ Samsung 870 QVO MZ-77Q1T0BW 1TB ] [ Samsung 870 QVO 8TB MZ-77Q8T0BW ]
[ WD Black SN850X NVMe SSD 1TB ] [ ASUS TUF GeForce RTX 5090 32GB ] [ Dedikerad PhysX GPU Msi 3050 LP 6G OC ]
[ Seasonic Prime TX-1600 Nocua Edition 80 Plus Titanium ] [ Gigabyte 32" M32U IPS 4K 144 Hz HDMI 2.1 ]

Permalänk
Skrivet av Zidichy:

Om det fortfarande inte fungerar så är det yttligare konfig som krävs för just själva reverse proxy då det är den som inte får ut rätt IP från logs.
Det är inte omöjligt att lyckas, men det krävs tålamod samt att man inte ger upp.

Hade jag haft tid över samt en testmiljö tillhands så hade jag gärna satt upp allt själv, men om du har lust och så kan du gärna få berätta mer om din miljö så kan jag fortsätta att hjälpa dig.

Eller så är det något med hur Webmin fungerar.

https://github.com/webmin/webmin/issues/2070

Allt annat ser rätt ip nummer men det är något i själva webmin som inte tolkar den informationen som den får på korrekt sätt.

För informationen i Apache och Wordpress som är hostade på samma maskin får rätt information i loggarna när jag la till följande rad i apache2.conf

RemoteIPHeader X-Forwarded-For
# replace IP with the remote server you trust
RemoteIPInternalProxy 192.168.1.118