u08154711
Goto Top

Firewall Regeln für Travelrouter

Hallo,

ich habe mir auf einem Raspi mit RaspAP einen Travelrouter eingerichtet. Leider kommt dieses Projekt ohne Firewall Regeln.

Schnittstellen sind:
-eth0, genutzt wenn er mal in meine Heimnetzwerk hängen solle oder ich per LAN Kabel auf das RaspAP GUI gehe.
- wlan0, eingebaute WIFI Schnittstelle des Raspi, verbindet sich mit Hotel-WLAN
- wifi1, Hotspot auf den sich meine Geräte verbinden und und dann über wlan0 ins Internet gehen.

Wie sichere ich das am besten mit Firewall Regeln ab?

Danke

Content-ID: 672284

Url: https://administrator.de/forum/firewall-regeln-fuer-travelrouter-672284.html

Ausgedruckt am: 08.04.2025 um 08:04 Uhr

Pjordorf
Pjordorf 02.04.2025 um 03:11:25 Uhr
Goto Top
Hallo,

Zitat von @U08154711:
Wie sichere ich das am besten mit Firewall Regeln ab?
Schau mal hier https://docs.raspap.com/firewall/

Gruss,
Peter
U08154711
U08154711 02.04.2025 um 05:17:47 Uhr
Goto Top
Danke, kenne ich, aber wie Du sicher gesehen hast, ist dass nur möglich, wenn man „bezahlt“…
Lochkartenstanzer
Lochkartenstanzer 02.04.2025 aktualisiert um 05:38:27 Uhr
Goto Top
Moin,

traust Du Deinen eigenen Geräten?

Wenn ja, reicht das NAT für ausgehende Verbindungen bei ipv4 und "nur ausgehende Verbindungen erlauben" bei V6.

Und der Pi selbst sollte auf dem "bösen" Interface gar keine Verbindungen annehmen

lks
U08154711
U08154711 02.04.2025 um 07:35:57 Uhr
Goto Top
Meine Geräte sind doch völlig irrelevant und unbedenklich, es geht um die offenen Schnittstellen
SlainteMhath
SlainteMhath 02.04.2025 um 08:02:41 Uhr
Goto Top
Moin,

es geht um die offenen Schnittstellen
tl:dr:

wifi0 incoming reject

Einzustellen per npfilter oder was deine Distri eben bereitsstellt für Firewall

lg,
Slainte
DivideByZero
DivideByZero 02.04.2025 um 08:25:13 Uhr
Goto Top
Zitat von @U08154711:

Danke, kenne ich, aber wie Du sicher gesehen hast, ist dass nur möglich, wenn man „bezahlt“…

So ist es. Wo ist das Problem? Wenn es Dir zu teuer ist, nutze ein anderes System oder fertige Travel Router.
U08154711
U08154711 02.04.2025 aktualisiert um 08:47:05 Uhr
Goto Top
Ich hab mal ein bisschen recherchiert und ein Skript gebastelt.

Können die Profis mal bitte schauen, ob das so passt?

#!/bin/bash

# Flush existing rules
iptables -F
iptables -t nat -F
iptables -X

# Default policy: Drop all incoming and forwarding traffic
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Allow loopback interface
iptables -A INPUT -i lo -j ACCEPT

# Allow established and related connections
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# eth0: Admin interface - Allow SSH and RaspAP Web GUI
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

# wlan1: Hotspot interface - Allow internal communication
iptables -A INPUT -i wlan1 -j ACCEPT
iptables -A FORWARD -i wlan1 -o wlan0 -m conntrack --ctstate NEW -j ACCEPT

# wlan0: WAN interface - Allow outgoing, block incoming
iptables -A INPUT -i wlan0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o wlan1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# Enable NAT (for hotspot internet access)
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

# Drop invalid packets
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

# Log dropped packets (optional)
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables dropped: " --log-level 7  

# Save the rules
iptables-save > /etc/iptables/rules.v4
U08154711
U08154711 02.04.2025 um 08:48:28 Uhr
Goto Top
Zitat von @DivideByZero:

Zitat von @U08154711:

Danke, kenne ich, aber wie Du sicher gesehen hast, ist dass nur möglich, wenn man „bezahlt“…

