The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Итоги встречи разработчиков OpenBSD в Словении: nginx займет..., opennews (??), 24-Сен-11, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


27. "Итоги встречи разработчиков OpenBSD в Словении: nginx займет..."  +/
Сообщение от Аноним (-), 25-Сен-11, 16:16 
>Но в пределах одного домена маршрутизации, так как он устанавливается в рамках процесса.

Может, проще будет сделать как у пингвинов, возможность выбора домена маршрутизации на основании некоторой логики (в частности, собственного айпишника)?

Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

30. "Итоги встречи разработчиков OpenBSD в Словении: nginx займет..."  +/
Сообщение от PereresusNeVlezaetBuggy (ok), 25-Сен-11, 18:33 
>>Но в пределах одного домена маршрутизации, так как он устанавливается в рамках процесса.
> Может, проще будет сделать как у пингвинов, возможность выбора домена маршрутизации на
> основании некоторой логики (в частности, собственного айпишника)?

Эм. Вот у вас два домена маршрутизации. В одном из них ваш айпишник 192.168.0.4. Во втором ваш айпишник... 192.168.0.4. Как вы будете их отличать? :)

А вообще, я выразился неправильно выше (в который раз говорю себе не выпускать в свет написанное на сон грядущий...): не несколько экземпляров ntpd теперь будет работать, а именно что один, но слушающий в нескольких доменах маршрутизации. В файле конфигурации это может выглядеть, например, так:


listen on *
listen on 192.168.5.9 rtable 5
servers ru.ntp.pool.org rtable 3

Ответить | Правка | Наверх | Cообщить модератору

35. "Итоги встречи разработчиков OpenBSD в Словении: nginx займет..."  +/
Сообщение от Аноним (-), 25-Сен-11, 20:18 
>Эм. Вот у вас два домена маршрутизации. В одном из них ваш айпишник 192.168.0.4. Во втором ваш айпишник... 192.168.0.4.

И они оба висят на одном сетевом интерфейсе, да?

Ответить | Правка | Наверх | Cообщить модератору

38. "Итоги встречи разработчиков OpenBSD в Словении: nginx займет..."  +/
Сообщение от PereresusNeVlezaetBuggy (ok), 26-Сен-11, 02:27 
>>Эм. Вот у вас два домена маршрутизации. В одном из них ваш айпишник 192.168.0.4. Во втором ваш айпишник... 192.168.0.4.
> И они оба висят на одном сетевом интерфейсе, да?

Позвольте процитировать ваши слова:

>>> Может, проще будет сделать как у пингвинов, возможность выбора домена маршрутизации на
>>> основании некоторой логики (в частности, собственного айпишника)?

Слово "интерфейс" здесь отсутствует.

Что касается новой версии вашего предложения - в OpenBSD можно указать таблицу маршрутизации для конкретного сокета (опция SO_RTABLE для setsockopt(2)). Но это уже требует изменения кода программы - равно как, впрочем, и в случае любой другой "логики".

Если я вас понял неправильно, пожалуйста, поясните, о чём вы вообще говорите, какой конкретно момент вам кажется спорным.

Ответить | Правка | Наверх | Cообщить модератору

43. "Итоги встречи разработчиков OpenBSD в Словении: nginx займет..."  +/
Сообщение от Аноним (-), 26-Сен-11, 14:02 
>Слово "интерфейс" здесь отсутствует.

Вы полагаете, мне стоило перечислить _все_ критерии, которые могут быть использованы в этой самой логике, не ограничиваясь одним примером? Боюсь, это была бы работа на полчаса как минимум.

>Что касается новой версии вашего предложения - в OpenBSD можно указать таблицу маршрутизации для конкретного сокета (опция SO_RTABLE для setsockopt(2)). Но это уже требует изменения кода программы - равно как, впрочем, и в случае любой другой "логики".

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

Кстати, инновационный пингвиний systemd позволяет использовать тегированные сокеты без модификации кода приложения (один из немногих проектов, использующих самые вкусные возможности POSIX IPC).

