Редактирование: UNИX, весна 2009, 09 лекция (от 22 апреля)

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

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

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

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

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

Текущая версия Ваш текст
Строка 1: Строка 1:
* '''Диктофонная запись:''' http://esyr.org/lections/audio/uneex_2009_summer/uneex_09_04_22.ogg
* '''Диктофонная запись:''' http://esyr.org/lections/audio/uneex_2009_summer/uneex_09_04_22.ogg
-
Фактически, третью лекцию лектор пересказывает pf howto. В книге всё понятно, и её рекомендуется читать всем, даже если не собираетесь пользоваться pf.
+
Фактически, третью лекцию лектор пересказывает pf howto. В книге всё понятно, и её рекоимендуется читать всем, даже если не собир. пользоваться pf.
-
Поверхностность обманчива: pf устроен так, чтобы облегчить работу пользователю, и если заглянуть внутрь простого правила в pf, то на самом деле оно раскрывается в довольно сложный набор, и тенденция в том. Недавно на опеннете была информационка, что отменили scrub (пересборка пакетов). Основная задача scrub — заменить кривые пакеты на опенбсдишные. Отменили потому, что он теперь включен по умолчанию.
+
Поверхностность обманчива: pf устроен так, чтобы облегчить работу пользователю, и если загл. внутрь простого правила в pf, то на самом деле оно раск. в довольно сложный набор, и тенденция в том. Недавно на опеннете была информационка, что отменили scrub (пересборка пакетов). Основная задача scrub — заменить кривые пакеты на опенбсдишные. Отменили потому, что он теперь включен по умолчанию.
-
Это всё дует в одну и то же дудку: инструмент должен ориентироваться на пользовательские задачи, а не плясать вокруг структуры ip-трафика.
+
Это всё дует в одну и то же дудку: инстр. должен ориент. на польз. задачи, а не плясать вокруг структуры ip-трафика.
Якоря.
Якоря.
-
Что такое якорь: как было сказано в прошлый раз, это похоже на пользовательскую цепочку в iptables: это свод правил, существующих в дополнение к основному своду правил pf, и может быть оттуда вызван. Смысл состоит не только в том, чтобы уменьшить количество видимых правил в одном фрагменте кода настр. pf, хотя и это тоже: можно представить некий набор правил, предназначенных для одной цели, и логично их оформить в виде якоря. Но главное достоинство якоря в том, что правила, которые лежат в якоре, не находятся в основном своде правил фаерволла, и есть гибкий механизм эти правила менять. Якорь нужен для того, чтобы там помещать правила, которые часто меняются. Меняются в связи с состоянием системы, в связи с тем, что залогинился пользователь, в связи со злобными действиями отдельных ip. Также, как это работает с таблицами, поскольку, этот свод правил в отдельной памяти и обрабатывается отдельно, то есть надежда, что блокировки у него не будет вообще, кроме как в случае, когда его содержимое потребовалось в момент его изменения.
+
Что такое якорь: как было сказано в прошлый раз, это похоже на польз. цепочку в iptables: это свод правил, сущ. в дополнение к осн. своду правил pf, и может быть оттуда вызван. Смысл сост. не только в том, что уменьш. количество видимых правил в одном фрагменте кода настр. pf, хотя и это тоже: можно предст. некий набор правил, предн. для одной цели, и логично их оформить в виде якоря. Но главное достоинство якоря в том, что правила, которые лежат в якоре, не нах. в осн. своед правил фаерволла, и есть гибкий механизм эти правила менять. Якорь нужен для того, чтобы там помещать правила, которые часто меняются. Меняются в связи с сост. системы, в связи с тем, что залогинился польз., в связи с злобными действиями отдельных ip. Также, как это работает с таблицами, поск., этот свод памяти в отд. памяти и обр. отдельно, то есть надежда, что блокировки у него не будет вообще, кроме как в случае, когда его содержимое потребовалось в момент его изменения.
-
Относительно того, что это такое, зачем это нужно. Какие они бывают: в прошлый раз лектор говорил, что в якорь можно складывать фильтр. правила и nat/binat/redirect, что в основном чаще всего используются правила типа filter. Тут мы приходим к ещё одному забавному свойству: поскольку якорь — штука, которую можно менять по ходу, то если где-то в тексте написано anchor goodguys, то в этом месте происходит нечто среднее между подстановкой и переходом. Это не макросы, подстанавливается оно в момент выполнения. Соответственно, как только модифицируется якорь, поведение pf меняется. Как это менять из us:
+
Отн. того, что это такое, зачем это нужно. Какие они бывают: в прошлый раз лектор говорил, что в якорь можно складывать фильтр. правила и nat/binat/redirect, что в основном чаще всего исп. правила типа filter. Тут мы приходим к ещё одному забавному св-ву: поск. якорю — штука, которую можно менчять по ходу, то если где-то в тексте написано anchor goodguys, то в этом месте происх. нечто среднее между подст. и переходом. Это не макросы, подст. оно в момент выполнения. Соотв., как только модиф. якорь, поведение pf меняется. Как это менять из us:
pfctl -a goodguys -f <filename>
pfctl -a goodguys -f <filename>
Можно в тексте конфига написать что-то типа
Можно в тексте конфига написать что-то типа
Строка 18: Строка 18:
pass in proto tcp from 10.20.30.40 port 80
pass in proto tcp from 10.20.30.40 port 80
}
}
-
Якоря могут быть вложенные. Зачем это делать: чтобы не модифицировать содержимое одного подъякоря для модификации другого. Можно например взять и включить все подъякори якоря без рек. обхода:
+
Якоря могут быть вложенные. Зачем это делать: чтобы не модиф. содерж. одного подъякоря для модиф. другого. Можно например всязть и включить все подъякори якоря бех рек. обхода:
anchor "spam/*"
anchor "spam/*"
Когда пишется переход на анкор, то к нему можно приделать фильтр, например:
Когда пишется переход на анкор, то к нему можно приделать фильтр, например:
anchor "spam/*" on $ext_if proto tcp from any to any port 25
anchor "spam/*" on $ext_if proto tcp from any to any port 25
-
И если в этот момент не идёт трафик, соответствующий данному фильтру, то не будет никакой потери произв.
+
И если в этот момент не ижёт трафик, соотв. данному фильтру, то не будет никакой потери произв.
-
Далее в документации следуют утверждения, когда могут быть макросы, когда нет. Поскольку макросы раскрываются compiletime, то их надо описывать там же, где и сам якорь.
+
Далее в док. след. утверждения, когда могут быть макросы, когда нет. Поск. макросы раск. compiletime, то их надо опис. там же, где и сам якорь.
Очереди.
Очереди.
-
Возвращаемся к трафик шейпингу. В след раз можно поговорить, как это делается в линуксе, но то, как это сделано pf, настолько просто, что непонятно, почему все этого боятся.
+
Возвращаемся к трафик шейпингу. В след раз можно поговорить, как это делается в линуксе, но то, как это сделано pf, наастолько просто, что непонятно, почему все этого боятся.
-
Все пакеты, которые ходят через tcp/ip стек, находятся в очереди. Просто очередь имеет самый простой алгоритм, фифо.
+
Все пакеты, которые ходят через tcp/ip стек, нах. в очережи. Прочто очередь имеет самый простой алгоритм, фифо.
-
Делать планирование входящих пакетов глупо, поэтому в pf такой возм. нет.
+
Делать планирование звходящих пакетов глупо, поэтому в pf такой возм. нет.
Немного теории. Какие бывают планировщики:
Немного теории. Какие бывают планировщики:
-
* Самый нерекомендуемый. В pf их два, они просто соответствуют двум диссертациям, соответственно на эту темы, одна из них — priority queueing, вторая — class-based queueing. В pf class-based тоже имеет свои приоритеты, поэтому первым ползоваться необязательно. С другой стороны, первый быстрее и более правильно работающий. Приоритезация: о чём вообще речь. Есть пресловутый интерфейс, из которого вылазят пакеты. Вы организуете несколько очередей fifo, в зависимости от того, как устроен фильтр, пакет попадает в соответствующую очередь и по разным правилам отп. Приоритетная организация очередей построена очень просто: Вы указываете пропускную способность очереди целиком. ... Как это делается в настройках: Идея следу.: вы должны объявить о том
+
* Самый нерекомендуемый. В pf их два, они дпросто соответст. двум диссертациям, соотв. на эту темы, одна из них — priority queueing, вторая — class-based queueing. В pf class-based тоже имеет свои приоритеты, поэтому первым полз. необяхз. С другой стороны, первый быстрее и более правилно работающий. Приоритезация: о чём вообще речь. Есть пресловутый интерфейс, из которог вылазят пакеты. Вы орг. неск. очередей fifo, в зависимости от того, как учтроен фильтр, пакет попадает в соотв. очередь и по разным правилам отп. Приоритетная орг. очредей постр. очень просто: Вы указ. пропуск. способ. очереди целиком. ... Как это делается в настройках: Идея следу.: вы должны объявить о том
-
altq on fxp0 bv 2mb queue {std_out, dns_out}
+
фдей щт ачз0 им 2Ьи йгугу Хыев_щгеб вты_щгеЪ
queue std_out priq(default)
queue std_out priq(default)
#все пакеты, будущие выходить и з интерф., будут попадать по умолч. в std_out
#все пакеты, будущие выходить и з интерф., будут попадать по умолч. в std_out
queue dns_out priority 5 priq
queue dns_out priority 5 priq
-
Что означает более высокий приоритет? Если идёт dns-запрос, то он вылезет первым, и если другие пакет ждут своей очереди, то они ещё подождут.
+
Что озн. более высокий проиритет? Если идёт dns-запрос, то он вылехзет первым, и если другие пакет ждут своей очереди, то они ещё подождут.
Этого мало. Теперь нужно где-то написать:
Этого мало. Теперь нужно где-то написать:
Строка 48: Строка 48:
поск. скзаано pass, то это будет сделано на пакете, и любой днс-трафик будет попадать в очередь с более высоким приоритетом.
поск. скзаано pass, то это будет сделано на пакете, и любой днс-трафик будет попадать в очередь с более высоким приоритетом.
-
Почему лектор про это рассказал, но не рекомендовал пользоваться приоритетными очередями? Если вы впихнули в очередь с высоким приоритетом пост. трафик, то можете сделать всем хуже.
+
Почему лектор про это расск., но не рек. польз. приоритетными очередями? Если вы впихнули в очередь с высоким проир. пост. трафик, то можете сделать всем хуже.
-
Как этого избежать? Достаточно просто, если не будете пользоваться приоритетными очередями, а таким способом орг. очередей, когда приоритет наводится не в рамках всего трафика, а в рамках конкурирующих потоков. То есть если бы была возможность делать дерево, то там вполне можно устроить приоритеты.
+
Как этого избежать? Дост. просто, если не будете польз. приор. очередями, а таким способом орг. очередей, когда приоритет наводится не в рамках всего трафика, а в рамках конкур. потоков. То есть если бы была возм. делать дерево, то там вполне можно устр. приоритеты.
Шаманство с приор. это довльно тяжело, поэтому есть CBQ. Там изн. предпю, что траф. разд. на очереди, очереди на подочереди и так далее. Осн. способ манип: манип. проп. способностями, а не приоритетами. Пример:
Шаманство с приор. это довльно тяжело, поэтому есть CBQ. Там изн. предпю, что траф. разд. на очереди, очереди на подочереди и так далее. Осн. способ манип: манип. проп. способностями, а не приоритетами. Пример:
-
altq on fxp0 cbq pw 2Mb queue {std, ssh, ftp}
+
фдей щт ачз0 сий зц 2Ьи йгугу Хыевб ssh, ftpЪ
queue std bw 50% cbq(default)
queue std bw 50% cbq(default)
queue ssh bw 25% { ssh_loging, ssh_bulk }
queue ssh bw 25% { ssh_loging, ssh_bulk }
Строка 60: Строка 60:
queue ftp bf 500Kb priority 3 cbr(borrow qred) #red делается, если ecn не поддерживается
queue ftp bf 500Kb priority 3 cbr(borrow qred) #red делается, если ecn не поддерживается
-
borrow — то самое, о чём говорили в начале: ftp дали гарантированную скорость передачи, и если никто больше не занимает канал, то использует свободную пропускную способность.
+
borrow — то самое, о чём гворили в начале: ftp дали гарант. скорость передачи, и если никто больше не занимет канал, то исп. свободную пропуск. способность.
-
Таким образом, мы получаем достаточно неплохое описание очереди, осталось только написать что-нибудь типа
+
Таким обр., мы оплучаем дост. неплохое описание очереди, ост. только напистаь что-нибудь типа
pass out on fxp0 from any to any port 22 queue ssh
pass out on fxp0 from any to any port 22 queue ssh
-
Что лектору не нравится: непонятно, в какую из подочередей упадёт поток. У pf есть замечательное свойство: можно указать несколько очередей:
+
Что лектору не нравится: непонятно, в какую из подочередей упадёт поток. У pf есть замечательное свойство: можно указ. неск. очередей:
pass out on fxp0 from any to any port 22 queue (ssh_bulk, ssh_login)
pass out on fxp0 from any to any port 22 queue (ssh_bulk, ssh_login)
-
Если так пишете, то будет приниматься во внимание ToS и содержимое спец. флагов TCP типа SYN, ACK. ACK и ToS "low delay" будет попадать во вторую очередь, все остальные — в первую.
+
Если так пишете, то будет приниматься во внимание ToS и содержимое спец. флагов TCP типа SYN, ACK. ACK и ToS "low delay" будет попадать во вторую очередь, все ост. — в первую.
-
Всё остальное примерно понятно. Лектор обращает внимание, что это действует для исходящего трафика.
+
Всё остальное примерно понятно. Лектор обр. внимание, что это действ. для исх. трафика.
-
Redirect — в зависимости от того, на какой порт пришли, перенаправить трафик.
+
Redirect — в зависимости от того, на какой порт пришли, перенапр. трафик.
Какие есть упражнения:
Какие есть упражнения:

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

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