Raspi als OpenVPN Gateway mit UFW Firewall

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    auf meinem Raspi läuft raspbian-stretch-lite mit OpenVPN und der UFW- Firewall.

    Der Raspi soll als VPN-Gateway für verschieden Rechner im Netzwerk dienen. (192.168.1.x)

    Die Installation funktioniert, d.h. der gewünschte VPN-Tunnel wird aufgebaut und die PCs werden über das GW und den aufgebauten Tunnel in's Internet geleitet.

    Soweit so gut.

    Das Problem ist der Killswitch, um zu verhindern das bei Störung des Tunnels oder bei fehlendem OpenVPN Traffic von den Rechnern in's Netz gelangt.

    Anleitungen im Internet gibt es ja reichlich, aber alle getesteten funktionieren NUR auf dem Raspi selbst. (Tunnel weg -> kein Internetzugriff) - ok

    ABER die PCs im Netzwerk kommen bei fehlendem Tunnel dann wieder ungeschützt in's Netz, als ob die UFW Firewallrules überhaupt nicht greifen.

    Script zum Setzen der Firewallregeln:

    #!/bin/bash

    #UFW-Firewall-Rules

    sudo ufw reset

    sudo ufw default reject outgoing

    sudo ufw allow ssh

    sudo ufw allow out 443/tcp

    sudo ufw allow out 1194/udp

    sudo ufw allow out 53/udp

    sudo ufw allow out on tun0

    sudo ufw enable

    in der /etc/ufw/before.rules wurden noch folgende Einträge nachträglich gesetzt:


    #-----------------------------------------------------------

    #START OPENVPN RULES

    #NAT Tablbel rules

    *nat
    :POSTROUTING ACCEPT [0:0]
    #Allow traffic from OpenVPN client to eth0
    -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
    -A POSTROUTING -s 192.168.0.0/16 -o tun0 -j MASQUERADE
    COMMIT
    #-----------------------------------------------------------

    So wie es für mich ausieht wird der Verkehr bei fehlendem OpenVPN oder fehlendem Tunnel einfach direkt durchgeschoben ohne das die Firewall in Eingriff kommt, obwohl hier ja eigentlich aller ausgehender Verkehr untersagt wird.

    Eventuell habe ich aber auch nur einen falschen gedanklichen Ansatzt.

    Wenn hier jemand eine Idee hat woran diese Bypassfunktion liegen könnte und warum der Killswitch nicht für die PCs im Netzt greift, würde ich mich über jeden Kommentar freuen.

  • Die Installation funktioniert, d.h. der gewünschte VPN-Tunnel wird aufgebaut und die PCs werden über das GW und den aufgebauten Tunnel in's Internet geleitet.

    Soweit so gut.

    Das Problem ist der Killswitch, um zu verhindern das bei Störung des Tunnels oder bei fehlendem OpenVPN Traffic von den Rechnern in's Netz gelangt.

    So wie es für mich ausieht wird der Verkehr bei fehlendem OpenVPN oder fehlendem Tunnel einfach direkt durchgeschoben ohne das die Firewall in Eingriff kommt, obwohl hier ja eigentlich aller ausgehender Verkehr untersagt wird.

    Wie ist das "default gateway" der PCs im Netz, wenn der VPN-Tunnel nicht aufgebaut ist bzw. nicht funktioniert?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • ... als Gateway ist die IP des Raspis gesetzt.

    Ok, dann poste mal von einem der PCs, die Ausgaben von:

    Code
    route -n
    ip r

    (oder gleichwertig). Im Raspi könntest Du (mit iptables) den FORWARD-Traffic der nicht für das Subnetz des Raspi bestimmt ist und als output-Interface nicht das tun-Interface hat, blocken.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Hi,

    in der Anlage die Ausgaben von route -n und ip r auf dem Raspi, bei aktivem OpenVPN und bei gestoppten OpenVPN incl. der Ausgabe von route print auf dem Windows Client in beiden Fällen, mit der auf dem Windowsclient ermittelten IP.

    Im Testfall hat das Raspi GW die IP 192.168.1.124

    der Internetrouter die IP 192.168.1.1

    und der Windowsclient die IP 192.168.1.109 mit GW 192.168.1.124 und DNS 8.8.8.8

  • Im Testfall hat das Raspi GW die IP 192.168.1.124

    der Internetrouter die IP 192.168.1.1

    und der Windowsclient die IP 192.168.1.109 mit GW 192.168.1.124 und DNS 8.8.8.8

    Teste mal mit:

    Code
    sudo iptables -I FORWARD 1 -p tcp -o eth0 ! -d 192.168.1.0/24 -j REJECT
    sudo iptables -I FORWARD 2 -p udp -o eth0 ! -d 192.168.1.0/24 -j REJECT

    auf deinem Raspi.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Danke funktioniert. Klasse.

    Hier aber für mich noch einmal zum Verständnis.

    Ich war eigentlich der Meinung das der Spruch in meiner UFW Firewall -> sudo ufw default reject outgoing

    das eigentlich für alle Netze schon blocken sollte. Oder habe ich hier ein Verständnisproblem und die UFW wirkt nur auf dem Raspi selbst und nicht für den darüber geleiteten Verkehr? (kann aber eigentlich auch nicht sein, da beim Vorhandensein von tun0 die ufw-Regel ja greift)

    Ist hier UFW evt. etwas buggy?

    Könnte man einen solchen Befehl, wie jetzt direkt in die ip-Tables geschrieben, auch über UFW absetzen, so dass man nur eine Stelle hat (Script mit sudo ufw.... Befehlen) um Firewallregeln zu definieren?

  • Könnte man einen solchen Befehl, wie jetzt direkt in die ip-Tables geschrieben, auch über UFW absetzen, so dass man nur eine Stelle hat (Script mit sudo ufw.... Befehlen) um Firewallregeln zu definieren?

    Evtl. ja, aber da ich mich mit UFW nicht auskenne, kann ich dir betr. UFW nicht weiter helfen.

    EDIT:

    Bitte beachte, dass die eingegebenen iptables-Regeln nicht persistent sind. D. h., nach einem reboot sind diese weg.

    Ich benutze auf meinen PIs iptables-persistent:

    Zitat

    Description: boot-time loader for netfilter rules, iptables plugin

    netfilter-persistent is a loader for netfilter configuration using a

    plugin-based architecture.

    .

    This package contains the iptables and ip6tables plugins.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!