Редактирование: UNИX, весна 2009, 03 лекция (от 11 марта)

Материал из eSyr's wiki.

Перейти к: навигация, поиск

Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.

ПРЕДУПРЕЖДЕНИЕ: Длина этой страницы составляет 43 килобайт. Страницы, размер которых приближается к 32 КБ или превышает это значение, могут неверно отображаться в некоторых браузерах. Пожалуйста, рассмотрите вариант разбиения страницы на меньшие части.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.

Текущая версия Ваш текст
Строка 55: Строка 55:
Пример с fwd лектор приводить не будет, это довольно редкая штука, но она полезна, с той разницей, что та машина, куда fwd, не должна из пугаться.
Пример с fwd лектор приводить не будет, это довольно редкая штука, но она полезна, с той разницей, что та машина, куда fwd, не должна из пугаться.
-
В принципе, слово ip лишь синоним для all. Можно писать ip6 или ip4, но на уровне ipfw предп., что мы оперирруем пакетами именно такого сорта.
+
В принципе, слово ip лишь синоним для all. Можно писать ip6 или ip4, но на уровне ipfw предп., что мы поерирруем пакетами именно такого сорта.
-
Разумеется, вместо any можно написать любой адрес или сеть, а также me. Довольно удобно, когда интерфейсов много и разных.
+
Разумеется, вместо any можно написать лбюой адрес или сеть, а также me. Довольно удобно, когда интерфейсов много и разных.
-
В случае, когда мы оперируем пакетами подобным родом, выбор у нас довольно небольшой, указать тип пакета, откуда и куда.
+
В случае, когда мы оперируем пакетами подобным родом,выбор у нас довольно небольшой, указать тип пакета, откуда и куда.
Помимо тех действий, которые лектор рассказал, может быть что ещё.
Помимо тех действий, которые лектор рассказал, может быть что ещё.
-
Про NAT. В ipfw2 появилась встроенная поддержка nat, но лектор никогда ею не пользовался. Лектор лучше расскажет, как был устроен nat изначально. Как лектор говорил на предыдущей лекции, nat делался в юзерспейсе.
+
Про nat. В ipfw2 появилась встроенная поддержка nat, но лектор никогда её не пользовался. Лектор лучше расскажет, как был устроен nat изначально. Как лектор говорил на предыдущей лекции, nat делался в юзерспейсе.
( Многие до сих пор думают, что все работает через natd и реализуют nat с помощью pf. Однако в 2005 году на google summer of code для ipfw была написана реализация nat на уровне ядра, как написать правила можно посмотреть в мане )
( Многие до сих пор думают, что все работает через natd и реализуют nat с помощью pf. Однако в 2005 году на google summer of code для ipfw была написана реализация nat на уровне ядра, как написать правила можно посмотреть в мане )
-
В bsd есть такие divert sockets, которые позволяют иметь сокет из ядра в юзерспейс. Как это реализуется:
+
В bsd есть такие divert sockets, которые позволяют иметь сокет изх ядра в юзерспейс. Как это реализуется:
{divert tee } <port>
{divert tee } <port>
-
То есть, мы пренаправляем пакет в указанный divert-сокет. При этом в userspace должна быть запущена некая программа, которая слушает его, и оттуда стандартными командами (recvfrom) будет читать. Она эти пакеты обрабатывает, и потом стандартными командами (sendto). Что она с ними делает - это её личная проблема. В результате пакет попадает сразу за правилом и обр. дальше.
+
То есть, мы пренаправляем пакет в указанный divert-сокет. При этом в userspace должна быть запущенна некая программа, которая слушает его, и оттуда стандартными командами (recvfrom) будет читать. Она эти пакеты обрабатывает, и потом стандартными командами (sendto). Что она с ними делает, это её личная проблема. В результате пакет попадает сразу за правилом и обр. дальше.
-
В отличие от бейсика, можно иметь несколько правил за одним номером, чтобы можно было удалять блоками. Идея в чём: если таких правил много, то они, даже те, которые идут под одним и тем же номером, и пакет будет обр. след. правилом в таблице.
+
В отличие от бейсика, можно иметь несколько правил за одним номером, чотбы можно было удалять блоками. идея в чём: если таких правил много, то они, даже те, которые идут под одним и тем же номером, и пакет будет обр. след. правилом в таблице.
-
Зачем нужен divert сокет? Чтобы делать с пакетами что угодно, не занимаясь написанием ядерного модуля. Кстати сказать, если на сокете никто не сидит, то пакет просто пропадает. Кроме того, эта команда асинхронная: фаерволл работает дальше, в это время юзерспейс-программа прочухается, что-то запишет обратно и тогда дальше обр. этот пакет.
+
Зачем нужен divert сокет? Чтобы делать с пакетами что угодно, не занимаясь написанием ядерного могуля. Кстати сказать, если на сокете никто не сидит, то пакет просто пропадает. Кроме того, эта команда асинхронная: фаерволл работает дальше, в это время юзерспейс-программа прочухается, что-то запишет обратно и тогда дальше обр. этот пакет.
Чем отл. divert от tee: divert просто перенаправляет, а tee его раздваивает.
Чем отл. divert от tee: divert просто перенаправляет, а tee его раздваивает.
-
В станд. поставке лектор обнаружил ровно один демон, natd, и догадайтесь что он делает. natd - это просто юзерспейс-программа, у него в районе 2 десятков ключей, делает всё, что полагается нату, может натить на входе, на выходе.
+
В станд. поставке лектор обнаружил ровно один демон, natd, и догадайтесь, что он делает. natd это просто юзерспейс-программа, у него в районе 2 десятков ключей, делает всё, что полагается нату, может натить на входе, на выходе.
-
По всей видимости, это направление развилось бы и дальше, поск. если мы хотим произвольным обр. пакеты, ... например, присобачить netgraph, даже action есть:
+
По всей видимости, это направление развиолсь бы и дальше, поск. если мы хотим произвольным обр. пакеты, ... например, присобачить netgraph, даже action есть:
netgraph <надпись>
netgraph <надпись>
Исп. divert и netgrapha отл. тем, что netgraph работает очень быстро.
Исп. divert и netgrapha отл. тем, что netgraph работает очень быстро.
Строка 83: Строка 83:
Помимо netgraph есть ещё ngtee.
Помимо netgraph есть ещё ngtee.
-
Правило типа count это понятно что. Довольно забавно: у каждого такого правила есть счётчик, сколько оно применялось, это особенно полезно, чтобы посмотреть, применялось оно или нет. И count ничего не делает, только считает.
+
Правило типа count это понятно что. Довольно забавно: у каждого такого правила есть счётчик, сколько оно применялось, это особенно полезно, чтобы посмотреть, применялось оно или нет. И count ничег о не делает, только считает.
Очень важная вещь, это правило checkstate...
Очень важная вещь, это правило checkstate...
-
Очень страшная вещь: правило skipto <номер>. Это goto, как в настоящем бейсике. Поск. табличка линейчатая, то нужно делать переходы, можно, например, делать переходы назад, тогда он не вылезет из kernelspace и зависнет к чертям. Но без этой штуки обойтись нельзя, поск. пакеты, прох. через эти 5 точек, обр. ровно этим списком. Есть флаги, которые позв. фильтровать, и иногда удобно проверить флаги и сделать skipto.
+
Очень страшная вещь: правило skipto <номер>. Это goto, как в настоящем бейсике. Поск. табличка линейчатая, то нужно делать переходы, можно, например, делать преходы назад, тода он не вылезет из kernelspace и зависнет к чертям. Но без этой штуки обойтись нельзя, поск. пакеты, прох. через эти 5 точек, обр. ровно этим списком. Есть флаги, которые позв. фильтровать, и иногда удобно проверить флаги и и сделать skipto.
Чего лектор не сказал: как работать с stateful firewall. Очень часто, особенно из сообр. быстродействия полезно делать вот что: мы наш пакет прогнали по всему своду правил, и в какой-то момент приняли решение, что этот пакет и все подобного класса надо пропускать, например, если уст. tcp-соединение, то надо все его пакеты пропускать. Как это делается: есть правило checkstate, у которого нет параметров. Правило типа check-state приводит к тому, что все пакеты, дошедшие досюда, проверяются частью фаерволла, хранящей состояние.
Чего лектор не сказал: как работать с stateful firewall. Очень часто, особенно из сообр. быстродействия полезно делать вот что: мы наш пакет прогнали по всему своду правил, и в какой-то момент приняли решение, что этот пакет и все подобного класса надо пропускать, например, если уст. tcp-соединение, то надо все его пакеты пропускать. Как это делается: есть правило checkstate, у которого нет параметров. Правило типа check-state приводит к тому, что все пакеты, дошедшие досюда, проверяются частью фаерволла, хранящей состояние.
Строка 93: Строка 93:
почему это делается не сразу: поскольку проверка сост. это довольно тяжёлая процедура, и если можно отфильтровать пакет без неё, то лучше это сделать.
почему это делается не сразу: поскольку проверка сост. это довольно тяжёлая процедура, и если можно отфильтровать пакет без неё, то лучше это сделать.
-
правило checkstate делает ещё одну вещь: ещё при этом проверяются пресловутые состояния, то есть,. если у вас пакет принадл. потоку данных, у которого сохр. состояние, то это правило будет ему применено. Как правило, это allow.
+
правило checkstate делает ещё одну вещь: ещё при этом проверяются пресловутые состояния, то есть,. если у вас пакет принаддл. потоку данных, у которого сохр. состояние, то это правило будет ему применено. Как правило, это allow.
510 deny all from any to any astablished
510 deny all from any to any astablished
520 allow tcp from any to any ...
520 allow tcp from any to any ...
-
Stateful firewall устроен след. образом: есть флаг keep state, который запоминает состояние, что такой уже пропускали. Это сост. проверяется checkstate, и если среди этих сост. есть такое правило, то оно применяется, в противном случае он проваливается дальше.
+
Stateful ашкуцфдд ecnhjty cktl. образом: есть флаг keep state, которые запоминаен состояние, что такой уже пропускали. Это сост. проверяется checkstate, и если среди этих сост. есть такое правило, то оно применяется, в противном случае он проваливается дальше.
-
stateful firewall это способ его убыстрить сильно, одной командой проверить, не имеет ли данный пакет отношения к таким, которые мы уже проверяли.
+
stateful firewall это способ его убыстрить сильно, одной командой проверить, не имеет ли данный пакет отношения к таим, которые мы уже рповеряли.
-
Общая идея состоит в том, что мы допускаем пакеты типа setup, то есть начала tcp-сессий, после чего говорим сохр. сост., после чего говорим, что бы такие пакеты проходили.
+
ОБщая идея состоит в том, что мы допускаем пакты типа setup, то есть начала tcp-сессий, после чего говорим сохр. сост., после чего новаорим, чот ве такие пакеты проходили.
-
Что касается огр. трафика: есть каманда pipe, queue. Чтобы оно работало, нужно, чтобы в ядро был вкопилирован модуль ..., это такой эмулятор сети. Идея том, чтобы прежде, чем пакет отсылать, оно сначала засовывается в трубу с соотв. номером, труба с точки зрения польз. предст. собой некий конвейер, у которого опр. пропуск. способность, кроме того, у него есть другие параметры: опр. процент потери пакетов, длина очереди и так далее. У queue такого нет, зато есть разные политики.
+
Что касается огр. трафика: есть каманда pipe, queue. Чтобы оно работало, нужно, чтобы в ядро был вкопилирован модуль ..., это такой эмулятор сети. Идея том, чтобы прежде, чем пакет отсылать, оно сначлаа засовывается в трубу с соотв. номером, труба с точки зрения польз. предст. сосбой некий конвейер, у которого опр. пропуск. способность, кроме того, у него есть другие параметры: опр. процент потери пакетов, длина очереди и так далее. У queue такого нет, зато есть разные политики.
Трубы, например, используются для борьбы с любителями осла, как только такой человек находится (по количеству одновр. соед. на извращ. порт), то он добавл. в блок адресов, которые пользуются одной довольно жёсткой трубой.
Трубы, например, используются для борьбы с любителями осла, как только такой человек находится (по количеству одновр. соед. на извращ. порт), то он добавл. в блок адресов, которые пользуются одной довольно жёсткой трубой.
Строка 108: Строка 108:
Можно делать дерево труб и так далее. Там есть ещё qos.
Можно делать дерево труб и так далее. Там есть ещё qos.
-
Относительно флагов. Мы помним из прошлого раза, что основной способ работы фаерволла состоит в том, что при прохождении через стек пакеты снабжаются разнообр. инф., и фаерволл на основании её решает, что с ним делать. Можно перед действием вставить tag #, это аналог -j MARK iptables, тегов может быть не более 65534 (0 и 1 заняты), и если у пакета есть тег, то можно с ним сделать что-то. теги не отклеиваются, когда он отправляется в divert socket, то теги с него снимаются, поск. это искл. kernel-space штука, а пока он ходит по ядру, они на нём висят.
+
Относительно флагов. Мы помним из прошлого раза, что основной способ рабоыт фаерволла состоит в том, что при прохождении через стек пакеты снабжаются разнообр. инф., и фаерволл на основании её решает, что с ним делать. Можно перед действием вставить tag #, это аналог -j MARK iptables, тегов может быть не более 65534 (0 и 1 заняты), и если у пакета есть тег, то можно с ним сделать что-то. теги не отклеиваются, когда он отправляется в divert socket, то теги с него снимаются, поск. это искл. kernel-space штука, а пока он ходит по ядру, они на нём висят.
-
Вкусности: можно указать вероятность применения правила.
+
Вкусности: можно укзаать вероятность применения правила.
Вопрос: откуда берётся энтропия?
Вопрос: откуда берётся энтропия?
Строка 116: Строка 116:
Ответ: вероятно, исп. не /dev/urandom, а что-то более простое.
Ответ: вероятно, исп. не /dev/urandom, а что-то более простое.
-
Ещё у каждого фаерволла можно указать set #, и можно выключать и включать правила блоками. После его упр. ими по крону, эмулируя два режима, например, дневной и ночной.
+
Ещё у каждого фаерволла можно указать set #, и можно выкючать и включать правила блоками. После его упр. ими по крону, эмулируя два режима, например, дневной и ночной.
Какие флаги: помимо типа, откуда и куда, может быть большой список разных флагов — дополн. св-в пакета:
Какие флаги: помимо типа, откуда и куда, может быть большой список разных флагов — дополн. св-в пакета:
* Если это исх. пакет, то можно затребовать uid, pid, gid и прочая (только в ipfw2)
* Если это исх. пакет, то можно затребовать uid, pid, gid и прочая (только в ipfw2)
-
* Если пакет ходил через divert, ходил через bridge, получил таг, то можно всё это проверить (diverted и так далее)
+
* Если пакет ходил через divert, ходил чреез bridge, получил таг, то можно всё это проверить (diverted и так далее)
* Фрагментированые пакеты
* Фрагментированые пакеты
* Есть in и out
* Есть in и out
-
* Во freebsd есть простая вирт. под названием jail, чтобы запустить процесс в изолированном файл. пространстве и ipc. Если пакет пришёл из jail, то можно узнать из какого. Ближайший аналог в линукс — vserver(?)
+
* Во freebsd есть простая вирт. подназванием jail, чтобы запустить процесс в изолированном файл. пространстве и ipc. Если пакет пришёл из jail, то можно узнать, из какого. Ближайший аналог в линукс — vserver(?)
-
В общем, тут чёрте сколько флагов, можно указывать виды icmp-трафик.
+
В общем, тут чёрте сколько флагом, можно указывать виды icmp-трафик.
Могут быть счётчики, напр. правило применяется не более чем столько-то раз, это актуально для stateful firewall-ов.
Могут быть счётчики, напр. правило применяется не более чем столько-то раз, это актуально для stateful firewall-ов.
Строка 130: Строка 130:
В ipfw2 есть также встроенный nat.
В ipfw2 есть также встроенный nat.
-
Чтобы закончить эту лекцию, что есть для поддержки со стороны юзерспейса: есть утилита ipfw, которая позв. делать всё, о чём говорили, из ком. строки. В rc-скриптах есть скрипты по запуску фаерволла, там указ. типа фаерволла, который пропис. правила по умолчанию и куда можно указ. путь к скрипту.
+
Чтобы закончить эту лекцию, что есть для поддержки со стороны юзерспейса: есть утилита ipfw, которая позв. делать всё, о чём говорили, из ком. строки. В rc-скриптах есть скрипты по запуску фаерволла, там указ. типа фаерволла, который пропис. правила по умолч и куда можно указ. путь к скрипту.
ipfw нужен не только для настр. правил, но и для настр. пайпов, очередей. В ipfw2 можно настр. таблицы адресов. Можно отдельно задать таблицу ip-адресов и исп. её в кач. адреса. Этим занимается ipfw table.
ipfw нужен не только для настр. правил, но и для настр. пайпов, очередей. В ipfw2 можно настр. таблицы адресов. Можно отдельно задать таблицу ip-адресов и исп. её в кач. адреса. Этим занимается ipfw table.
-
Чтобы закончить, лектор скажет так: ещё один способ. исп. set-ов след: заводите два сета, текущее и новое. Текущая табл. включена, новая выключена. Но когда работает ipfw, то он обр. все правила. В таком случае можно проверить неск. раз правила, как минимум на синтаксис, и только после этого сказать ipfw set swap.
+
Чтобы закончить, лектор скажет так: ещё один способ. исп. set-ов след: заводите два сета, текушее и новое. Текущая табл. включена, новая выключена. Но когда работает ipfw, то он обр. все правила. В таком случае можно проверить неск. раз правила, как минимум на синтаксис, и только после этого сказать ipfw set swap.
В след раз про check-state, nat и очереди.
В след раз про check-state, nat и очереди.

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. eSyr's_wiki:Авторское право).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Личные инструменты
Разделы