So ist es. Wo ist das Problem? Wenn es Dir zu teuer ist, nutze ein anderes System oder fertige Travel Router.

Auf die Idee wäre ich nie gekommen. Diskussionen hierzu sind überflüsig. Wie Deine Antwort.
kidWRLD
kidWRLD 02.04.2025 aktualisiert um 08:50:20 Uhr
Goto Top
Das Script scheint zu passen und "sollte" funktionieren, jedoch musst du noch IP Forwarding aktivieren, falls ich mich nicht komplett täusche

echo 1 > /proc/sys/net/ipv4/ip_forward
U08154711
U08154711 02.04.2025 um 08:50:52 Uhr
Goto Top
Zitat von @kidWRLD:

Das Script scheint zu passen und "sollte" funktionieren, jedoch musst du noch IP Forwarding aktivieren, falls ich mich nicht komplett täusche

echo 1 > /proc/sys/net/ipv4/ip_forward

Ja, muss man, hatte ich vergessen hinzuzufügen.
DivideByZero
DivideByZero 02.04.2025 um 09:21:41 Uhr
Goto Top
Auf die Idee wäre ich nie gekommen. Diskussionen hierzu sind überflüsig. Wie Deine Antwort.
Eher wie Dein Kommentar und Dein Vorgehen. Es gibt eine Lösung und Menschen, die dafür arbeiten. Die möchten bezahlt werden. Das ist absolut nachvollziehbar.

Oder eben ein fertiger Router, das war ernst gemeint, die Geräte z.B. von Gl.iNet sind klein, kompakt, ready und basieren auf openWRT.

Du möchtest das nicht? Dann bastel selbst.

Also wo ist das Problem?
U08154711
U08154711 02.04.2025 um 09:30:19 Uhr
Goto Top
Kein Problem. Gli hatte ich schon. Auch gut.
Nur hilft Dein Kommentar halt bei der Fragestellung 0 weiter.
Damit haben wir es jetzt auch.
aqui
aqui 02.04.2025 um 09:43:46 Uhr
Goto Top
Das ist in sofern uralt und depricated weil so gut wie alle Debian basierten Distros nur noch die moderne nftables Firewall benutzen. Du solltest dann also tunlichst auch diese benutzen.
Guckst du hier:
IKEv2 VPN Server für Windows und Apple Clients mit Raspberry Pi
U08154711
U08154711 02.04.2025 um 09:59:20 Uhr
Goto Top
So?
#!/bin/bash

# Configurable variables
ALLOWED_IP="192.168.1.100"  # Replace with your admin IP  

# Enable IP forwarding
sysctl -w net.ipv4.ip_forward=1

# Flush existing nftables rules
nft flush ruleset

# Create a new nftables ruleset
nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }
nft add chain inet filter forward { type filter hook forward priority 0 \; policy drop \; }
nft add chain inet filter output { type filter hook output priority 0 \; policy accept \; }

# Allow loopback interface
nft add rule inet filter input iif lo accept

# Allow established and related connections
nft add rule inet filter input ct state established,related accept

# Admin Interface (eth0): Allow SSH and RaspAP Web GUI from specific IP
nft add rule inet filter input iif eth0 ip saddr $ALLOWED_IP tcp dport {22, 80, 443} accept

# Hotspot Interface (wlan1): Allow internal communication
nft add rule inet filter input iif wlan1 accept
nft add rule inet filter forward iif wlan1 oif wlan0 ct state new accept

# Allow DNS and DHCP from hotspot (RaspAP services)
nft add rule inet filter input iif wlan1 udp dport {53, 67} accept

# WAN Interface (wlan0): Allow outgoing, block incoming
nft add rule inet filter input iif wlan0 ct state established,related accept
nft add rule inet filter forward iif wlan0 oif wlan1 ct state established,related accept

# Enable NAT for internet access through the hotspot
nft add table ip nat
nft add chain ip nat postrouting { type nat hook postrouting priority 100 \; }
nft add rule ip nat postrouting oif wlan0 masquerade

# Drop invalid packets
nft add rule inet filter input ct state invalid drop