>Если я вас понял неправильно, пожалуйста, поясните, о чём вы вообще говорите, какой конкретно момент вам кажется спорным.

Мне кажется, механизм прямой привязки rtable к сокету несколько дубов. Возможно, достаточно было бы обеспечить поддержку тегирования трафика на сокетах, чтобы потом средствами pf выполнять дальнейшую обработку?

Ответить | Правка | Наверх | Cообщить модератору

44. "Итоги встречи разработчиков OpenBSD в Словении: nginx займет..."  +/
Сообщение от PereresusNeVlezaetBuggy (ok), 26-Сен-11, 14:40 
>>Слово "интерфейс" здесь отсутствует.
> Вы полагаете, мне стоило перечислить _все_ критерии, которые могут быть использованы в
> этой самой логике, не ограничиваясь одним примером? Боюсь, это была бы
> работа на полчаса как минимум.

Все, не все, но вы бы лучше уточнили сами сразу. :) А то догадки бывают и ошибочными.

>>Что касается новой версии вашего предложения - в OpenBSD можно указать таблицу маршрутизации для конкретного сокета (опция SO_RTABLE для setsockopt(2)). Но это уже требует изменения кода программы - равно как, впрочем, и в случае любой другой "логики".
> Пингвины используют более универсальную логику: у них есть возможность тегировать пакеты
> для конкретного сокета (опция SO_MARK), и на основании этих тегов обрабатывать
> пакеты в дальнейшем (сюда входит маршрутизация, шейпинг, фильтрация, нат, модификация
> заголовков и т.д.)

Тегирование в PF делается внутри него самого (см. опции правил фильтрации "tag" и "tagged"), в остальном тот же самый принцип вполне работоспособен. ИМХО, тегировать в самом фаерволе несколько секурнее, хотя это и убирает какую-то долю гибкости.

Зато отсутствие доменов маршрутизации в Linux заметно усложняет работу, а некоторые вещи становятся чрезвычайно трудными или даже невозможными, когда в разных доменах маршрутизации используются одинаковые локальные и/или удалённые адреса. Так что OpenBSD суммарно оказывается более гибкой.

> Кстати, инновационный пингвиний systemd позволяет использовать тегированные сокеты без
> модификации кода приложения (один из немногих проектов, использующих самые вкусные возможности
> POSIX IPC).

А можно, пожалуйста, поподробнее?

>>Если я вас понял неправильно, пожалуйста, поясните, о чём вы вообще говорите, какой конкретно момент вам кажется спорным.
> Мне кажется, механизм прямой привязки rtable к сокету несколько дубов. Возможно, достаточно
> было бы обеспечить поддержку тегирования трафика на сокетах, чтобы потом средствами
> pf выполнять дальнейшую обработку?

Ну почему дубов, он скорее более очевиден для логики программы: указывая домен роутинга, программа гарантированно получает то, чего хочет. А указывая некий абстрактный тег, программа начинает зависеть от того, что там в фаерволе наконфигурировано, то есть образуется вынужденная дополнительная связь между конфигурируемыми вручную компонентами. Не смертельно, конечно, но всё же.

Ответить | Правка | Наверх | Cообщить модератору

47. "Итоги встречи разработчиков OpenBSD в Словении: nginx займет..."  +/
Сообщение от Аноним (-), 26-Сен-11, 15:38 
>Зато отсутствие доменов маршрутизации в Linux заметно усложняет работу, а некоторые вещи становятся чрезвычайно трудными или даже невозможными, когда в разных доменах маршрутизации используются одинаковые локальные и/или удалённые адреса.

Вместо доменов маршрутизации там используются отдельные таблицы маршрутизации, управляемые через таблицу правил. Решение не менее фичастое, и даже более гибкое.
Приходилось иметь дело с ситуациями, когда нужно было поддерживать несколько интерфейсов с одинаковыми или пересекающимися адресными пространствами - на мой взгляд, пингвин предоставляет больше всего возможностей. А после введения conntrack zones вообще лафа пошла.

