Странности с Ip6 адресами и local connections на FreeBSD

Словил сегодня забавные грабли. Есть обычная FreeBSD 9.2 на которой настроен обычный ipfw с обычным ipv6. В ipfw открыты входяшие соединения на 8000й порт на gloval ipv6 адрес одного физического интерфейса.

И есть слущающий сокет сервера, который привязан к этому адресу.
И вроде всё прекрасно работает, сервер доступен и нормально отвечает снаружи. Но вот случайно обнаружил что соединения на адрес:порт с локального хоста почему-то не работают. Не работают совсем, как буд-то их режет фаерволом. По-началу такое поведение меня поставило в тупик, как может что-то по сети работать а с локалхоста нет? Стандартное первое правило в ipfw allow ip from any to any via lo0 присутсвует, казалось бы чего еще надо?
Можно запустить telnet и посмотреть что творится на лупбеке.

А вот они и попытки установить соединение через lo0

Все как и должно быть, видно первый syn и ответный syn-ack, но, судя по повторяющимся syn’ам, ответный syn-ack цели не достигает. Куда он может пропасть на лупбеке?
Посмотрим что там вытворяет ipfw.

Оп-па! А ipfw считает syn-ack пакеты от слушающего сокета даром что как in (входящие относительно ядра), но входщими с интерфейса cmc а не lo0. Несколько неожидано…
Вроде ничего не напутал.

М-да… или я что-то упускаю в принципах работы ipfw или… надо проверить аналогичную ситуацию с ip4.
Ясно что проблему нужно полечить глобально добавлением правил в Ipfw, вот только каких?
Тупой вариант:

Работает, но выглядит очень подозрительно, под данное правило, например, будут попадать все пакеты из внешнего мира с подменным ip6 source-адресом, что недопустимо если хост не прикрыт другим брандмауэром где-нибудь на промежуточных рутерах. Полноценное соединение, конечно, злоумышленнику установить не удастся, но тем не менее это лишняя дырка для DoSа, мало ли…
Можно сварганить statefull-динамическое правило на исходящие соединение

Но его нужно разместить ДО первого правила пропускающего трафик через lo0 интерфейс, т.к. инициирующий пакет уходит через lo0 интерфейс, но вот возвращается почему-то как бы через физический. Тоже работает, но как-то… не аккуратненько чтоли… Надо бы еще подумать, продолжение следует…

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">