# Log dropped packets (optional)
nft add rule inet filter input limit rate 5/min log prefix "nftables dropped: " level debug  

# Save the rules to a persistent file
nft list ruleset > /etc/nftables.conf

# Print success message
echo "Firewall rules and IP forwarding applied successfully using nftables."  
Lochkartenstanzer
Lochkartenstanzer 02.04.2025 um 10:27:33 Uhr
Goto Top
Zitat von @U08154711:

Meine Geräte sind doch völlig irrelevant und unbedenklich, es geht um die offenen Schnittstellen

Sorry, dann habe ich Dich missverstanden.

Ich dachte Du willst wissen, wie Du die Regeln generell einstellen sollst. Aus der Frage war, zumindest mir, nicht ersichtlich, daß Du ein Skript haben willst, das alles fertig einstellt.

lks

PS:Gutgemeinter Ratschlag: Lies Dir die Dokumentation zu nftables durch und schau, daß Du die Befehle selber herazsfindest. Dann lernst Du mehr, als die fertigen Skripte von hier einzuspielen und zu hoffen, daß die das machen, was Du wünschst und nicht das, was der Ersteller gedacht hat, was Du Dir wünschen könntest.
aqui
aqui 02.04.2025 aktualisiert um 10:53:43 Uhr
Goto Top
So?
Nope, die Konfig setzt du logischerweise en bloc wie sie oben gezeigt ist in die /etc/nftables.conf damit sie beim Booten automatisch geladen wird.
Stelle sicher mit systemctl enable nftables das der Firewalldienst automatisch gestartet wird.
Ein systemctl status nftables zeigt dir das an und dein aktives Ruleset zeigt dir nft list ruleset
Die nftables.conf Datei ist mehr oder minder schon selbsterklärend von den Regeln.
Das nftables Wiki hat auch ein paar einfache Router Beispiele mit denen man das Ruleset nachvollziehen kann:
https://wiki.nftables.org/wiki-nftables/index.php/Simple_ruleset_for_a_h ...
Penny.Cilin
Penny.Cilin 02.04.2025 um 11:34:39 Uhr
Goto Top
U08154711 02.04.2025 um 05:17:47 Uhr

Danke, kenne ich, aber wie Du sicher gesehen hast, ist dass nur möglich, wenn man „bezahlt“…

Wo steht in der Dokumentation etwas von "bezahlen"?

Gruss Penny.
U08154711
U08154711 02.04.2025 um 13:48:44 Uhr
Goto Top
Genau lesen: Firewall only for Insiders... Insiders...kostet...
U08154711
U08154711 02.04.2025 aktualisiert um 18:08:41 Uhr
Goto Top
Zitat von @aqui:

So?
Nope, die Konfig setzt du logischerweise en bloc wie sie oben gezeigt ist in die /etc/nftables.conf damit sie beim Booten automatisch geladen wird.
Stelle sicher mit systemctl enable nftables das der Firewalldienst automatisch gestartet wird.
Ein systemctl status nftables zeigt dir das an und dein aktives Ruleset zeigt dir nft list ruleset
Die nftables.conf Datei ist mehr oder minder schon selbsterklärend von den Regeln.
Das nftables Wiki hat auch ein paar einfache Router Beispiele mit denen man das Ruleset nachvollziehen kann:
https://wiki.nftables.org/wiki-nftables/index.php/Simple_ruleset_for_a_h ...

Wäre das jetzt so richtig, oder fehlt noch was wichtiges, was grundsätzlich rein gehört:
table inet filter {
        chain input {
                type filter hook input priority filter; policy drop;
                iif "lo" accept  
                ct state established,related accept
                iif "eth0" tcp dport { 22, 80, 443 } accept  
                iif "wlan1" accept  
                iif "wlan1" udp dport { 53, 67 } accept  
                iif "wlan0" ct state established,related accept  
                ct state invalid drop
                limit rate 5/minute log prefix "nftables dropped: " level debug  
        }

        chain forward {
                type filter hook forward priority filter; policy drop;
                iif "wlan1" oif "wlan0" ct state new accept  
                iif "wlan0" oif "wlan1" ct state established,related accept  
        }

        chain output {
                type filter hook output priority filter; policy accept;
        }
}
table ip nat {
        chain postrouting {
                type nat hook postrouting priority srcnat; policy accept;
                oif "wlan0" masquerade  
        }
}

