Назад | Перейти на главную страницу

Почему эти правила ip6tables блокируют ssh через IPv6, когда версия iptables позволяет это через IPv4

У меня есть следующие iptables правила, которые предназначены для разрешения всего трафика на lo, eth1 и eth2 и разрешить исходящий трафик на eth0 но заблокировать входящий трафик на eth0 кроме портов 22, 80, 443, 1194, 5222 и 5269. Правила успешно разрешают доступ ssh через порт 22 через IPv4.

# Generated by iptables-save v1.4.12 on Sat Nov 16 13:03:07 2013
*raw
:PREROUTING ACCEPT [247:18556]
:OUTPUT ACCEPT [278:35544]
COMMIT
# Completed on Sat Nov 16 13:03:07 2013
# Generated by iptables-save v1.4.12 on Sat Nov 16 13:03:07 2013
*mangle
:PREROUTING ACCEPT [247:18556]
:INPUT ACCEPT [247:18556]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [278:35544]
:POSTROUTING ACCEPT [278:35544]
COMMIT
# Completed on Sat Nov 16 13:03:07 2013
# Generated by iptables-save v1.4.12 on Sat Nov 16 13:03:07 2013
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [1:164]
:POSTROUTING ACCEPT [1:164]
COMMIT
# Completed on Sat Nov 16 13:03:07 2013
# Generated by iptables-save v1.4.12 on Sat Nov 16 13:03:07 2013
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m state --state INVALID -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p icmp -m limit --limit 1/sec -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1194 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5222 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5269 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -m pkttype --pkt-type broadcast -j DROP
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth1 -j ACCEPT
-A OUTPUT -o eth2 -j ACCEPT
-A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Sat Nov 16 13:03:07 2013

Я скопировал их в ip6tables и добавил и кучу ipv6-icmp правила, позволяющие динамическую настройку адреса IPv6.

# Generated by ip6tables-save v1.4.12 on Sat Nov 16 13:03:12 2013
*raw
:PREROUTING ACCEPT [60:5920]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Sat Nov 16 13:03:12 2013
# Generated by ip6tables-save v1.4.12 on Sat Nov 16 13:03:12 2013
*mangle
:PREROUTING ACCEPT [60:5920]
:INPUT ACCEPT [4:320]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Sat Nov 16 13:03:12 2013
# Generated by ip6tables-save v1.4.12 on Sat Nov 16 13:03:12 2013
*filter
:INPUT DROP [4:320]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1194 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5222 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5269 -m state --state NEW,ESTABLISHED -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 1 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 2 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 3 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 4 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 133 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 134 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 135 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 136 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 137 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 141 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 142 -j ACCEPT
-6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 130 -j ACCEPT
-6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 131 -j ACCEPT
-6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 132 -j ACCEPT
-6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 143 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 148 -j ACCEPT
-6 -A INPUT -p ipv6-icmp --icmpv6-type 149 -j ACCEPT
-6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 151 -j ACCEPT
-6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 152 -j ACCEPT
-6 -A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 153 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth1 -j ACCEPT
-A OUTPUT -o eth2 -j ACCEPT
-A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Sat Nov 16 13:03:12 2013

Строка для TCP-порта 22 такая же. Тем не менее, эти правила блокируют ssh через IPv6.

Зачем? Что мне нужно сделать по-другому, чтобы разрешить те же порты TCP через IPv6, что и через IPv4?

An старый вопрос предполагает, что мне не хватает некоторых жизненно важных ipv6-icmp все еще, но мне непонятно что, поскольку в ответе используется другой синтаксис.

Правила ipv6 w.r.t. ssh мне кажется нормальным. Я подозреваю, что в полной настройке может быть ошибка, которая, возможно, связана с интерфейсом, с которого вы пытались получить доступ к своей машине.

Ваши правила не реализуют описанную вами политику.

[...] правила iptables, которые предназначены для разрешения всего трафика на lo, eth1 и eth2

Ваш INPUT правила не реализуют эти разрешения для интерфейсов eth1 и eth2. Любой порт кроме 22, 80, 443, 1194, 5222 и 5269 является не доступен через eth1 и eth2.

[...] но блокировать входящий трафик на eth0, кроме портов 22, 80, 443, 1194, 5222 и 5269.

Попробуйте ограничить разрешения порта в INPUT только eth0 чтобы проверить, работает ли ваша установка должным образом. Вы можете использовать -m multiport --dports 22,80,443,1194,5222,5269 чтобы правила были более читабельными. В INPUT вы уже принимаете ESTABLISHED трафик. Таким образом, при написании правил для отдельных портов достаточно сопоставить --state NEW (без ESTABLISHED) пакеты.

[...] и разрешить исходящий трафик на eth0

Это также не реализовано в наборе правил. Это может случайно сработать, потому что правило -A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT принимает почти каждый пакет.


Общие дальнейшие шаги отладки:

  • убедитесь, что вы загрузили сценарий IPv6 с ip6tables. Из-за использования вами -6, вы также можете загрузить его с помощью iptables, который игнорирует все правила, начинающиеся с -6
  • Не блокируйте себя, когда вносите изменения. На данный момент у вас, скорее всего, есть только случайный доступ по ssh из eth0 из-за -A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT правило.
  • Проверьте iptables -L -v -n и посмотрите на счетчики правил, чтобы узнать, какие правила применяются. При необходимости добавьте правила без действия или LOG правила, чтобы получить больше счетчиков / информации.
  • Попробуйте на время принять любой ipv6-icmp, чтобы выяснить, связана ли проблема с icmp.
  • ssh имеет -4 и -6 флаги для принудительного использования IPv4 / IPv6. Убедитесь, что ваш компьютер случайно не вернул неправильную версию IP во время тестирования.
  • Если вы отредактировали свои правила, но проблема IPv6 проблема-ssh остается, вы можете изменить этот вопрос на что-то вроде: «Реализуют ли мои правила мою предполагаемую политику?» и снова задайте вопрос IPv6-ssh (в новой ветке) с вашими новыми правилами.