IpfwNg

Apr. 26th, 2012 03:11 am
nuclight: (Default)
[personal profile] nuclight
В честь 26 годовщины 26 апреля уволился с текущей работы и таки наконец начал проект http://wiki.freebsd.org/IpfwNg — хотя на работе FreeBSD и была основной системой, реальную возможность пилить ядро я так и не получил (хотя тот же NAT64 нам бы понадобился не через полгода, так через год). В ближайшие недели посижу дома и надеюсь сделать хотя бы скелет, который можно будет потом уже в свободное время потихоньку пилить — работы по проекту предстоит очень много.

Желающие обсудить по делу — велкам в каменты (хотя я туда еще не все наброски оформил).

Date: 2012-05-10 09:53 am (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
то же самое можно сказать и в твоем случае про новый файрвол.
вряд ли его разработка означает (по крайне мере в обозримом будущем) вынос классического ipfw

Date: 2012-05-10 10:30 am (UTC)
From: [identity profile] dadv.livejournal.com
Дай бог, если так.

вынос классического ipfw

Date: 2012-05-10 09:28 pm (UTC)
From: [identity profile] nuclight.livejournal.com
Я бы предпочел именно вынос, причем поскорее. Точнее, взаимную несовместимость, или один, или другой. Совместимость гораздо удобнее тянуть на уровне оберток командной строки, чем поддерживать весь хлам кривых решений в потрохах.

Date: 2012-05-10 09:43 pm (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
по-моему оптимально независимое существование.
вот есть ipfw2, который через хуки и с байткодом.
для простого стателесс (ну если полечить пару багов) он многих удоволетворяет.
и новый файрвол, на нетграфе, с блэкджеком, шлюхами, интегрированным натом и исходно state full, с совсем другим синтаксисом. потом, в дальнейшем, если получится можно будет к нему написать ipfw, который будет для скриптов эмулировать синтаксис ipfw. а можно и не писать -- один черт pfil будут оставленны для ipf/pf.

да, краткое размышление говорит о том, что pbr в файрволе не нужен, нужен отдельный модуль в роутинге для pbr, который может использовать информацию о state (flow) из файрвола для роутинга. это архитектурно-идеологически выглядит более правильно.

Date: 2012-05-11 01:58 am (UTC)
From: [identity profile] victor-sudakov.livejournal.com
> pbr в файрволе не нужен, нужен отдельный модуль в роутинге для pbr,

+1

> который может использовать информацию о state (flow) из файрвола для роутинга

а это как, в смысле где посмотреть пример реализации? Я к тому, что IP, на уровне которого происходит форвардинг пакетов, у нас всё же stateless протокол.

Date: 2012-05-11 06:31 am (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
нигде, это надо делать.
да, ipv4 -- state less. но если у нас есть state full файрвол, то для входящего пакета он может навесить mbuf с информацией о flow, которой этот модуль может воспользоваться. вот для сгенеренных на тазике пакетов сложнее -- они сначала на ротинг поступают, а потом уже в файрвол, занчит из этого модуля надо вызывать предварительную обработку пакета из файрвола для классификации и определения flow.

Date: 2012-05-18 01:17 am (UTC)
From: [identity profile] nuclight.livejournal.com
мнээ... похоже ты всё-таки плохо с линуксом знаком - у них это есть, см. CONNMARK (и да, первым на локальных out делается connection tracking, потом пересчитывается роутинг, если нужно)

Date: 2012-05-18 02:09 pm (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
я никогда не выдавал себя за знатока линуха.

по сегодняшним размышлениям я понял, что flow mark должны быть стэкируемые. например sip:

IP_A-IP_B -- сигнализация, flow1 (две ip атс, которые сигнализацию пускают через себе, а медию -- напрямую).
клиент_1 делает звонок. клиент_2 делает звонок.
на сигнализацию звонка между IP_A и IP_B уже надо по две марки -- flow1:flow2 для клиента1 и flow1:flow3 для клиента2.
когда у них пойдет RTP -- то отслеживать их надо будет независимо.

или вот еще уебище, которое никто сечас кажется неможет нормально натить -- 79xx с SIP-прошивкой -- оно гадит сигнализацией с произвольно порта, а принимать сигнализацию хочет исключительно на 5060. соответсвенно надо проброс SIP делать (если у нас несколько телефонов за nat) анализируя строку вызова (телефонный номер) -- это к твоему предыдущему вопросу про 5 тупле. 5 тупле одинаковые, а разделение должно идти уже по SIP информации

Date: 2012-05-31 10:00 pm (UTC)
From: [identity profile] nuclight.livejournal.com
32 байта для flow mark хватит? =) Я именно столько планирую отвести в dynrule под регистры, держи в них себе данных сколько хошь. Цифра из расчета держать 1 IPv6-адрес + что-нибудь еще полезное + ровный размер.

В VoIP я дуб, так что пример твой не понял, каким именно образом там бегает. Про строку вызова тоже - там в каждом UDP-пакете соединения этот номер есть, что ли? Или как иначе отслеживать, если потом опять голый 5-tuple останется?

Date: 2012-06-01 04:27 am (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
мало. это всего 8 раз по 32 бита. 32 бита надо на одну flow mark, значит у нас может быть стек только из 8 меток. мало

в каждом пакете сигнализации есть call-id: identificator. он на протяжении вызова не меняется.
кто такие пакеты соединения я не знаю.
есть еще пакеты media, но они сначала описываются в пакете сигнализации с типом sdp.
в медиа его нет, разумеется

Date: 2012-05-18 01:14 am (UTC)
From: [identity profile] nuclight.livejournal.com
Ну в линуксе с iproute2 нечто подобное. Можно посмотреть на их CONNMARK.

Date: 2012-05-18 02:56 pm (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
ну понятно что идеологически что-то иное трудно придумать.
но синтаксис у них -- бюэ

Date: 2012-05-29 11:32 pm (UTC)
From: [identity profile] ra-ga.livejournal.com
что-то похожее можно посмотреть в linux с его fwmark. т.е. в фаерволе мы по разным критериям(в том числе и наличию стейта) вешать метки, а дальше пишем политики и в зависимости от метки решаем судьбу пакета.

Date: 2012-05-30 02:02 am (UTC)
From: [identity profile] victor-sudakov.livejournal.com
Примерно понял. Нечто подобное наверное можно изобразить и на нынешнем ipfw с помощью tag и setfib, но опять же это только низкоуровневый инструмент в руках. Осмелюсь заметить, что usability у такого способа низкая.

Date: 2012-05-31 11:21 pm (UTC)
From: [identity profile] nuclight.livejournal.com
Не всё так просто и в линуксе, чуть шаг в сторону, например в виде редиректов на внутренние машины (вполне частая задача на практике), и тоже становится сложно, вот пример:
http://habrahabr.ru/post/49137/
http://habrahabr.ru/post/55132/

Там, конечно, лишнего хватает, вот статья с чисто экстрактом правил по теме:
http://habrahabr.ru/post/117620/
И объяснением, что:
Если пакет вошёл через второго провайдера, он NAT-ится на наш сервер, обрабатывается, образуется ответный пакет, который выходит через первого провайдера… а почему? Потому, что сначала в Linux происходит маршрутизация, а потом уже SNAT.

Почти такие же наши tag, причем вызванные тем, что у них порядок прохождения пакета по стеку жестко фиксирован.

Я надеюсь с помощью ruletable на месте вызова ip rule + возможности setfib в файрволе - делать их в динамических правилах - сделать так, что у нас эта задача будет конфигурироваться проще.

Date: 2012-05-18 01:24 am (UTC)
From: [identity profile] nuclight.livejournal.com
Э, не, это точно не ко мне. В таком разрезе получится новый файрвол, а не правка существующего, и тогда это будет просто еще один новый никому не нужный файрвол. С таким подходом это тебе на http://userfw.net - чувак пишет вещь, на мой взгляд, мертворожденную.

Нет, я буду реформировать имеющийся (и кроме того, так вероятность приема в базу нужных изменений в стеке куда выше).

> да, краткое размышление говорит о том, что pbr в файрволе не нужен, нужен отдельный модуль в роутинге для pbr, который может использовать информацию о state (flow) из файрвола для роутинга. это архитектурно-идеологически выглядит более правильно.

А с точки зрения интерфейса юзера это как должно выглядеть? У меня из примеров перед глазами только iproute2 с CONNMARK

Date: 2012-05-18 02:55 pm (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
Э, не, это точно не ко мне. В таком разрезе получится новый файрвол, а не правка существующего

существующий править бесполезно.

С таким подходом это тебе на http://userfw.net - чувак пишет вещь, на мой взгляд, мертворожденную.

не понял цимуса

А с точки зрения интерфейса юзера это как должно выглядеть? У меня из примеров перед глазами только iproute2 с CONNMARK

ну скажем так

mark 'bge0' from any to any recv bge0

и в модуле pbr

route mark 'bge0' 1.2.3.4

предполагается, что все statefull, специально указывать что надо поддерживать state и flow не требуется и для всякого последующего файрвольного правила типа

allow from any to me port 69

будет созданно state с mark 'bge0' и для всех пакетов flow, попадающего под этот state будет повешен mark 'bge0'

как-то так, очень грубо.

Date: 2012-05-31 10:16 pm (UTC)
From: [identity profile] nuclight.livejournal.com
> существующий править бесполезно.

Я так не считаю, и это один из центральных моментов моего проекта. Я буду править существующий.

>"С таким подходом это тебе на http://userfw.net - чувак пишет вещь, на мой взгляд, мертворожденную."
> не понял цимуса


Ну или вот http://blog.imax.in.ua/2012/02/userfw-freebsd.html почитай - чувак загорелся сделать новый файрвол. И делает. Даже код есть и как-то работает. По внутренней структуре (коя ему больше интересна) оно очень похоже на iptables, и в общем-то вполне годно и неплохо. Вот только нахуй никому не нужно, пара человек всего заинтересовалась за полгода. Он постоянно пристает в IRC к девелоперам, что на #freebsd, что на канале коммиттеров, "давайте пилить userfw". Но никто не хочет. Догадаешься, почему так?

> mark 'bge0' from any to any recv bge0

Как-то внутренняя работа всех этих конструкций не очень ясна. В iptables хотя бы явные копирования из тега пакета в тег flow...

Date: 2012-06-01 04:35 am (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
я не понимаю цимуса его проекта. нахуя?
что я, как пользователь, получу в результате?
он будет быстрее? удобнее его настраивать будет?
будет поддерживаться много протоколов?
короче, какие конкурентные преимущества?
нет?
ну или я не понял.
ну вот потому никто и не хочет.

ты, кстати, рискуешь получить тоже самое.

Как-то внутренняя работа всех этих конструкций не очень ясна. В iptables хотя бы явные копирования из тега пакета в тег flow...

не понимаю вопроса

February 2017

S M T W T F S
   1 234
567891011
12131415161718
19202122232425
262728    

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 6th, 2025 09:15 am
Powered by Dreamwidth Studios