Danke
aqui
aqui 02.04.2025 aktualisiert um 18:31:38 Uhr
Goto Top
Wenn du die 2 allerersten Zeilen
#!/usr/sbin/nft -f
flush ruleset
noch hinzufügst wäre es fast perfekt! face-wink
https://wiki.gentoo.org/wiki/Nftables/Examples

Etwas logischer Unsinn ist noch drin denn du hast die Grundregel first match wins vergessen.
iif "wlan1" accept
iif "wlan1" udp dport { 53, 67 } accept

Ist deswegen unsinnig weil du zuerst generell jeglichen Traffic an wlan 1erlaubst, danach dann aber auf Ports UDP 53 und 67 einschränkst was dann sinnfrei ist. Man kann nicht erst alles erlauben und es danach dann einschränken. Bzw. nach dem ersten Match greift der 2te natürlich nicht mehr.

Mal ganz abgesehen davon das DNS bekanntlich UDP und TCP 53 verwenden und du mit der Regel eh scheiterst.
Der Rest passt soweit...
U08154711
U08154711 02.04.2025 um 18:23:57 Uhr
Goto Top
Zitat von @aqui:

Wenn du die 2 allerersten Zeilen
#!/usr/sbin/nft -f
flush ruleset
noch hinzufügst wäre es perfekt! face-wink
https://wiki.gentoo.org/wiki/Nftables/Examples

Wenn es für den großen Meister perfekt ist, muss es wohl so seinface-smile

Hab das ganze mal nach dem Reboot mit nft list ruleset geprüft, da kommt dann aber was ganz anderes;

# Warning: table ip filter is managed by iptables-nft, do not touch!
table ip filter {
        chain INPUT {
                type filter hook input priority filter; policy accept;
        }

        chain FORWARD {
                type filter hook forward priority filter; policy accept;
                iifname "tun0" oifname "wlan1" ct state related,established counter packets 0 bytes 0 accept  
                iifname "wlan1" oifname "tun0" counter packets 0 bytes 0 accept  
        }

        chain OUTPUT {
                type filter hook output priority filter; policy accept;
        }
}
# Warning: table ip nat is managed by iptables-nft, do not touch!
table ip nat {
        chain PREROUTING {
                type nat hook prerouting priority dstnat; policy accept;
        }

        chain INPUT {
                type nat hook input priority 100; policy accept;
        }

        chain OUTPUT {
                type nat hook output priority -100; policy accept;
        }

        chain POSTROUTING {
                type nat hook postrouting priority srcnat; policy accept;
                counter packets 62 bytes 5889 masquerade
                ip saddr 192.168.50.0/24 ip daddr != 192.168.50.0/24 counter packets 0 bytes 0 masquerade
                oifname "tun0" counter packets 0 bytes 0 masquerade  
        }
}
aqui
aqui 02.04.2025 um 18:30:15 Uhr
Goto Top
da kommt dann aber was ganz anderes;
Nöö, ist doch alles genau so wie du es eingetragen hast!!
Das was da mehr drin ist sind die Default Settings die dir natürlich mit angezeigt werden. face-wink
U08154711
U08154711 02.04.2025 um 18:35:40 Uhr
Goto Top
Zitat von @aqui:
Nöö, ist doch alles genau so wie du es eingetragen hast!!

Das übersteigt mein Verständnis. Da steht für mich nix mehr von dem, was ich eingetragen habe, nur als Beispiel die chain Input... Da ist nix mehr.

Oder ich verstehe es nicht.
aqui
aqui 02.04.2025 aktualisiert um 18:44:17 Uhr
Goto Top
Beispiel die chain Input... Da ist nix mehr.
Ein systemctl restart nftables hast du natürlich ausgeführt damit die .conf Datei neu eingelesen wird, oder??
Ansonsten hast du ggf. einen Syntax Fehler in der Konf Datei gemacht. 🤔
U08154711
U08154711 02.04.2025 um 18:47:00 Uhr
Goto Top
Zitat von @aqui:

