Я настраиваю брандмауэр для 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, чтобы они работали?
Спасибо.
Не знаю, откуда у вас эта мерзость, но лучшее, что вы можете сделать, это удалить ее и начать с нуля. Его основная проблема в том, что он излишне сложен и труден для понимания, даже если он может работать (и я не уверен, читая его, поэтому я, конечно, не собираюсь его тестировать).
Брандмауэры должны быть максимально простыми: принимать только то, что вам нужно, и отклонять все остальное. Следуйте этому, и вам не понадобятся сложные и трудные для понимания правила.
Итак, давайте посмотрим на работающий брандмауэр IPv6 iptables. Я только что снял это с одного из моих серверов:
# 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]
Мы устанавливаем политики по умолчанию для таблиц на ПРИНЯТЬ; трафик будет фактически отброшен правилами в каждой таблице. Это дает нам больше гибкости. В частности, для таблицы 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
Это исправляет Проблема безопасности типа 0 заголовка маршрутизации IPv6. Он должен стоять перед любыми другими правилами. (Обратите внимание, что современные ядра, начиная с 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. надеюсь, у вас есть канал связи console / out of band / 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
Я уверен, что перезагрузку можно обойти, но я не уверен, какую службу нужно перезапустить, чтобы эта работа работала, поэтому я просто перезапускаю их все. После этого наборы правил, подобные тем, которые опубликованы здесь, которые используют отслеживание соединений с отслеживанием состояния, похоже, работают нормально.
Это проблема с таблицами OpenVZ и ipv6. Вместо этого используйте брандмауэр CSF, и у вас не возникнет проблем с настройкой брандмауэра для ipv6.