Ich suche nach einem vollständigen Beispiel, wie dies mit nftables funktioniert. Es sollte ein DHCP-Client auf der Upstream-Schnittstelle sein, ein 192.168.0.0/24-LAN auf der anderen Schnittstelle haben und auch als Firewall fungieren.
Extrapunkte gibt es für das Öffnen eines SSH-Ports auf der Upstream-Schnittstelle und die Weiterleitung des Datenverkehrs über Port 80 an einen anderen Server im LAN.
Das nftables-Wiki lässt einige Fragen unbeantwortet. Zum Beispiel dieAbschnitt über Maskierungbeschreibt nicht, wie die Maskierungsregel an die eine oder andere Schnittstelle angehängt wird.
Antwort1
Ich verwende Folgendes und gehe davon aus, dass lan0
es mit Ihrem internen Netzwerk und wan0
Ihrem ISP verbunden ist.
Ich bin mir nicht sicher, was Sie mit „DHCP-Client auf der Upstream-Schnittstelle“ meinen, da dies mit einem DHCP-Client und nicht mit nftables erfolgt. Das folgende Setup schränkt den ausgehenden Datenverkehr nicht ein, sodass die DHCP-Anforderung durchgeht.
#!/usr/bin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
# allow established/related connections
ct state {established, related} accept
# early drop of invalid connections
ct state invalid drop
# allow from loopback
iifname lo accept
# Allow from internal network
iifname lan0 accept
# allow icmp
ip protocol icmp accept
# allow ssh
tcp dport 22 accept comment "SSH in"
reject
}
chain forward {
type filter hook forward priority 0;
# Allow outgoing via wan0
oifname wan0 accept
# Allow incoming on wan0 for related & established connections
iifname wan0 ct state related, established accept
# Drop any other incoming traffic on wan0
iifname wan0 drop
}
chain output {
type filter hook output priority 0;
}
}
table ip nat {
chain prerouting {
type nat hook prerouting priority 0;
# Forward traffic from wan0 to a LAN server
iifname wan0 tcp dport 80 dnat 192.168.0.8 comment "Port forwarding to web server"
}
chain postrouting {
type nat hook postrouting priority 0;
# Masquerade outgoing traffic
oifname wan0 masquerade
}
}
Antwort2
Masquerading ist ein Sonderfall von SNAT. Wenn Sie den Datenverkehr an die Ausgabeschnittstelle oder Ausgabeadresse (Quelladresse für Ihre internen IPs) anhängen möchten, verwenden Sie SNAT