Portál AbcLinuxu, 1. listopadu 2025 18:59
-P INPUT DROP -P FORWARD DROP -P OUTPUT ACCEPT -A INPUT -d fe80::/64 -p udp -m udp --dport 546 -m state --state NEW -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -s 2a02:.../64 -i eth1 -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p icmpv6 -j ACCEPT -A INPUT -i br0 -j ACCEPT -A INPUT -i eth0 -j ACCEPT -A INPUT -i lo -j ACCEPT -A FORWARD -m state --state INVALID -j DROP -A FORWARD -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
Řešení dotazu:
Firewall na Linuxu se jmenuje nftables a ovládá se příkazem nft. Konfigurace je v /etc/nftables.conf.
Pokud nějaký návod používá jakési příkazy a technologie z 0. let 21. století, ve 20. letech 21. století je vhodné takový návod ignorovat a najít místo něj nějaký aktuální.
Logická chyba je (tipuju) v tom, že spojení se do stavů related ani established nemá jak dostat. Alespoň z jednoho směru je potřeba bezpodmínečně přijmout alespoň první paket.
Někdo si s tím pečlivě hraje a určuje přesně, kudy a kam smí projít prví TCP SYN a první TCP DCERA, zatímco já na to většinou seru a nastavím to „tak nějak, aby to fungovalo“. Konfigurace pro forward vypadá u mě asi takto (po vynechání pár extra kdesicosů):
chain forward {
type filter hook forward priority filter; policy accept;
ip6 nexthdr esp meta mark set meta mark | 0x00000101 # IPSec
ip protocol esp meta mark set meta mark | 0x00000101 # IPSec
meta mark & 0x00000101 == 0x00000101 accept # IPSec
ct state { established, related } accept
ct state invalid drop
iifgroup 99 accept # důvěryhodná rozhraní (802.1x + WPA3/MACsec)
iifgroup 72 jump outer_spoof # vnější (v nějakém smyslu) rozhraní
oifgroup 72 jump outer_reject
oifgroup 72 tcp flags syn tcp option maxseg size set rt mtu
tcp dport 22 accept
ip6 nexthdr ipv6-icmp accept
ip protocol icmp accept
reject
}
chain outer_spoof {
ip6 saddr xxxx:yyyy:zzzz::/48 drop
ip saddr 10.x.y.z/16 drop # nesmysl z roku 1975
return
}
chain outer_reject {
ip6 daddr xxxx:yyyy:zzzz::/48 reject with icmpv6 port-unreachable
ip daddr 10.x.y.z/16 drop # nesmysl z roku 1975
return
}
Samozřejmě to není v žádném smyslu ideální nastavení; podstatná část je jakýsi kompromis, který se vzdává paranoidního schovávání klientů ve vnitřní síti ve prospěch rozumně rychlého odmítnutí spojení na neplatné adresy (což potřebuju mít funkční) atd.
-P INPUT DROP -P FORWARD DROP -P OUTPUT ACCEPT -A INPUT -d fe80::/64 -p udp -m udp --dport 546 -m state --state NEW -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -s 2a02:.../64 -i eth1 -p tcp -m tcp --dport 22009 -j ACCEPT -A INPUT -p icmpv6 -j ACCEPT -A INPUT -i br0 -j ACCEPT -A INPUT -i eth0 -j ACCEPT -A INPUT -i lo -j ACCEPT -A FORWARD -m state --state INVALID -j DROP -A FORWARD -i br0 -j ACCEPT -A FORWARD -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPTJen pro srovnání konfigurace IPv4 firewallu vedle vypadá takto:
-P PREROUTING ACCEPT
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-A PREROUTING -d {WanIP} -i eth1 -p tcp -m tcp --dport 80 -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 172.18.0.0/24 -i eth1 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -d {WanIP} -i eth1 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -d {WanIP} -i eth1 -p udp -m udp --dport 1900 -j DROP
-A INPUT -i eth1 -p udp -m udp --dport 68 -j ACCEPT
-A INPUT -d {WanIP} -i eth1 -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -i eth1 -p 2 -j ACCEPT
-A INPUT -i br0 -j ACCEPT
-A INPUT -i eth0 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -p udp -m udp --sport 1701 -j ACCEPT
-A FORWARD -p udp -m udp --dport 1701 -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 1723 -j ACCEPT
-A FORWARD -p tcp -m tcp --sport 1723 -j ACCEPT
-A FORWARD -p 47 -j ACCEPT
-A FORWARD -d 224.0.0.0/4 -i eth1 -p udp -m udp -j ACCEPT
-A FORWARD -d 224.0.0.0/4 -i eth1 -p 114 -j ACCEPT
-A FORWARD -m state --state INVALID -j DROP
-A FORWARD -i br0 -j ACCEPT
-A FORWARD -i eth1 -o br0 -p udp -m udp --dport 500 -j ACCEPT
-A FORWARD -d 224.0.0.0/4 -i eth1 -p udp -m udp -j ACCEPT
-A FORWARD -i eth1 -o br0 -p esp -j ACCEPT
-A FORWARD -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -A FORWARD -m state --state INVALID -j DROPTedy na forwardu zůstanou jen pravidla:
ip6tables -A FORWARD -i br0 -j ACCEPT ip6tables -A FORWARD -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPTZvláštní.
cat ./.config | grep IPV6 CONFIG_IPV6=y CONFIG_RTL_IPV6READYLOGO=y # CONFIG_RTL_IPV6READYLOGO_HOST is not set # CONFIG_IPV6_PRIVACY is not set # CONFIG_IPV6_ROUTER_PREF is not set # CONFIG_IPV6_REDIRECT_NO_HEADER is not set CONFIG_IPV6_OPTIMISTIC_DAD=y # CONFIG_IPV6_MIP6 is not set CONFIG_IPV6_SIT=y CONFIG_IPV6_SIT_6RD=y CONFIG_IPV6_NDISC_NODETYPE=y CONFIG_IPV6_TUNNEL=y CONFIG_IPV6_GRE=y CONFIG_IPV6_MULTIPLE_TABLES=y # CONFIG_IPV6_SUBTREES is not set CONFIG_IPV6_MROUTE=y # CONFIG_IPV6_MROUTE_MULTIPLE_TABLES is not set # CONFIG_IPV6_PIMSM_V2 is not set CONFIG_IPV6_DNSV6_MODE_SUPPORT=y CONFIG_IPV6_FORD_RA_PREFIX_SUPPORT=y CONFIG_IPV6_RA_RDNSS_SUPPORT=y CONFIG_IPV6_RA_DNSSL_SUPPORT=y # CONFIG_RTL_FAST_IPV6_DEBUG is not set CONFIG_RTL_FAST_IPV6=y CONFIG_NF_DEFRAG_IPV6=y CONFIG_NF_CONNTRACK_IPV6=y # CONFIG_IP6_NF_MATCH_IPV6HEADER is not set # CONFIG_NF_NAT_IPV6 is not set CONFIG_RTL_HARDWARE_IPV6_SUPPORT=y
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.