> Так что OpenBSD суммарно оказывается более гибкой.

На мой взгляд, очень спорное утверждение.

> А можно, пожалуйста, поподробнее?

Процессы могут передавать друг другу открытые fd. Такая прекрасная идея, а воспользовались ею только в launchd и в systemd (который во многом скопирован с launchd).

>А указывая некий абстрактный тег, программа начинает зависеть от того, что там в фаерволе наконфигурировано, то есть образуется вынужденная дополнительная связь между конфигурируемыми вручную компонентами.

Это называется unix way: каждый инструмент решает свою задачу -> в результате имеем максимальную гибкость.

Ответить | Правка | Наверх | Cообщить модератору

49. "Итоги встречи разработчиков OpenBSD в Словении: nginx займет..."  +/
Сообщение от PereresusNeVlezaetBuggy (ok), 26-Сен-11, 16:49 
>>Зато отсутствие доменов маршрутизации в Linux заметно усложняет работу, а некоторые вещи становятся чрезвычайно трудными или даже невозможными, когда в разных доменах маршрутизации используются одинаковые локальные и/или удалённые адреса.
> Вместо доменов маршрутизации там используются отдельные таблицы маршрутизации, управляемые
> через таблицу правил. Решение не менее фичастое, и даже более гибкое.

Гм. А в чём принципиальное отличие от "match <...> rtable N"? (смена таблицы маршрутизации для пакета средствами PF)

> Приходилось иметь дело с ситуациями, когда нужно было поддерживать несколько интерфейсов
> с одинаковыми или пересекающимися адресными пространствами - на мой взгляд, пингвин
> предоставляет больше всего возможностей. А после введения conntrack zones вообще лафа
> пошла.

Ну да в PF нет conntrack zones, так как у PF изначально не было проблем, которые conntrack zones решают. :)

>> Так что OpenBSD суммарно оказывается более гибкой.
> На мой взгляд, очень спорное утверждение.

Ну вот, собственно, мы и спорим. :)

>> А можно, пожалуйста, поподробнее?
> Процессы могут передавать друг другу открытые fd. Такая прекрасная идея, а воспользовались
> ею только в launchd и в systemd (который во многом скопирован
> с launchd).

Понял, спасибо.

>>А указывая некий абстрактный тег, программа начинает зависеть от того, что там в фаерволе наконфигурировано, то есть образуется вынужденная дополнительная связь между конфигурируемыми вручную компонентами.
> Это называется unix way: каждый инструмент решает свою задачу -> в результате
> имеем максимальную гибкость.

Правильно. Таблица маршрутизации и фаервол - немного разные инструменты. В вашем случае обе функции ложатся на фаервол. Что вы там говорили про unix way? ;)

Всё то, что вы пока что описываете как фичи netfilter, в PF имеется (что-то давным-давно, что-то не очень). Поэтому реализовать ваш вариант можно и на OpenBSD (да и на FreeBSD как минимум тоже, ipfw местный в последнее время становится всё более человеческим). Но зачем, если есть нормально работающие домены маршрутизации? :)

Ответить | Правка | Наверх | Cообщить модератору

53. "Итоги встречи разработчиков OpenBSD в Словении: nginx займет..."  +/
Сообщение от коксюзер (?), 26-Сен-11, 18:02 
>> Процессы могут передавать друг другу открытые fd. Такая прекрасная идея, а воспользовались
>> ею только в launchd и в systemd (который во многом скопирован
>> с launchd).
> Понял, спасибо.

А я, вот, не понял. Передача дескрипторов требует явного вызова send/recvmsg(2), и как это сделать без  изменений в коде, не используя рантайм-враппер?

Ответить | Правка | Наверх | Cообщить модератору

58. "Итоги встречи разработчиков OpenBSD в Словении: nginx займет..."  +/
Сообщение от Аноним (-), 26-Сен-11, 19:23 
> как это сделать без  изменений в коде, не используя рантайм-враппер?

