У меня проблема с настройкой iptables. Я хочу иметь полностью сдвоенный сервер, поэтому я использую одни и те же правила для IPv4 и IPv6. Однако все соединения IPv6 просто обрываются, в то время как IPv4 работает без проблем.
Вот все файлы, которые я использую для заполнения правил брандмауэра: Вот - Первый файл - это сценарий, который я запускаю, второй содержит общие (общие) правила для IPv4 и IPv6, а третий и четвертый - файлы, содержащие определенные правила для IPv4 и IPv6.
Хочу отметить, что на IPv4 все работает отлично.
Проблема не только в таких сервисах, как FTP, я даже не могу пинговать сервер (проверено на многих компьютерах в разных сетях).
На всякий случай, это вывод команды iptables -L -n -v
:
Chain INPUT (policy DROP 511 packets, 79527 bytes)
pkts bytes target prot opt in out source destination
1765 739K ACCEPT all -- !eth0 * 0.0.0.0/0 0.0.0.0/0
43146 1980K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcpflags: 0x10/0x10
180 26305 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
138 8300 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 20,21,25,80,443,465
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpts:50000:50500
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:1194
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 0
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 3
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 4
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 8
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 11
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 12
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 11171 packets, 65M bytes)
pkts bytes target prot opt in out source destination
и это результат команды ip6tables -L -n -v
:
Chain INPUT (policy DROP 32 packets, 3076 bytes)
pkts bytes target prot opt in out source destination
8 832 ACCEPT all !eth0 * ::/0 ::/0
0 0 ACCEPT tcp * * ::/0 ::/0 tcpflags: 0x10/0x10
0 0 ACCEPT all * * ::/0 ::/0 state RELATED,ESTABLISHED
0 0 ACCEPT tcp * * ::/0 ::/0 tcp multiport dports 20,21,25,80,443,465
0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpts:50000:50500
0 0 ACCEPT udp * * ::/0 ::/0 udp dpt:1194
0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 129
0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 1
0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 128
0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 3
0 0 ACCEPT icmpv6 * * ::/0 ::/0 ipv6-icmptype 4
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Выход iptables-save
:
*filter
:INPUT DROP [93:13846]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4788:4752203]
-A INPUT ! -i eth0 -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags ACK ACK -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp -m multiport --dports 20,21,25,80,443,465 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 50000:50500 -j ACCEPT
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 12 -j ACCEPT
COMMIT
Выход ip6tables-save
:
*filter
:INPUT DROP [6:778]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT ! -i eth0 -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags ACK ACK -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp -m multiport --dports 20,21,25,80,443,465 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 50000:50500 -j ACCEPT
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 129 -j ACCEPT
-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 1 -j ACCEPT
-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 128 -j ACCEPT
-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 3 -j ACCEPT
-A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 4 -j ACCEPT
COMMIT
Если я попытаюсь пропинговать сервер через IPv6 (ping -6 2a02:2b88:2:1::2498:1
) тогда я получаю Request timed out
. Если я попытаюсь пинговать его на сервере (через SSH), он пингуется без проблем:
ping6 2a02:2b88:2:1::2498:1
-> 64 bytes from 2a02:2b88:2:1::2498:1: icmp_seq=1 ttl=64 time=0.034 ms
ИЛИ
ping6 localhost
-> 64 bytes from localhost: icmp_seq=1 ttl=64 time=0.031 ms
Я также забыл упомянуть, что если я изменю всю цепочку INPUT на ACCEPT, все будет работать. Конечно, это, к сожалению, не вариант ...
В конце концов, проблема действительно заключалась в пакетах ICMP. Если быть точным, я не знал, что IPv6 больше не использует ARP и некоторые другие сервисы - он использует свои собственные механизмы. Для этого необходимо пройти много пакетов ICMPv6. После включения все работает как положено.
Я пришел к этому решению, попытавшись просто включить ВСЕ пакеты ICMPv6 - все заработало. Поэтому я просмотрел несколько руководств и выяснил, какие пакеты ICMPv6 необходимо включить.
Я хотел бы порекомендовать этот набор правил: https://gist.github.com/jirutka/3742890
Я основал на них свои настройки брандмауэра, и с этого момента я буду делать это в будущем.