я не понял, в чём новизна? Посредник между двумя «заНАЧеными» хостами, классика. OpenVPN на tcp\443 гораздо более «проникающий», даже NAT не нужен, достаточно прокси с разрешенным методом CONNECT на порт 443 (почти всегда так и есть)
хм, почитал доку. Работает на основе icmp time exeeded. Трудноприменимо. Зачастую трассировки запрещены через NAT-шлюз, но даже если разрешены, то приоритет у icmp самый низкий, тупить будет такой туннель нещадно.
Пардон, что влезаю… а зачем тогда вообще нужен файрвол, если его существование выражено только в allow all to all? Это уже не файрвол получается, а фигня какая-то…
да, я в курсе. В случае с UDP файер на некоторое время запоминает две пары ip:port, обоих сторон, но только в случае инициирования со стороны LAN, со стороны WAN дропаются пакеты, не имеющие такого «виртуального state». Хитрость сабжа именно это и эксплуатирует, как я понял.
а там нет посредника
вкратце как это работает:
На первом этапе сервер за натом определяет публичный ip клиента, для этого сервер регулярно шлёт ICMP echo request на фиксированный ip 3.3.3.3 Клиент желающий подключиться щлёт на публичный ip сервера поддельный пакет ICMP Time Exceeded, NAT его пропускает, сервер узнаёт ip клиента.
Далее и клиент и сервер начинают слать друг дргугу на публичные ip udp пакеты — NAT их пропускает т.к. это соответствует традиционному сценарию работы с udp.
Никаких посредников в итоге не требуется. Правда при такой реализации за NAT может быть только один сервер, т.к. соединение инициируется по (не)ответу от магического ip 3.3.3.3
Как udp проходит сквозь nat? В голову приходит только идея дописывать firewall'ом заголовки в пакет, которые сервер в обязательном порядке запишет в свой пакет и firewall сможет таким образом опознать ответный пакет и пропустить его внутрь сети. При таком подходе эти заголовки должны быть унифицированы.
Даже если внешние IP-адреса NAT-шлюзов будут определяться через ICMP, для работы UDP-тоннеля еще необходимо знать внешние адреса UDP-портов, которые NAT-шлюз открыл для данного трафика. Совсем необязательно эти номера будут совпадать с номерами внутренних портов клиента и сервера за NAT. Серверы STUN обычно для того и используются, чтобы кроме внешних IP-адресов также выявить и внешние UDP-порты. Из описания pwnat я не смог понять, как же там определяются внешние номера UDP-портов.
Чтобы он его получил сервер должен знать номер порта на NAT'е клиента — а он его тоже не знает.
Это замкнутый цикл и чтобы его преодолеть нужен хост-посредник.
Насколько я понимаю, в данной «технологии» за одним натом может быть только один сервер. Иначе оба будут слать одинаковые ICMP echo request на 3.3.3.3, и пакет пойдет на последний отправивший из них (хотя опять же, последнее от реализации ната зависит).
Кстати, по этой же причине сервер очень уязвим man-in-the-middle атаке: пиратский хост за тем же натом может слать пакеты на 3.3.3.3 чаще и нат будет пересылать пакеты на него. Ну а далее уже все просто :)
Чтоб тот же CONNECT заблокировать нужен ssl-interception, мало того, что работающие решения денег стоят, так еще и практика довольно спорная…
С web-proxy все совсем сложно.
Так что про «хорошего админа» — это вам кажется.
Весь CONNECT не запретить — по нему https работает.
Если приложение гонит совсем не-SSL трафик то можно отсеять фильтром.
Если инкапсулирует свой трафик в SSL — то ой, только interception — подмена сертификата и прочие радости жизни.
А вот icmp-tunneling — это скучно и тривиально, и закрывается и отслеживается на раз. Когда-нибудь ваши админмы его заметят.
Значительно интересней dns-tunneling, закрыться от него можно, но настолько противно, что многие предпочитают не связываться :)
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесьНЛО прилетело и опубликовало эту надпись здесь
Учитывая, что сабж вообще не для обхода фильтров на выходе, а для организации сервера в случает, когда нет белого IP — от темы мы были далеко изначально :)
У хорошего админа icmp прикрыт. Не нужен он пользователям.
А при прикрытом icmp описаный выше софт теряет свою целесообразность.
Так что нарезка «левой резьбы» много времени и не займет =)
З.Ы.: А еще есть провайдеры, которые режут icmp пакеты. И куда с этим pwnat идти в таком случае? =)
Клиентам все это не нужно.
Фрагментация — дело шлюза.
Port unreachable — его все равно уже мало кто шлет — защита от сканирования портов. Само отвалится по таймауту, ничего страшного.
TTL expired — зачем обычному пользователю traceroute?
Режем по частоте: клиент пингует один хост — все ходит, начинает пинговать второй — отваливаются оба. :)
Режем по размеру: пытаем установить MTU на маршруте, увеличиваем размер пакета с выключенной фрагментацией — врубаемся в фильтр. :)
А безопасности мы при этих спецэффектах все равно не добьемся.
Это почему это некорректно? Зачем пользователю в моем офисе нужен ICMP? Вообще, для чего рядовому пользователю нужен ICMP? У меня провайдер считает, что всем его клиентам не нужен ICMP. И я бы не сказал, что при этом есть какие-то сбои в работе сети. Пинги проверить нельзя или трейсом пробить? Ничего страшного, я лично от этого не страдаю =)
Мы обсуждаем фильтрацию при выходе наружу — а не внутри сети.
И ничего, кстати, особенного не будет — DC вполне можно ставить в DMZ.
О какой версии Windows Server вы говорите?
есть некоторые софтины, в частности клиент-банк сбербанка рф, которые перед соединением пингуют сервер, а при отсутствии пинга отрубаются.
софтины незаменимы, а значит работать со сбербанком, например, будучи клиентом вашего провайдера, не получится.
у нас тоже так один провайдер (ТВТ) страдает фигнёй: icmp режет, 25-й порт режет, белые IP бесплатно не даёт и так далее. как факт, имеется отток клиентов от него к эр-телекому.
ipfw allow udp from 192.168.1.0/24 to 192.168.1.1 53
ipfw allow tcp from 192.168.1.0/24 to 192.168.1.1 53
ipfw deny udp from 192.168.1.0/24 to any 53
ipfw deny tcp from 192.168.1.0/24 to any 53
насколько мне память не изменяет — вот так вот
Вот вроде и накрылся весь днс-туннелинг медным тазиком.
Вы про это?
Как-то вам память изменяет, или это фильтр на бридже? Ну не суть.
192.168.1.1 — это ваш DNS. Клиентам разрешено обращаться к нему, а ему видимо разрешено обращаться к DNS'ам в интернете.
Если ваш DNS не только для того, чтобы внутренние зоны держать, он запросы умеет форвардить.
От клиента, в интернет. Профит. Осталось только где-то в интернете этот трафик терминировать.
Фильтр на бридже… Таки я думал, что оно напрямую клиента к внешнему днс пускает. Оказымайнд оно через мой днс-сервер и работает =)
Ничего, время будет — покурю на эту тему =)
Не задумывались, что лишние запреты будут провоцировать нарушения даже там, где никто и не собирался ничего нарушать? Если что-то стоит своих денег, его украдут, хоть монитор на мобильник фотографируя.
В остальных же случаях все эти брокировки приносят больше вреда, чем пользы: во-первых, у людей появляется интерес их обойти, во-вторых, они чувствуют себя обиженными и их отношение к компании, в которой они работают, становится соответствующим.
Бывает по — разному. У меня на работе реальный ай пи и линукс, но дороговориться с админами, чтобы хотя бы ssh открыли нереально. Потому что везде венда и вииирусы, а я с линем белая ворона и система на такие исключения не расчитана.
Жаль что udp у меня весь вообще закрыт в обе стороны, так что такую дырку не проковырять.
Инициализация сессии элегантная, очень понравилась.
А вот установка сессии наивна донельзя — работать она будет только с чистым NAT, без PAT (ибо требует, чтобы порт на клиенте совпадал с портом на NAT'е) — а где он такой еще вообще остался? Многие NAT'ы мало того, что не гарантируют такого совпадения, так еще и рандомизируют исходящие порты.
Плюс к этому, если упорно долбиться в закрытый порт, то нас еще и секьютири фильтр может заблокировать — совсем ничего не установим.
Это — не то же самое, что в скайпе. Скайп использует клиентов с белыми IP, чтобы соединить тех, кто за NAT. В лучшем случае, клиенты с белыми IP используются только для установки соединения, в худшем — через них ещё и трафик идёт.
А здесь речь о том, что не нужно никакого третьего узла с белым IP, всё и так будет работать (правда, не всегда).
ну да, сама идея не нова, а вот универсального решения (т.е. под любой протокол) вроде раньше не было. хотя может это просто потому, что никому не нужно :)
А вот на реальной паре NAT-NAT ничего не вышло.
Со стороны сервера — NAT провайдера Цифра (Спб), со стороны клиента — Kerio.
Teredo при этом на стороне сервера работает нормально.
Я в свое время написал небольшую программку, эдакий proxy-туннелей на основе ICMP. В ICMP пакеты я упаковывал tcp-трафик. Что-то похожее на это www.cs.uit.no/~daniels/PingTunnel/. Правда скорость не большая, из-за отсутствия надежной доставки icmp-пакетов.
У кого-нибудь это заработало?
Попробовал unix-NAT-NAT-unix — не хочет работать и главное никакого дебага не выводить про процесс(
Только Listening on TCP(/UDP) 192.168.1.2:8000
Если был бы — то уже давно бы сделал.
А брать VDS только для это — не бюджетно ((
hamachi, remobo работают вот проверяю еще варианты для прямого тунеля.
Проходим сквозь стены NAT-ов