Для возможности принять сокеты - да, код нужно модифицировать :)
Собственно, сейчас эта работа уже идет, как на уровне отдельных дистрибутивов, так и в апстримных проектах.
Важно то, что после завершения этого процесса, свойства сокетов можно менять без вмешательства в код программы.

Ответить | Правка | Наверх | Cообщить модератору

59. "Итоги встречи разработчиков OpenBSD в Словении: nginx займет..."  +/
Сообщение от Аноним (-), 26-Сен-11, 19:40 
> Гм. А в чём принципиальное отличие от "match <...> rtable N"? (смена
> таблицы маршрутизации для пакета средствами PF)

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

> Ну да в PF нет conntrack zones, так как у PF изначально
> не было проблем, которые conntrack zones решают. :)

Он всегда умел отслеживать соединения в нескольких доменах маршрутизации? Не знал.

> Правильно. Таблица маршрутизации и фаервол - немного разные инструменты. В вашем случае
> обе функции ложатся на фаервол. Что вы там говорили про unix
> way? ;)

Авторы netfilter позиционируют его не просто как фаервол, а как "фреймворк для фильтрации и модификации пакетов". Присвоение пакету тегов - чем не модификация?
Этот же подход, кстати, справедлив и для pf. Ведь он тоже умеет не только блокировать/пропускать пакеты, правда?

Кстати, одно занудное замечание: netfilter, в отличие от pf, не имеет возможности напрямую вмешаться в процесс маршрутизации. Когда-то существовало патч, вводящий действие ROUTE, аналогичное rtable в pf, но его так и не приняли в ядро. Логика выбора таблицы реализована в самой системе маршрутизации. netfilter может лишь менять теги, являющиеся одним из критериев этой логики. Но он не является монополистом в этой области - вот в чем весь цимес.

> Всё то, что вы пока что описываете как фичи netfilter, в PF
> имеется (что-то давным-давно, что-то не очень). Поэтому реализовать ваш вариант можно
> и на OpenBSD (да и на FreeBSD как минимум тоже, ipfw
> местный в последнее время становится всё более человеческим).

В OpenBSD и FreeBSD приложения могут выставлять для своего трафика теги, которые понимает система маршрутизации?

> Но зачем, если есть нормально работающие домены маршрутизации? :)

Зачем делать гибкое модульное решение, если костыли неплохо подпирают другие костыли?
Ну, считайте меня перфекционистом :)

Ответить | Правка | К родителю #49 | Наверх | Cообщить модератору

74. "Итоги встречи разработчиков OpenBSD в Словении: nginx займет..."  +/
Сообщение от PereresusNeVlezaetBuggy (ok), 26-Сен-11, 22:58 
>> Гм. А в чём принципиальное отличие от "match <...> rtable N"? (смена
>> таблицы маршрутизации для пакета средствами PF)
> Вот про это я и говорил. Еще бы добавить возможность тегирования непосредственно
> из приложения или хотя бы из враппера - и костыли можно
> будет спокойно отбросить.

Гм. Для вас домены маршрутизации - это костыли? Бывает. :)

>> Ну да в PF нет conntrack zones, так как у PF изначально
>> не было проблем, которые conntrack zones решают. :)
> Он всегда умел отслеживать соединения в нескольких доменах маршрутизации? Не знал.

Да, с момента появления доменов маршрутизации в OpenBSD. Хотя, справедливости ради, скажу, что несколько багов (именно багов) было пофиксено позднее. Ну да кто без греха...

>> Правильно. Таблица маршрутизации и фаервол - немного разные инструменты. В вашем случае
>> обе функции ложатся на фаервол. Что вы там говорили про unix
>> way? ;)
> Авторы netfilter позиционируют его не просто как фаервол, а как "фреймворк для
> фильтрации и модификации пакетов". Присвоение пакету тегов - чем не модификация?
> Этот же подход, кстати, справедлив и для pf. Ведь он тоже умеет
> не только блокировать/пропускать пакеты, правда?

