Я просмотрел множество ресурсов netfilter, iptables и ip6tables. Я искал информацию в Google, в том числе на сайтах StackExchange, и не могу найти простых или понятных ссылок на информацию о различиях между тем, как iptables и ip6tables обрабатывают пакеты.
Вот мои стандартные правила iptables:
* filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --sport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 22 -m state --state ESTABLISHED -j ACCEPT
Аналогичные правила также существуют для входящего и исходящего HTTP и разрешения DNS, а также для базового ICMP (v4 0, 3, 8, 11, 12).
Когда я использую ip6tables для установки тех же правил, мой сервер отвечает на HTTP, SSH и ICMP-соединения с помощью "хост не работает. "
Я могу установить предварительные правила:
-P INPUT ACCEPT
-P OUTPUT ACCEPT
И это снова открывает сервер. Но он не фильтрует пакеты (произвольные правила для всех пакетов, кроме FORWARD).
Я пробовал добавить:
-A INPUT -i eth0 -j DROP
Но, опять же, это начинает вызывать проблемы.
Двойная и тройная проверка с помощью telnet среди других проверок пакетов (журналы сервера просто разрывают соединения, если используется DROP, то же самое для REJECT).
В качестве альтернативы я также видел наборы правил, которые являются простыми ACCEPT (all) с диапазонами dport и sport, за исключением требуемых правил.
Короче говоря, я привык к типичным правилам iptables (ipv4), которые УДАЛЯЮТ все, кроме следующих правил.
В идеале я ищу ссылки или информацию, которые предоставляют подробную техническую информацию о различиях между тем, как iptables и ip6tables по-разному обрабатывают (и отбрасывают или принимают) пакеты.
Казалось бы, ip6tables будет отбрасывать все произвольно, если это основные правила протокола, НО, если это не принято в первом наборе правил, последнее правило, которое я пытался отбросить, все интерфейсные INPUT продолжают вызывать проблемы (с учетом начального набора правил). правила есть ПРИНЯТЬ, но деваться некуда).
FWIW: это Debian Jessie (v8) в дистрибутивном обновлении с Debian Wheezy (v7) на дропле DigitalOcean. Все остальное работает кошерно, кроме правил ip6tables (сервер становится недоступным для ресурсов ipv6).
Оригинал размещен на StackOverflow, удален, скопирован / вставлен здесь, на ServerFault (предлагается более актуально).
Ваши правила отбрасывают ICMP. Это неверно как для IPv4, так и для IPv6, и это заметно нарушит обнаружение PMTU; однако большинство стеков IPv4 реализуют обходные пути для этого (очень распространенного) вида неправильной конфигурации. Однако для IPv6 многие вещи будут нарушены, особенно доступ с хостов Teredo.
Простое решение - добавить правила, разрешающие ICMP:
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A FORWARD -p icmp -j ACCEPT
ip6tables -A INPUT -p icmpv6 -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 -j ACCEPT
ip6tables -A FORWARD -p icmpv6 -j ACCEPT
Потенциально более безопасным решением является разрешение только тех типов сообщений ICMP, которые необходимы для правильной работы, при соблюдении рекомендаций RFC 4890.
Ответ такой, как сказал Майкл Хэмптон в комментариях ... Почти такая же проблема, как:
Настройка правил Debian ip6tables для IPv6
Мои последние правила ip6tables следующие:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT
-A INPUT -p ipv6-icmp -j ACCEPT
-A INPUT -j REJECT --reject-with icmp6-port-unreachable
-A FORWARD -j REJECT --reject-with icmp6-port-unreachable
COMMIT
Что все это говорит:
И я могу использовать SSH через ipv6, и wget -6 http...
Таким образом, формирование правил ip6tables немного отличается от правил iptables. Следующий шаг: проверьте, будет ли то же самое для iptables (v4), и сохраните все как можно более похожим. (Спасибо, Майкл.)