После настройки правил с помощью iptables и проверки того, что все работает, я также установил те же правила для адресов IPv6 и заметил, что я не могу подключиться ни к одному из адресов и портов IPv6 моего сервера. Политика по умолчанию: DROP
все, кроме портов, разрешаю вручную.
Правила выглядят так:
-P INPUT DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
...
Если честно, я запускал эти команды с iptables
и ip6tables
и хотя с IPv4 все работает нормально, я не могу подключиться через IPv6 извне.
Должен ли я разрешить для IPv6 дополнительные вещи, которые IPv4 не требует?
IPv4 использовал отдельный протокол для поиска MAC-адреса, принадлежащего IPv4-адресу: ARP. Поскольку это отдельный протокол, iptables на него не влияет.
IPv6 интегрировал эту функциональность и не требует / не использует ARP. Функция реализована с помощью сообщений ICMPv6. Разница в том, что ICMPv6 является зависит от ip6tables. Если вы не пропускаете правильные сообщения ICMPv6, вы фактически блокируете себе доступ к сети. Вы не сможете найти другие системы в своей локальной сети (например, шлюз по умолчанию), и другие не найдут вас.
Как минимум, вам необходимо принимать сообщения запроса соседей и объявления соседей. Если вы используете рекламу маршрутизатора для финансирования шлюза по умолчанию и / или используете автоконфигурацию адреса, вам также необходимо принять их. Также может быть полезно пинговать вашу машину для отладки, поэтому, возможно, вы также захотите принять сообщения эхо-запроса.
Полный список возможных сообщений ICMPv6 см. https://www.iana.org/assignments/icmpv6-parameters.