Получение ipv6-адреса через teredo и защита ipv6-соединения с помощью ip6tables

()

В настоящее время ресурс свободных IPv4 адресов практически исчерпан и всё ближе и неизбежнее переход на IPv6-адреса. Готовясь к этому переходу администраторам полезно уже сейчас начать приобретать хотя бы базовые навыки работы с IPv6.

В настоящий момент есть несколько способов получить IPv6-адрес. Самый очевидный - вам его выдаёт провайдер. Однако в настоящее время абсолютное большинство провайдеров не спешит внедрять в своих сетях поддержку IPv6 и в такой ситуации для получения IPv6-адреса приходится искать обходные пути.

Самый простой способ это "завернуть" свой IPv6-трафик в туннель teredo до одного из teredo-серверов. Адрес в этом случае у вас будет динамический, но его вполне достаточно для обращения к IPv6-ресурсам. Далее будет показано как можно организовать teredo-соединение и защитить его с помощью ip6tables на машине под управлением Ubuntu Server 10.10.

Для организации teredo-туннелей в Linux и *BSD существует инструмент miredo. Создатели этого инструмента так же поддерживают свой teredo-сервер, которым может воспользоваться любой желающий и на использование которого по умолчанию настроен miredo. Это сильно упрощает задачу. Установим miredo:

apt-get install miredo

После установки miredo автоматически запустится и сразу подключится к "родному" серверу "teredo-debian.remlab.net", создав на локальной машине tun-интерфейс с именем "teredo" и настроив маршрут по умолчанию для IPv6 через этот интерфейс.

Посмотреть настройки интерфейса можно командой:

ifconfig teredo

Для просмотра таблицы маршрутизации для IPv6-трафика можно использовать команду:

ip -6 route show

Убедиться что соединение действительно работает можно пропинговав какой-нибудь хост, доступный только по IPv6. Например "ipv6.google.com". Разумеется надо использовать версию ping с поддержкой IPv6 - "ping6":

ping6 -c 3 ipv6.google.com

Разумеется только что созданное соединение нужно закрыть файрволлом. Для настройки файрволла на ipv4-интерфейсах используется iptables. В случае IPv6-соединение нужно использовать ip6tables. В целом использование ip6tables очень напоминает использование iptables, только с поправкой на особенности протокола.

Рассмотрим пример простейшего скрипта для ip6tables:

#!/bin/sh

# Имя нашего ipv6-интерфейса
IF_EXT="teredo"

# Сбрасываем все правила
ip6tables -F

################################################################################
# Устанавливаем политики по умолчанию:
# Запрещаем входящие пакеты
ip6tables -P INPUT DROP
# Разрешаем исходящие
ip6tables -P OUTPUT ACCEPT
# Запрещаем пересылку
ip6tables -P FORWARD DROP
################################################################################

################################################################################
# Минимально-необходимые правила:
# Разрешаем весь трафик внутри localhost
ip6tables -A INPUT -i lo -j ACCEPT
# Разрешаем входящие пакеты, идущие в ответ на исходящие
ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
################################################################################

################################################################################
# Остальные правила:

# Разрешаем HTTP и HTTPS для всех
ip6tables -A INPUT -m tcp -p tcp -m multiport --dports 80,443 -i ${IF_EXT} -j ACCEPT

# Разрешаем SSH для всех
ip6tables -A INPUT -m tcp -p tcp --dport 22 -i ${IF_EXT} -j ACCEPT

Этот скрипт можно сохранить под именем "/usr/local/scripts/firewall6.sh". Чтобы правила применялись при загрузке нужно добавить в файл "/etc/rc.local" строку:

/bin/sh /usr/local/scripts/firewall6.sh

На этом рассмотрение teredo в Linux мы пока закончим. Приятной работы!

Ключевые слова: teredo, miredo, ipv6, ip6tables.

Комментарии:

Anonymous 2013-05-25 13:54:33 (#)

Спасибо, Moose, твоя статья очень помогла. Кстати в top-10 гугла по запросу "защита ipv6 linux" :)

soko1
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE