Назад | Перейти на главную страницу

Настройка правил 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, чтобы они работали?

Спасибо.

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

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

Итак, давайте посмотрим на работающий брандмауэр 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.