Portál AbcLinuxu, 15. července 2025 15:49
Dobrý den,
snažím se na serveru s ip6tables v1.4.9 povolit odchozí dns port, tak abych se mohl připojit na veřejný dns server. Jde o funkčnost dig a bind pod ipv6. Nyní je v ip6tables povolená jen icmp.
Zkouším zadávat:
ip6tables -A OUTPUT -p tcp --dport 53 -j ACCEPT
ip6tables -A OUTPUT -p udp --dport 53 -j ACCEPT
ale bez odezvy, otestoval jsem ip6tables -F && ip6tables -X ,tudíž bez pravidel vše funguje, jak to ale zařídit s pravidly? Musím uznat, že se v iptables moc nevyznám a neovládám jej, poradíte?
Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 DROP all * * ::/0 ::/0 rt type:0 11 880 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmp !type 128 0 0 ACCEPT all lo * ::/0 ::/0 24 2010 ACCEPT all br0 * ::/0 ::/0 0 0 ACCEPT all * * fe80::/10 ::/0 0 0 ACCEPT all * * ff00::/8 ::/0 0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmp type 128 0 0 ACCEPT udp * * ::/0 ::/0 udp dpts:33434:33534 194 103K DROP all * * ::/0 ::/0 Chain FORWARD (policy ACCEPT 3 packets, 196 bytes) pkts bytes target prot opt in out source destination 0 0 DROP all * * ::/0 ::/0 rt type:0 0 0 ACCEPT all br0 br0 ::/0 ::/0 0 0 ACCEPT all * * ff00::/8 ::/0 12 772 ACCEPT icmpv6 * * ::/0 ::/0 0 0 ACCEPT all * * fe80::/10 ::/0 0 0 DROP all !br0 six0 ::/0 ::/0 0 0 DROP all !br0 ppp0 ::/0 ::/0 0 0 DROP all !br0 vlan1 ::/0 ::/0 Chain OUTPUT (policy ACCEPT 222 packets, 24793 bytes) pkts bytes target prot opt in out source destination 0 0 DROP all * * ::/0 ::/0 rt type:0 Chain SECURITY (0 references) pkts bytes target prot opt in out source destination 0 0 RETURN tcp * * ::/0 ::/0 tcp flags:0x16/0x02 limit: avg 1/sec burst 5 0 0 RETURN tcp * * ::/0 ::/0 tcp flags:0x17/0x04 limit: avg 1/sec burst 5 0 0 RETURN udp * * ::/0 ::/0 limit: avg 5/sec burst 5 0 0 RETURN icmp * * ::/0 ::/0 limit: avg 5/sec burst 5 0 0 DROP all * * ::/0 ::/0 Chain logaccept (0 references) pkts bytes target prot opt in out source destination 0 0 LOG all * * ::/0 ::/0 LOG flags 7 level 4 prefix `ACCEPT ' 0 0 ACCEPT all * * ::/0 ::/0 Chain logdrop (0 references) pkts bytes target prot opt in out source destination 0 0 LOG all * * ::/0 ::/0 LOG flags 7 level 4 prefix `DROP ' 0 0 DROP all * * ::/0 ::/0
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :SECURITY - [0:0] :logaccept - [0:0] :logdrop - [0:0] -A SECURITY -p tcp --syn -m limit --limit 1/s -j RETURN -A SECURITY -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j RETURN -A SECURITY -p udp -m limit --limit 5/s -j RETURN -A SECURITY -p icmp -m limit --limit 5/s -j RETURN -A SECURITY -j DROP -A INPUT -m rt --rt-type 0 -j DROP -A INPUT -p ipv6-icmp --icmpv6-type ! echo-request -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -i br0 -j ACCEPT -A INPUT -s fe80::/10 -j ACCEPT -A INPUT -s ff00::/8 -j ACCEPT -A INPUT -p ipv6-icmp --icmpv6-type echo-request -j ACCEPT -A INPUT -p udp -m udp --dport 33434:33534 -j ACCEPT -A INPUT -j DROP -A FORWARD -m rt --rt-type 0 -j DROP -A FORWARD -i br0 -o br0 -j ACCEPT -A FORWARD -s ff00::/8 -j ACCEPT -A FORWARD -p ipv6-icmp -j ACCEPT -A FORWARD -s fe80::/10 -j ACCEPT -A FORWARD -o six0 ! -i br0 -j DROP -A FORWARD -o ppp0 ! -i br0 -j DROP -A FORWARD -o vlan1 ! -i br0 -j DROP -A OUTPUT -m rt --rt-type 0 -j DROP -A logaccept -j LOG --log-prefix "ACCEPT " --log-tcp-sequence --log-tcp-options --log-ip-options -A logaccept -j ACCEPT -A logdrop -j LOG --log-prefix "DROP " --log-tcp-sequence --log-tcp-options --log-ip-options -A logdrop -j DROP COMMIT
ip6tables -A OUTPUT -p tcp --dport 53 -j ACCEPT ip6tables -A OUTPUT -p udp --dport 53 -j ACCEPTTímhle povolíte dotaz, potřebujete povolit ještě odpověď – v řetězci
INPUT
také na cílový port 53. V řetězcích OUTPUT
a INPUT
řešíte jen komunikaci daného počítače, pokud byste to nastavoval na routeru a chtěl omezovat komunikaci ostatníhc počítačů, které přes router komunikují, musíte použít řetězec FORWARD
.
INPUT
tedy musí být test jen na zdrojový port 53.
SERVER_IP="202.54.10.20" DNS_SERVER="202.54.1.5 202.54.1.6" for ip in $DNS_SERVER do iptables -A OUTPUT -p udp -s $SERVER_IP --sport 1024:65535 -d $ip --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -p udp -s $ip --sport 53 -d $SERVER_IP --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT-p tcp -s $SERVER_IP --sport 1024:65535 -d $ip --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -p tcp -s $ip --sport 53 -d $SERVER_IP --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT doneOvšem problém bude s -m state ,jelikož není podporování mým ip6tables, nebo se používá trochu jinak.
-m state
bych klidně vynechal, pokud přijde DNS odpověď na neexistující dotaz, jádro si s tím poradí a není potřeba ho před tím odstiňovat. Tu kontrolu na port 1024–65535 bych tam také nedával, podle mne nikde v DNS standardu není řečeno nic o zdrojovém portu dotazu, takže dotazy s odchozím portem menším než 1024 jsou přípustné.
ip6tables -A INPUT -p tcp --sport 53 -j ACCEPT ip6tables -A INPUT -p udp --sport 53 -j ACCEPTtak se pravděpodobně zařadila za DROP pravidlo. A tím pádem už nic nepovolí. Na chainy SECURITY,logaccept,logdrop není odkazováno v žádném z hlavních chainů INPUT,OUTPUT,FORWARD takže tam jsou zbytečně. Tip na ladění pokud není na serveru velký provoz:
# vynulování počítadel packetů ip6tables -Z INPUT ip6tables -Z OUTPUTdetailnější výpis pravidel, aby se dalo podívat, kde packet prošel
ip6tables -L -vnpokud nemáte zapnutý stavový firewall tohle základní nastavení by mělo stačit
ip6tables -A INPUT -p tcp --sport 53 -j ACCEPT ip6tables -A INPUT -p udp --sport 53 -j ACCEPT ip6tables -A OUTPUT -p tcp --dport 53 -j ACCEPT ip6tables -A OUTPUT -p udp --dsport 53 -j ACCEPTPro inspiraci: http://www.cyberciti.biz/faq/ip6tables-ipv6-firewall-for-linux/ http://tldp.org/HOWTO/html_single/Linux+IPv6-HOWTO/#AEN2228 ~
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.