Portál AbcLinuxu, 4. května 2025 11:29
-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.