Я всего лишь запустил ответную шпильку. ;)

> Кстати, одно занудное замечание: netfilter, в отличие от pf, не имеет возможности
> напрямую вмешаться в процесс маршрутизации. Когда-то существовало патч, вводящий действие
> ROUTE, аналогичное rtable в pf, но его так и не приняли
> в ядро. Логика выбора таблицы реализована в самой системе маршрутизации. netfilter
> может лишь менять теги, являющиеся одним из критериев этой логики. Но
> он не является монополистом в этой области - вот в чем
> весь цимес.

ROUTE, по-моему, скорее соответствовал route-to в PF, которая опция по сути "перекрывает" стандартную маршрутизацию для данного пакета/соединения. Это параллельная доменам маршрутизации фича.

>> Всё то, что вы пока что описываете как фичи netfilter, в PF
>> имеется (что-то давным-давно, что-то не очень). Поэтому реализовать ваш вариант можно
>> и на OpenBSD (да и на FreeBSD как минимум тоже, ipfw
>> местный в последнее время становится всё более человеческим).
> В OpenBSD и FreeBSD приложения могут выставлять для своего трафика теги, которые
> понимает система маршрутизации?

Я уже говорил, что в PF напрямую можно тегировать только его средствами. Это как-то более надёжно, ИМХО, чем позволять приложениям выставлять теги. Что будет, если через взлом одного приложения атакующий получит возможность отправлять трафик от имен доверенного?

С другой стороны, в PF можно динамически добавлять-удалять правила, не мешая друг другу,  недавно даже появилась возможность задания одноразовых правил, которые самоудаляются после первого срабатывания. Можно и напрямую добавлять-удалять стейты. Так что аналогичная функциональность, повторюсь, вполне доступна.

Что до FreeBSD, то вроде бы там ситуация аналогичная, но утверждать это со 100% уверенностью не буду.

>> Но зачем, если есть нормально работающие домены маршрутизации? :)
> Зачем делать гибкое модульное решение, если костыли неплохо подпирают другие костыли?
> Ну, считайте меня перфекционистом :)

Затем же, зачем существуют не-универсальные отвёртки. ;) То, что потребует больших усилий и аккуратности при реализации на фаерволе, может легко решаться посредством доменов роутинга. При желании можно любую задачу фильтрации пакетов свести к тегированию и последующему разбору по тегам. Но практичным этот подход назвать никак нельзя. Это не перфекционизм, это идеализм. :)

Ответить | Правка | Наверх | Cообщить модератору

78. "Итоги встречи разработчиков OpenBSD в Словении: nginx займет..."  +/
Сообщение от Аноним (-), 27-Сен-11, 00:16 
> Для вас домены маршрутизации - это костыли?

В современном, жестком и дубовом их виде - да.

> ROUTE, по-моему, скорее соответствовал route-to в PF

Да, точно. Про аналог rtable было в другом обсуждении, не имевшем практических последствий.

>Я уже говорил, что в PF напрямую можно тегировать только его средствами. Это как-то более надёжно, ИМХО, чем позволять приложениям выставлять теги. Что будет, если через взлом одного приложения атакующий получит возможность отправлять трафик от имен доверенного?

В случае с systemd, выставлением тегов занимается процесс init, работающий от рута. Вы полагаете, что в случае исполнения кода в контексте init будет существенной проблемой модифицировать правила фаервола?

>Так что аналогичная функциональность, повторюсь, вполне доступна.

Не вполне понимаю. Не могли бы вы привести пример реализации тегирования пакетов, связанных с заданным сокетом (порт и PID процесса заранее не известны)?

>То, что потребует больших усилий и аккуратности при реализации на фаерволе, может легко решаться посредством доменов роутинга.

Костыль обычно всегда проще прямого решения, поэтому костыли столь популярны.

>Но практичным этот подход назвать никак нельзя.

Да, пусть лучше костыль на костыле сидит и костылем погоняет. Не слушайте старого идеалиста, он бредит.

