Настройка правил 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
Я уверен, что можно обойти перезагрузку, но я не уверен, какой сервис нуждается в перезапуске, чтобы сделать эту работу, поэтому я просто перезапускаю их все. После этого наборы правил, подобные опубликованным здесь, которые используют отслеживание подключений с отслеживанием состояния, работают нормально.