Beispiel die chain Input... Da ist nix mehr.
Ein systemctl restart nftables hast du natürlich ausgeführt damit die .conf Datei neu eingelesen wird, oder??
Ansonsten hast du ggf. einen Syntax Fehler in der Konf Datei gemacht. 🤔

Ja systemctl restart nftables, systemctl enable nftables, reboot, alles.
aqui
aqui 02.04.2025 aktualisiert um 18:56:33 Uhr
Goto Top
Dashalb ja der Hinweis auf die falsche (iptables) Syntax am Anfang!! face-sad
table inet filter { ...
Wäre hier richtig!
Wenn, dann solltest du auch schon mal das lesen was man dir schreibt! Beispiel. 🧐
Es wäre auch sinnvoller strukturiert mit Variablen für die Interfaces zu arbeiten, das reduziert die Gefahr von Fehlern.
U08154711
U08154711 02.04.2025, aktualisiert am 03.04.2025 um 10:59:00 Uhr
Goto Top
Sorry, Du hast nicht geschrieben, dass da ein Fehler ist. Du hast geschrieben, da könnte ggfs. einer sein.
Und in meinem Beispiel vor dem reboot steht table inet filter...
Was soll jetzt also korrekt sein?

Ich bin raus... Sorry
U08154711
U08154711 03.04.2025 um 11:27:32 Uhr
Goto Top
Leider nicht klar, was jetzt genau der Fehler sein soll
aqui
aqui 03.04.2025 aktualisiert um 13:56:59 Uhr
Goto Top
Sieh dir mal deinen Konfig File zu dem funktionierenden Beispiel an dann springt einem das förmlich ins Auge:

Deine Version:

#!/usr/sbin/nft -f
flush ruleset

table ip filter {
chain INPUT { ...


Version wie es richtig sein sollte:

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
chain INPUT { ...


Und auch mit einer dicken Warnmeldung: "Warning: table ip filter is managed by iptables-nft, do not touch!"
Finde den Fehler! face-wink
U08154711
U08154711 03.04.2025 um 14:09:47 Uhr
Goto Top
Nein, meine Version ist:

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
        chain input {
                type filter hook input priority filter; policy drop;
                iif "lo" accept    
                ct state established,related accept
                iif "eth0" tcp dport { 22, 80, 443 } accept    
                iif "wlan1" accept    
                iif "wlan1" udp dport { 53, 67 } accept    
                iif "wlan0" ct state established,related accept    
                ct state invalid drop
                limit rate 5/minute log prefix "nftables dropped: " level debug    
        }

        chain forward {
                type filter hook forward priority filter; policy drop;
                iif "wlan1" oif "wlan0" ct state new accept    
                iif "wlan0" oif "wlan1" ct state established,related accept    
        }

        chain output {
                type filter hook output priority filter; policy accept;
        }
}
table ip nat {
        chain postrouting {
                type nat hook postrouting priority srcnat; policy accept;
                oif "wlan0" masquerade    
        }
}

Siehe oben
U08154711
U08154711 03.04.2025 um 14:10:40 Uhr
Goto Top
Nach einem Reboot, wird das nicht übernommen, und es steht nur noch das 2. Beispiel da. Bitte auch selbst lesen, was man schreibtface-smile
aqui
aqui 03.04.2025 um 20:05:35 Uhr
Goto Top
Gut, dann musst du suchen was das verhindert. Generell ist das eine übliche FW Konfig und rennt natürlich fehlerfrei. Dein Regelwerk eben mal in einen RasPi und auch Debian VM gepastet und funktioniert wie es soll.
Vermutung: Du hast iptables und nftables zusammen laufen und die behindern sich gegenseitig. Es kann nur einen geben!!
U08154711
U08154711 03.04.2025 um 20:30:24 Uhr
Goto Top
Danke, das scheint es zu sein. RaspAp bringt anscheinend iptables mit, wenn es auch keine Regeln dazu installiert.
Dann nehm ich halt wie geplant iptables.
aqui
aqui 04.04.2025 aktualisiert um 08:36:21 Uhr
Goto Top
Ein systemctl disable iptables sollte es dann richten. Dann musst du dich auch nicht an die veralteten iptables klammern. face-wink