Редактирование: 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 howto. В книге всё понятно, и её рекоимендуется читать всем, даже если не собир. пользоваться pf. |
- | Поверхностность обманчива: pf устроен так, чтобы облегчить работу пользователю, и если | + | Поверхностность обманчива: pf устроен так, чтобы облегчить работу пользователю, и если загл. внутрь простого правила в pf, то на самом деле оно раск. в довольно сложный набор, и тенденция в том. Недавно на опеннете была информационка, что отменили scrub (пересборка пакетов). Основная задача scrub — заменить кривые пакеты на опенбсдишные. Отменили потому, что он теперь включен по умолчанию. |
- | Это всё дует в одну и то же дудку: | + | Это всё дует в одну и то же дудку: инстр. должен ориент. на польз. задачи, а не плясать вокруг структуры ip-трафика. |
Якоря. | Якоря. | ||
- | Что такое якорь: как было сказано в прошлый раз, это похоже на | + | Что такое якорь: как было сказано в прошлый раз, это похоже на польз. цепочку в iptables: это свод правил, сущ. в дополнение к осн. своду правил pf, и может быть оттуда вызван. Смысл сост. не только в том, что уменьш. количество видимых правил в одном фрагменте кода настр. pf, хотя и это тоже: можно предст. некий набор правил, предн. для одной цели, и логично их оформить в виде якоря. Но главное достоинство якоря в том, что правила, которые лежат в якоре, не нах. в осн. своед правил фаерволла, и есть гибкий механизм эти правила менять. Якорь нужен для того, чтобы там помещать правила, которые часто меняются. Меняются в связи с сост. системы, в связи с тем, что залогинился польз., в связи с злобными действиями отдельных ip. Также, как это работает с таблицами, поск., этот свод памяти в отд. памяти и обр. отдельно, то есть надежда, что блокировки у него не будет вообще, кроме как в случае, когда его содержимое потребовалось в момент его изменения. |
- | + | Отн. того, что это такое, зачем это нужно. Какие они бывают: в прошлый раз лектор говорил, что в якорь можно складывать фильтр. правила и 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, то их надо опис. там же, где и сам якорь. |
Очереди. | Очереди. | ||
- | Возвращаемся к трафик шейпингу. В след раз можно поговорить, как это делается в линуксе, но то, как это сделано pf, | + | Возвращаемся к трафик шейпингу. В след раз можно поговорить, как это делается в линуксе, но то, как это сделано pf, наастолько просто, что непонятно, почему все этого боятся. |
- | Все пакеты, которые ходят через tcp/ip стек, | + | Все пакеты, которые ходят через tcp/ip стек, нах. в очережи. Прочто очередь имеет самый простой алгоритм, фифо. |
- | Делать планирование | + | Делать планирование звходящих пакетов глупо, поэтому в pf такой возм. нет. |
Немного теории. Какие бывают планировщики: | Немного теории. Какие бывают планировщики: | ||
- | * Самый нерекомендуемый. В pf их два, они | + | * Самый нерекомендуемый. В pf их два, они дпросто соответст. двум диссертациям, соотв. на эту темы, одна из них — priority queueing, вторая — class-based queueing. В pf class-based тоже имеет свои приоритеты, поэтому первым полз. необяхз. С другой стороны, первый быстрее и более правилно работающий. Приоритезация: о чём вообще речь. Есть пресловутый интерфейс, из которог вылазят пакеты. Вы орг. неск. очередей fifo, в зависимости от того, как учтроен фильтр, пакет попадает в соотв. очередь и по разным правилам отп. Приоритетная орг. очредей постр. очень просто: Вы указ. пропуск. способ. очереди целиком. ... Как это делается в настройках: Идея следу.: вы должны объявить о том |
- | + | фдей щт ачз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-запрос, то он вылехзет первым, и если другие пакет ждут своей очереди, то они ещё подождут. |
Этого мало. Теперь нужно где-то написать: | Этого мало. Теперь нужно где-то написать: | ||
Строка 48: | Строка 48: | ||
поск. скзаано pass, то это будет сделано на пакете, и любой днс-трафик будет попадать в очередь с более высоким приоритетом. | поск. скзаано pass, то это будет сделано на пакете, и любой днс-трафик будет попадать в очередь с более высоким приоритетом. | ||
- | Почему лектор про это | + | Почему лектор про это расск., но не рек. польз. приоритетными очередями? Если вы впихнули в очередь с высоким проир. пост. трафик, то можете сделать всем хуже. |
- | Как этого избежать? | + | Как этого избежать? Дост. просто, если не будете польз. приор. очередями, а таким способом орг. очередей, когда приоритет наводится не в рамках всего трафика, а в рамках конкур. потоков. То есть если бы была возм. делать дерево, то там вполне можно устр. приоритеты. |
Шаманство с приор. это довльно тяжело, поэтому есть CBQ. Там изн. предпю, что траф. разд. на очереди, очереди на подочереди и так далее. Осн. способ манип: манип. проп. способностями, а не приоритетами. Пример: | Шаманство с приор. это довльно тяжело, поэтому есть CBQ. Там изн. предпю, что траф. разд. на очереди, очереди на подочереди и так далее. Осн. способ манип: манип. проп. способностями, а не приоритетами. Пример: | ||
- | + | фдей щт ачз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 — то самое, о чём | + | 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 — в зависимости от того, на какой порт пришли, перенапр. трафик. |
Какие есть упражнения: | Какие есть упражнения: |