Ответить | Правка | Наверх | Cообщить модератору

80. "Итоги встречи разработчиков OpenBSD в Словении: nginx займет..."  +/
Сообщение от PereresusNeVlezaetBuggy (ok), 27-Сен-11, 01:41 
>> Для вас домены маршрутизации - это костыли?
> В современном, жестком и дубовом их виде - да.

Дубовом? o_O А мужики-то и не знают. Я-то думал, что когда получается быстрее (пробежаться по таблице роутинга быстрее, чем по правилам фаервола), надёжнее (меньше ручной работы = меньше вероятность ошибки конфигурирования) и проще (каждая задействованная сущность проста доступнее в изучении, чем комплексное решение на фаерволе), то оно лучше, ан вот оно как... :)

Я не спорю, что какие-то ситуации наоборот, кроме как тегированием решить нельзя. Но то, что как минимум ситуации с одноимёнными маршрутами в контексте доменов маршрутизации решаются лучше - отрицать, мягко говоря, странно. Ну да то не мои проблемы, что я буду переубеждать. :)

>>Я уже говорил, что в PF напрямую можно тегировать только его средствами. Это как-то более надёжно, ИМХО, чем позволять приложениям выставлять теги. Что будет, если через взлом одного приложения атакующий получит возможность отправлять трафик от имен доверенного?
> В случае с systemd, выставлением тегов занимается процесс init, работающий от рута.
> Вы полагаете, что в случае исполнения кода в контексте init будет
> существенной проблемой модифицировать правила фаервола?

Гм. systemd использует тегирование пакетов для эмуляции доменов маршрутизации? o_O

Давайте мух отдельно, котлеты отдельно (это я в свете грядущих выборов, ага). Я говорил про ситуацию, когда произвольное приложение (не-рутовое) имеет возможность фактически отправить трафик от имени рутового. Понимаете? Получается, надо всё равно давать возможность фаерволу проверять источник пакета. Что приводит в итоге к, фактически, тегированию силами фаервола.

Кстати, если не секрет, а чего это SO_MARK до сих пор не документирован? Я нашёл было ссылку на багзиллу, датированную ещё 2010-м годом, да вот беда: kernel.org-то до сих пор не реанимирован (полностью)... Может, именно из-за описанных выше причин?

Теперь о systemd и других рутовых процессах. Использование тегов сокета в рутовом приложении ничего не даст для этого приложения с точки зрения безопасности. Но:

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

То есть всё для того, чтобы не было _необходимости_ (не возможности) использовать именно тегирование, по-хорошему уже должно быть. А если нет, то у вас уже есть проблема с угрозой безопасности. И, возможно, не одна.

>>Так что аналогичная функциональность, повторюсь, вполне доступна.
> Не вполне понимаю. Не могли бы вы привести пример реализации тегирования пакетов,
> связанных с заданным сокетом (порт и PID процесса заранее не известны)?

Первый пришедший в голову пример, статика:

match out on <...> user my_daemon_user tag i_want_special_handling

Более сложный, динамика (для понятности даю командами шелла, в Си суть аналогичная):

echo "match from $my_addr port $my_port user $my_daemon_user to $peer_addr port $peer_port once tag i_want_special_handling" | \
pfctl -a myprog/$PPID -f -

Разумеется, вместо tag может быть и любое другое действие, но коли уж говорим о тегировании, то примеры именно с опцией "tag".

>>То, что потребует больших усилий и аккуратности при реализации на фаерволе, может легко решаться посредством доменов роутинга.
> Костыль обычно всегда проще прямого решения, поэтому костыли столь популярны.

Господи, ну хотите, считайте костылём, жалко, что ли. :)

>>Но практичным этот подход назвать никак нельзя.
> Да, пусть лучше костыль на костыле сидит и костылем погоняет. Не слушайте
> старого идеалиста, он бредит.

Да делайте как хотите. Вы же себе жизнь усложняете, а не мне. :)

Ответить | Правка | К родителю #78 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру