S2S VPN zwischen vServer und Firewall - MASQUERADE
Hallo allerseits,
ich habe mal wieder ein Anliegen.
Um dies alleine zu lösen reicht mein Verständnis leider nicht aus, und ich bin auf Hilfe angewiesen.
Folgendes:
Bei ionos habe ich einen vServer der mittels iptables alle Anfragen an 443 über einen S2S VPN Tunnel an meinen
NgnixRP weiterleitet. Funktioniert prima.
Jetzt möchte ich aber Fail2Ban einsetzen auf dem vServer um meine Dienste noch weiter abzusichern.
Die Logs werden vom Vaulwarden-Server an den vServer gesendet.
Auf dem Vaultwarden-Server sehe ich ja immer nur die Tunnel Adresse wenn eine Verbindung eingeht.
Schlägt Fail2Ban an, dann blockt es mir ja genau die IP vom VPN-Transfer-Netz. Nicht gut!
Ich glaube zu wissen, das ich mit iptables auf dem vServer das MASQUERADE ausschalten muss,
so das die richtige Absender-Adresse am Vaulwarden-Server zu sehen ist. An der Firewall muss ich den ins Internet gehenden Traffic des Vaultwarden-Server's auf den VPN Tunnel umleiten, so das der Vaultwarden-Server quasi über den vServer ins Internet geht..
Soweit die Theorie. Wie ich das allerdings praktisch umsetze.. keinen blassen Schimmer.
So schaut auf dem vServer die iptables aus:
Die ganzen geblockten IP's werden von Wazuh geblockt, wegen SSH Bruteforce.
Wie das ganze Routing auf der Firewall eingerichtet wird, wird mir hoffentlich der Support des Herstellers in Unterstützung sagen können.
Wobei ich nun Unterstützung bräuchte, ist bei der Konfiguration von den iptables, so das die puplic ip des Absenders am Vaultwarden-Server in den Log's zu sehen ist.
Ich sag schon mal danke.
ich habe mal wieder ein Anliegen.
Um dies alleine zu lösen reicht mein Verständnis leider nicht aus, und ich bin auf Hilfe angewiesen.
Folgendes:
Bei ionos habe ich einen vServer der mittels iptables alle Anfragen an 443 über einen S2S VPN Tunnel an meinen
NgnixRP weiterleitet. Funktioniert prima.
Jetzt möchte ich aber Fail2Ban einsetzen auf dem vServer um meine Dienste noch weiter abzusichern.
Die Logs werden vom Vaulwarden-Server an den vServer gesendet.
Auf dem Vaultwarden-Server sehe ich ja immer nur die Tunnel Adresse wenn eine Verbindung eingeht.
Schlägt Fail2Ban an, dann blockt es mir ja genau die IP vom VPN-Transfer-Netz. Nicht gut!
Ich glaube zu wissen, das ich mit iptables auf dem vServer das MASQUERADE ausschalten muss,
so das die richtige Absender-Adresse am Vaulwarden-Server zu sehen ist. An der Firewall muss ich den ins Internet gehenden Traffic des Vaultwarden-Server's auf den VPN Tunnel umleiten, so das der Vaultwarden-Server quasi über den vServer ins Internet geht..
Soweit die Theorie. Wie ich das allerdings praktisch umsetze.. keinen blassen Schimmer.
So schaut auf dem vServer die iptables aus:
root@vserver-ionos-vpn:~# iptables -t nat -vnL
Chain PREROUTING (policy ACCEPT 48 packets, 2616 bytes)
pkts bytes target prot opt in out source destination
2 112 DNAT tcp -- ens192 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 to:172.16.70.1:25
101 5804 DNAT tcp -- ens192 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 to:172.16.20.5:443
Chain INPUT (policy ACCEPT 1 packets, 52 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 34 packets, 4307 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
63 5799 MASQUERADE all -- * * 0.0.0.0/0 0.0.0.0/0
root@vserver-ionos-vpn:~# iptables -vnL
Chain INPUT (policy ACCEPT 22726 packets, 2424K bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 180.101.88.205 0.0.0.0/0
0 0 DROP all -- * * 193.32.162.11 0.0.0.0/0
0 0 DROP all -- * * 180.101.88.196 0.0.0.0/0
0 0 DROP all -- * * 195.72.145.14 0.0.0.0/0
0 0 DROP all -- * * 218.92.0.22 0.0.0.0/0
0 0 DROP all -- * * 198.211.124.50 0.0.0.0/0
0 0 DROP all -- * * 51.38.112.61 0.0.0.0/0
0 0 DROP all -- * * 194.169.175.36 0.0.0.0/0
0 0 DROP all -- * * 43.156.13.252 0.0.0.0/0
0 0 DROP all -- * * 164.90.236.141 0.0.0.0/0
0 0 DROP all -- * * 43.154.189.227 0.0.0.0/0
0 0 DROP all -- * * 43.134.7.162 0.0.0.0/0
0 0 DROP all -- * * 183.105.214.111 0.0.0.0/0
0 0 DROP all -- * * 85.240.58.125 0.0.0.0/0
0 0 DROP all -- * * 124.156.199.133 0.0.0.0/0
0 0 DROP all -- * * 94.179.133.22 0.0.0.0/0
0 0 DROP all -- * * 218.92.0.24 0.0.0.0/0
0 0 DROP all -- * * 165.232.166.202 0.0.0.0/0
0 0 DROP all -- * * 114.34.142.75 0.0.0.0/0
0 0 DROP all -- * * 218.92.0.29 0.0.0.0/0
1 40 DROP all -- * * 179.43.180.106 0.0.0.0/0
0 0 DROP all -- * * 203.228.7.104 0.0.0.0/0
0 0 DROP all -- * * 213.109.202.127 0.0.0.0/0
0 0 DROP all -- * * 95.156.96.46 0.0.0.0/0
0 0 DROP all -- * * 185.161.248.218 0.0.0.0/0
0 0 DROP all -- * * 218.92.0.22 0.0.0.0/0
0 0 DROP all -- * * 43.155.166.220 0.0.0.0/0
0 0 DROP all -- * * 167.172.157.140 0.0.0.0/0
0 0 DROP all -- * * 117.239.253.153 0.0.0.0/0
0 0 DROP all -- * * 188.166.250.251 0.0.0.0/0
0 0 DROP all -- * * 43.156.48.140 0.0.0.0/0
0 0 DROP all -- * * 189.112.0.11 0.0.0.0/0
0 0 DROP all -- * * 43.153.223.232 0.0.0.0/0
0 0 DROP all -- * * 159.223.148.156 0.0.0.0/0
0 0 DROP all -- * * 119.28.111.112 0.0.0.0/0
0 0 DROP all -- * * 43.135.167.165 0.0.0.0/0
0 0 DROP all -- * * 61.177.172.136 0.0.0.0/0
0 0 DROP all -- * * 61.177.172.160 0.0.0.0/0
5551 1799K DROP all -- ens192 * 0.0.0.0/0 0.0.0.0/0 -m geoip ! --source-country DE
Chain FORWARD (policy ACCEPT 7561 packets, 2807K bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 180.101.88.205 0.0.0.0/0
0 0 DROP all -- * * 193.32.162.11 0.0.0.0/0
0 0 DROP all -- * * 180.101.88.196 0.0.0.0/0
0 0 DROP all -- * * 195.72.145.14 0.0.0.0/0
0 0 DROP all -- * * 218.92.0.22 0.0.0.0/0
0 0 DROP all -- * * 198.211.124.50 0.0.0.0/0
0 0 DROP all -- * * 51.38.112.61 0.0.0.0/0
0 0 DROP all -- * * 194.169.175.36 0.0.0.0/0
0 0 DROP all -- * * 43.156.13.252 0.0.0.0/0
0 0 DROP all -- * * 164.90.236.141 0.0.0.0/0
0 0 DROP all -- * * 43.154.189.227 0.0.0.0/0
0 0 DROP all -- * * 43.134.7.162 0.0.0.0/0
0 0 DROP all -- * * 183.105.214.111 0.0.0.0/0
0 0 DROP all -- * * 85.240.58.125 0.0.0.0/0
0 0 DROP all -- * * 124.156.199.133 0.0.0.0/0
0 0 DROP all -- * * 94.179.133.22 0.0.0.0/0
0 0 DROP all -- * * 218.92.0.24 0.0.0.0/0
0 0 DROP all -- * * 165.232.166.202 0.0.0.0/0
0 0 DROP all -- * * 114.34.142.75 0.0.0.0/0
0 0 DROP all -- * * 218.92.0.29 0.0.0.0/0
0 0 DROP all -- * * 179.43.180.106 0.0.0.0/0
0 0 DROP all -- * * 203.228.7.104 0.0.0.0/0
0 0 DROP all -- * * 213.109.202.127 0.0.0.0/0
0 0 DROP all -- * * 95.156.96.46 0.0.0.0/0
0 0 DROP all -- * * 185.161.248.218 0.0.0.0/0
0 0 DROP all -- * * 218.92.0.22 0.0.0.0/0
0 0 DROP all -- * * 43.155.166.220 0.0.0.0/0
0 0 DROP all -- * * 167.172.157.140 0.0.0.0/0
0 0 DROP all -- * * 117.239.253.153 0.0.0.0/0
0 0 DROP all -- * * 188.166.250.251 0.0.0.0/0
0 0 DROP all -- * * 43.156.48.140 0.0.0.0/0
0 0 DROP all -- * * 189.112.0.11 0.0.0.0/0
0 0 DROP all -- * * 43.153.223.232 0.0.0.0/0
0 0 DROP all -- * * 159.223.148.156 0.0.0.0/0
0 0 DROP all -- * * 119.28.111.112 0.0.0.0/0
0 0 DROP all -- * * 43.135.167.165 0.0.0.0/0
0 0 DROP all -- * * 61.177.172.136 0.0.0.0/0
0 0 DROP all -- * * 61.177.172.160 0.0.0.0/0
74 4424 LOG all -- ens192 * 0.0.0.0/0 0.0.0.0/0 -m geoip ! --source-country DE,NL,IE LOG flags 0 level 4 prefix "GeopIP_Block_FC "
74 4424 DROP all -- ens192 * 0.0.0.0/0 0.0.0.0/0 -m geoip ! --source-country DE,NL,IE
Chain OUTPUT (policy ACCEPT 25757 packets, 20M bytes)
pkts bytes target prot opt in out source destination
root@vserver-ionos-vpn:~#
Die ganzen geblockten IP's werden von Wazuh geblockt, wegen SSH Bruteforce.
Wie das ganze Routing auf der Firewall eingerichtet wird, wird mir hoffentlich der Support des Herstellers in Unterstützung sagen können.
Wobei ich nun Unterstützung bräuchte, ist bei der Konfiguration von den iptables, so das die puplic ip des Absenders am Vaultwarden-Server in den Log's zu sehen ist.
Ich sag schon mal danke.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 62258403373
Url: https://administrator.de/contentid/62258403373
Ausgedruckt am: 21.11.2024 um 18:11 Uhr
25 Kommentare
Neuester Kommentar
Moin.
Aber Achtung !! Bei dieser Variante musst du beachten das du den Antwort-Traffic auf dem Server daheim wieder über den Tunnel schickst, also bspw. auf deiner Firewall Routing-Tags zu dieser Verbindung hinzufügst oder per Policy Routing das Default GW für den Server auf den Tunnel legst, weil die Pakete sonst über den Internet-Anschluss deines Servers wieder raus gehen und es zu asynchronem Routing und dementsprechend keiner Verbindung kommt!
Routing zwischen zwei PfSense - Nutzung von public IP
Gruß pp
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
63 5799 MASQUERADE all -- * * 0.0.0.0/0 0.0.0.0/0
Deine Masquerade regel inkludiert zu viele Interfaces, somit werden auch Pakete nach intern über den Tunnel maskiert (also die Quelladresse auf die des vServers umgeschrieben) was dein Problem verursacht. Schränke sie stattdessen nur auf Traffic ein welches das WAN Interface ens192 am vServer von innen nach außen verlässt, also bspw. die obige Regel ersetzen durch:pkts bytes target prot opt in out source destination
63 5799 MASQUERADE all -- * * 0.0.0.0/0 0.0.0.0/0
iptables -t nat -A POSTROUTING -o ens192 -j MASQUERADE
Aber Achtung !! Bei dieser Variante musst du beachten das du den Antwort-Traffic auf dem Server daheim wieder über den Tunnel schickst, also bspw. auf deiner Firewall Routing-Tags zu dieser Verbindung hinzufügst oder per Policy Routing das Default GW für den Server auf den Tunnel legst, weil die Pakete sonst über den Internet-Anschluss deines Servers wieder raus gehen und es zu asynchronem Routing und dementsprechend keiner Verbindung kommt!
Routing zwischen zwei PfSense - Nutzung von public IP
Gruß pp
HIER ist diese Thematik des asynchonen Routings auch noch einmal recht gut beschrieben.
Ping am Zielserver ist wenig zielführend. Ein Traceroute (mit -n (deaktivieres DNS Lookup, bzw. -d Winblows tracert) wäre da hilfreicher um die verwendeten Router Hops sehen zu können. Idealerweise lässt man dann am Ziel einen tcpdump laufen um zu sehen das die ICMP Echo Requests dort ankommen.
Sendet der Zielserver den Antworttraffic NICHT auf dem gleichen Wege via vServer zurück sondern direkt am lokalen Router hast du genau die Thematik mit dem asynchronen Routing. Das kannst du nur sehen wenn du die Ziel IPs sehen kannst.
Sendet der Zielserver den Antworttraffic NICHT auf dem gleichen Wege via vServer zurück sondern direkt am lokalen Router hast du genau die Thematik mit dem asynchronen Routing. Das kannst du nur sehen wenn du die Ziel IPs sehen kannst.
Wie zu erkenn ist, geht der Traffic wie gewollt über den Tunnel zum vServer ins Internet.
Richtig! Und vermutlich dort auch richtig geNATet raus ins Internet sonst würdest du die folgenden IPs nicht sehen können da ohne NAT deine Absende RFC1918 IP verworfen wäre.Das müsstest du jetzt nochmal in die andere Richtung machen um das zu sehen. ICMP geht aber nicht da du das Tunneling ins VPN ja nur mit TCP 443 machst. Sprich nur TCP 443 Traffic wird so transportiert aber kein ICMP.
Alternativ könntest du ein TCP basiertes Ping Tool verwenden auf 443.
Dazu müsstest du einen remoten Client nehmen dort mit dem Browser oder "telnet <ziel_ip> 443" mal einen Connectversuch triggern und dir mit tcpdump ansehen ob a: die Pakete mit richtiger IP Adressierung in den Tunnel sehen und b: mit tcpdump ob sie auch am Zielserver hinter der UTM ankommen.
Dient ja nur dazu zu checken ob das Masquerading überall korrekt ist.
Du musst deine Masquerade Regel mit meiner ersetzen nicht einfach nur hinzufügen, denn sonst greift ja deine alte Regel noch die ja viel zu viel unnötig maskiert!!
First match wins gilt auch im POSTROUTING!
First match wins gilt auch im POSTROUTING!
vom vServer hat eine Puplic IP
Pupsen tut der arme Kerl hoffentlich nicht. Tut nichts anderes als in den Ip Paketen die Absender Adresse mit der des ens192 Interfaces zu ersetzen.
Man achte auf die Chain "Postrouting"! Er macht das nur wenn vorab geroutete Frames den Server wieder ausgehend verlassen (-o).Das ist ja so aber nicht gewollt.
Das ist per se richtig aber dein Linux Server und deine lokalen 172.16er Netze erreicht er ja ausgehend zum Ziel mitnichten über das ens192 Interface sondern über das tun0 VPN Interface. Folglich findet dann auch kein Masquerading mit der ens192 IP statt.Das Masquerading muss hier also über das 10er tun0 Interface passieren, damit die Zielrechner im 10.8er und den 172er Netzen die 10.8er IP als Absender "sehen" um den Rücktraffic auch wieder über den Tunnel zu schicken und nicht lokal zu routen wie es in den o.a. Threads beschrieben ist. Andernfalls rennst du ins Problem asymetrisches Routing.
Bedeutet im Umkehrschluß aber auch das du die am Jumphost eingehenden Client Verbindungen nicht mehr mit ihren Original IPs dort siehst, denn die müssen ja zwangsläufig in die Tunnel IP geNATet werden eben wegen des Rücktraffics vom Ziel der via Tunnel gehen muss. An den Zielhosts wirst du also nix mit fail2ban und Logging. Nicht das du hier einen Denkfehler machst?!
HIER kannst du sehen wie das mit einem IPsec Jumphost mit NGINX Proxy und nftables gelöst ist.
Zitat von @Ueba3ba:
Für mich ergibt das mit dem MASQUERADE keinen Sinn.
Ich verstehe das so:
Das Interface ens192 vom vServer hat eine Puplic IP, sagen wir mal die 83.40.1.5
Tut nichts anderes als in den Ip Paketen die Absender Adresse mit der des ens192 Interfaces zu ersetzen.
Falsch. Nur ausgehende Pakete die das WAN Interface ausgehend verlassen deren Quelladresse wird auf die des WAN Ports umgeschrieben! Deswegen ja die Option -o (für out-interface).Für mich ergibt das mit dem MASQUERADE keinen Sinn.
Ich verstehe das so:
Das Interface ens192 vom vServer hat eine Puplic IP, sagen wir mal die 83.40.1.5
iptables -t nat -A POSTROUTING -o ens192 -j MASQUERADE
Geforwardete Pakete vom WAN in den Tunnel werden dadurch nicht mehr umgeschrieben, die Quelladresse des Clients bleibt also gleich.
Und weil die Pakete mit einer öffentlichen Adresse auf deinem Server ankommen müssen diese auch wieder über den Tunnel zurückgeschickt werden entweder via Policy-Route oder Routing-Tags die der eingehenden Verbindung hinzugefügt werden und dann die Rück-Pakete durch die Tags automatisch über den Tunnel geschickt werden.
Heißt also, das am Ziel Server, dem Linux-Server auf dem mein Vaultwarden läuft, statt der Tunnel IP,
die IP vom ens192 Interface des vServes angezeigt wird.
Nein, wie geschrieben wird nur SRCNAT gemacht wenn Pakete den WAN Port nach außen verlassen nicht nach innen!die IP vom ens192 Interface des vServes angezeigt wird.
Ich möchte die Puplic IP vom Client, der eine Verbindung mit dem Vaultwarden Server aufbaut im LOG stehen haben,
um diese mit Fail2Ban auch blockieren zu können, nach 3 falschen Anmeldeversuchen.
Schon verstandenum diese mit Fail2Ban auch blockieren zu können, nach 3 falschen Anmeldeversuchen.
Ich habe den Eindruck, das meine Erklärung oben eventuell falsch verstanden wurde.
Schau dir dazu auch diesen Thread an
Routing zwischen zwei PfSense - Nutzung von public IP
Da wird es auch sehr detailliert erklärt.
Du musst auch darauf achten das der NginxRP im vServer via VPN Tunnel die Tunnel IP als Absender verwendet (proxy_bind <tun0_ip>):
Denn so bekommen diese Frames die Richtung Server gehen eine Tunnel Absender IP damit die Rückroute am Zielserver 172.16.20.5 auch wieder in den Tunnel geht ansonsten droht dir wieder asymetrisches Routing und Session Abbruch.
Zumindestens für den Proxy Traffic erspart dir das auch das NAT.
server {
listen 8080;
listen [::]:8080;
location / {
proxy_bind <tun0_ip>;
proxy_pass http://172.16.20.5:80;
include proxy_params;
}
}
Zumindestens für den Proxy Traffic erspart dir das auch das NAT.
Zitat von @Ueba3ba:
>
wieder:
gemacht, da sonst nicht mehr funktioniert.
>
wieder:
iptables -t nat -A POSTROUTING -j MASQUERADE
Das ist aber eben gerade Bullshit weil dann die Quelladresse über den Tunnel auf die des Tunnels umgeschrieben wird !!!
Anfragen kommen dann zwar am vServer an mit,
, dann ist aber auch wieder Schluss.
iptables -t nat -A POSTROUTING -o ens192 -j MASQUERADE
Dann hast du in der Firewall der UTM den Traffic aus dem Internet über den Tunnel eingehend nicht erlaubt !
Hier muss es eine eingehende Regel geben, die so aussieht
Quelle = 0.0.0.0/0 bzw. any
Quellport = any
Quellinterface = tun1
Ziel = 172.16.20.5/32
Zielport = 443/TCP
ZielInterface = <Interface des Servers>
Zitat von @aqui:
Du musst auch darauf achten das der NginxRP im vServer via VPN Tunnel die Tunnel IP als Absender verwendet (proxy_bind <tun0_ip>):
Denn so bekommen diese Frames die Richtung Server gehen eine Tunnel Absender IP damit die Rückroute am Zielserver 172.16.20.5 auch wieder in den Tunnel geht ansonsten droht dir wieder asymetrisches Routing und Session Abbruch.
Zumindestens für den Proxy Traffic erspart dir das auch das NAT.
Du musst auch darauf achten das der NginxRP im vServer via VPN Tunnel die Tunnel IP als Absender verwendet (proxy_bind <tun0_ip>):
server {
listen 8080;
listen [::]:8080;
location / {
proxy_bind <tun0_ip>;
proxy_pass http://172.16.20.5:80;
include proxy_params;
}
}
Zumindestens für den Proxy Traffic erspart dir das auch das NAT.
Das will er ja doch aber gerade nicht! Er will die externe IP des Clients direkt am Server anliegen haben.
Das Default GW hat er für den Server schon per Policy Route auf den Tunnel gelegt, also ist asynchrones Routing dann ausgeschlossen.
Ich denke deshalb das die Firewall der UTM den Internet Traffic mit den öffentlichen IPs eingehend über tun1 blockiert.
Das sollte er ja an seinen Logs sehen, aber das ist ja Montag mal wieder zuuuu leicht da einfach mal rein zu schauen.
tatsächlich die Puplic IP vom Client.
Der Arme "pupst" doch gar nicht!!! https://dict.tu-chemnitz.de/dings.cgi?service=deen&opterrors=0&o ...
Glückwunsch das es rennt!! 👏 👍
Bleibt ja zur Feier des Tages dann nur noch...
Wie kann ich einen Beitrag als gelöst markieren?