Настройка правил Debian ip6tables для IPv6

Я устанавливаю брандмауэр для ipv6 в Debian Squeeze. Это веб-сервер, поэтому я думаю, что единственный порт, который должен быть открыт миру для ipv6, это 80.

Вот что у меня есть:

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:in-new - [0:0]
-P INPUT DROP
-P OUTPUT DROP
-P FORWARD DROP
-A INPUT  -i lo -s ::1/128 -j ACCEPT
-A OUTPUT -o lo -d ::1/128 -j ACCEPT
-A INPUT -s fe80::/10 -j ACCEPT
-A INPUT -m rt --rt-type 0 -j DROP
-A OUTPUT -m rt --rt-type 0 -j DROP
-A FORWARD -m rt --rt-type 0 -j DROP

-A INPUT -p tcp ! --syn -m state --state NEW -j DROP

-A INPUT -m state --state INVALID -j DROP

-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN          -j DROP
-A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST          -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,RST FIN,RST          -j DROP
-A INPUT -p tcp -m tcp --tcp-flags ACK,FIN FIN              -j DROP
-A INPUT -p tcp -m tcp --tcp-flags ACK,URG URG              -j DROP

-A INPUT -d ff02::1 -j REJECT

-A INPUT  -p tcp -m state --state ESTABLISHED  -j ACCEPT
-A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT  -p udp -m state --state ESTABLISHED  -j ACCEPT
-A OUTPUT -p udp -m state --state NEW,ESTABLISHED -j ACCEPT

-A INPUT    -p IPv6-icmp -j ACCEPT
-I OUTPUT   -p IPv6-icmp -j ACCEPT
-I FORWARD -p IPv6-icmp -j ACCEPT

-A INPUT -p tcp -m tcp --dport 80 --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j ACCEPT
-A INPUT    -j LOG --log-level 4 --log-prefix "IPT_INPUT: "

-A INPUT    -j DROP
-A FORWARD -j LOG --log-level 4 --log-prefix "IPT_FORWARD: "
-A FORWARD -j DROP
-A OUTPUT   -j LOG --log-level 4 --log-prefix "IPT_OUTPUT: "
-A OUTPUT   -j DROP

COMMIT

Я нашел его где-то в сети и немного изменил, но при попытке восстановить его выдает следующую ошибку:

sudo ip6tables-restore < /etc/ip6tables.firewall.rules
ip6tables-restore: line 47 failed

Любая идея, как настроить мои ip6tables, чтобы он работал?

Спасибо.

4 ответа

Решение

Это проблема с таблицами OpenVZ и ipv6. Вместо этого используйте брандмауэр CSF, и у вас не возникнет проблем с настройкой брандмауэра для ipv6.

Я не знаю, откуда у вас эта мерзость, но лучшее, что вы можете сделать, это удалить ее и начать все заново. Его основная проблема заключается в том, что за ним бесполезно сложно и трудно следить, даже если это может сработать (и я не могу быть уверен, прочитав его, поэтому я, конечно, не собираюсь его проверять).

Межсетевые экраны должны быть максимально простыми: принимать только то, что вам нужно, и отвергать все остальное. Следуйте этому, и вам не понадобятся сложные и трудные для понимания правила.

Итак, давайте посмотрим на работающий брандмауэр iptables IPv6. Я только что снял это с одного из моих живых серверов:

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

Мы устанавливаем политики по умолчанию для таблиц ACCEPT; трафик будет фактически отброшен по правилам в каждой таблице. Это дает нам больше гибкости. В частности, для таблицы OUTPUT всегда должна быть задана политика по умолчанию ACCEPT, если только вы не собираетесь блокировать исходящие соединения.

-A INPUT -m rt --rt-type 0 --rt-segsleft 0 -j DROP
-A FORWARD -m rt --rt-type 0 --rt-segsleft 0 -j DROP
-A OUTPUT -m rt --rt-type 0 --rt-segsleft 0 -j DROP

Это устраняет проблему безопасности IPv6 Routing Header Type 0. Это должно появиться перед любыми другими правилами. (Обратите внимание, что современные ядра, начиная с 2.6.21.1, автоматически отбрасывают этот трафик и не нуждаются в этих правилах. Если у вас есть предыдущее ядро, обратитесь к поставщику дистрибутива для исправления для CVE-2007-2242.) Явные правила для RH0 на много лет устарели и больше не требуется в современных системах Linux.

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Это принимает текущий трафик для любых существующих соединений, которые мы уже приняли через другие правила.

-A INPUT -p ipv6-icmp -j ACCEPT

Мы принимаем все пакеты ICMP. В отличие от IPv4, блокировать трафик ICMPv6 не очень хорошая идея, поскольку IPv6 сильно зависит от него.

-A INPUT -i lo -j ACCEPT

Мы принимаем весь трафик с / на локальный интерфейс.

-A INPUT -m state --state NEW -m udp -p udp --dport 546 -d fe80::/64 -j ACCEPT

Мы принимаем трафик DHCPv6. Если вы используете автоматическое конфигурирование без сохранения состояния или статически настраиваете свои машины, в этом нет необходимости.

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

Они принимают новые соединения для SSH и HTTP.

-A INPUT -j REJECT --reject-with icmp6-port-unreachable
-A FORWARD -j REJECT --reject-with icmp6-port-unreachable

В конце наших правил мы отклоняем весь трафик, который не соответствует правилу, используя "Порт недоступен". Это приводит к появлению стандартного сообщения "Отказ в соединении" на другом конце и фактически скрывает тот факт, что у нас есть брандмауэр. Такие инструменты, как nmap, сообщат, что все наши порты "закрыты", а не "отфильтрованы", и им гораздо труднее определить, что у нас даже есть брандмауэр.

COMMIT

Это фиксирует все записи таблицы.

Я смог перезагрузить ваш ip6tables-dump без проблем. Я предлагаю вам сначала попытаться создать брандмауэр с помощью команды ip6tables, а затем сбросить его. это может быть намного проще для отладки.

Вы можете начать с чистого листа - firewall.sh, который выглядит следующим образом:

#!/bin/bash
ip6tables -P INPUT DROP
ip6tables -P OUTPUT DROP
ip6tables -P FORWARD DROP

ip6tables -F

ip6tables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -A INPUT  -m state --state RELATED,ESTABLISHED -j ACCEPT

будьте осторожны - это предотвратит любую связь ipv6. надеюсь, у вас есть консоль / внеполосный /ipv4 канал связи. если не добавить хотя бы:

ip6tables -A INPUT  -p tcp --dport 22 -j ACCEPT

если вы довольны сценарием брандмауэра, вы можете запустить ip6tables-save> your.rules.

У меня была такая же проблема с ошибкой фиксации. Я использую Debian Wheezy, но подозреваю, что проблема та же. Кажется, что базовая установка Debian (по крайней мере та, которую я использую) не поддерживает отслеживание соединений для ipv6. Это вызывает линии, которые пытаются отслеживать состояние соединения (-m state...) потерпеть неудачу, хотя ip6tables-restore недостаточно учтива, чтобы сказать вам это, к сожалению. Хорошей новостью является то, что это можно решить без особых проблем:

# apt-get install conntrack
# reboot

Я уверен, что можно обойти перезагрузку, но я не уверен, какой сервис нуждается в перезапуске, чтобы сделать эту работу, поэтому я просто перезапускаю их все. После этого наборы правил, подобные опубликованным здесь, которые используют отслеживание подключений с отслеживанием состояния, работают нормально.

Другие вопросы по тегам