Пакетный фильтр OpenBSD. Часть 2::Журнал СА 12.2004
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

Разбор полетов  

Ошибок опыт трудный

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

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6143
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6856
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4139
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 2978
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3781
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3789
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6283
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3134
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3434
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7246
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10616
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12336
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 13969
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9100
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7053
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5362
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4594
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3402
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3128
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3378
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 2999
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Пакетный фильтр OpenBSD. Часть 2

Архив номеров / 2004 / Выпуск №12 (25) / Пакетный фильтр OpenBSD. Часть 2

Рубрика: Безопасность /  Сетевая безопасность

ДЕНИС НАЗАРОВ

Пакетный Фильтр OpenBSD

Часть 2

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

В прошлой статье я рассказал об основных возможностях пакетного фильтра операционной системы OpenBSD и почему так важно использование фильтров. Недавно нам поступило тревожное сообщение от одной из организаций о том, что их сервер «барахлит», мне пришлось ехать и проверять, но я и не подозревал, насколько всё серьёзно! Сеть организации была спроектирована довольно хорошо, однако единственным слабым местом был Linux-сервер, на котором крутились Java-сервлеты и обслуживали денежные транзакции. Пограничным хостом (firewall) была давненько установленная нами, в то время еще OpenBSD 3.1-stable, с PF в качестве пакетного фильтра. При осмотре Linux-сервера сразу стало понятно, что его атаковали, и не раз, я нашел огромное количество различных exploits на сервере и несколько скриптов, которые в тот момент держали открытыми порты с shell, запущенными от прав www-сервера. После проверки сервера различными методами я пришел к выводу, что злоумышленникам так и не удалось ни похитить данные, ни проникнуть на сервер. Мне стало интересно, как же данные со взломанного сервера (сервер действительно считался взломанным по нашим критериям) так и не ушли в чужие руки.

Так как сервер останавливать было нельзя, пришлось вживую искать все ниточки. Все свелось к одному – на сервере с OpenBSD, посмотрев лог-файлы пакетного фильтра, сразу стало ясно, что любые попытки добраться к тем shell на Linux-сервере оканчивались провалом, ибо фильтрация была настолько четкой, что помимо входящих соединений контролировались и все исходящие. Дальнейшее исследование показало все места, откуда были произведены атаки, и подтвердило их безуспешность. Сейчас в той организации стоит новый мощный сервер под управлением Sun Solaris 10 и теперь уже OpenBSD 3.6-stable. К чему вся эта история? Показать на конкретном примере, как важно использование пакетных фильтров и как они могут защитить заведомо опасные приложения.

Итак, приступим к продолжению нашей статьи, я расскажу вам о следующих вещах:

  • Распределение по очередям (Queuing).
  • Роутинг (маршрутизация).

Распределение по очередям (Queuing)

Любые пакеты могут быть разделены по очередям для контроля полосы пропускания. Зачем это надо? Распределять нагрузку на канал равномерно для всей сети, например, или же, наоборот, урезать трафик для определенного сервиса или IP-адреса. Для определения «очереди» (queue) нужны всего лишь две декларации, и в дальнейшем все пакеты можно будет распределять по очередям, используя «имя очереди». Согласно компоненту фильтрации пакетного фильтра (PF), для правила pass данный пакет будет помещен в очередь, на которую ссылалось последнее(!) правило. Немножко запутанно?

Поясню на примере:

pass in on $ext_if inet proto tcp from any to any port 80 keep state queue www-1

pass in on $ext_if inet proto tcp from any to any port 80 keep state queue www-2

Здесь будет применено последнее правило, т.е пакет будет присвоен очереди с именем «www-2».

Очередями управляют «планировщики». На данный момент PF поддерживает 3 типа «планировщиков»:

  • CBQ (Class Based Queueing) – очереди, прикрепленные к интерфейсу, создают «дерево», в котором каждая из этих очередей может иметь своих «потомков». Очереди имеют приоритет и полосу пропускания. Приоритет определяет, через какую очередь пакет пройдет первым, а полоса пропускания уже непосредственно влияет на скорость прохождения. CBQ выполняет двухсторонее разделение полосы пропускания вашего канала, используя иерархически-структурированные классы. Каждый класс имеет свою собственную «очередь» и присвоенную ей способность пропускания. Класс-потомок может заимствовать у родительского класса только(!) ту пропускную способность, которая в данный момент доступна для него.
  • PRIQ (Priority Queueing) – очереди просто присоединены к интерфейсу и не могут иметь очередей-потомков. Каждая такая очередь имеет свой уникальный «приоритет», который может принимать значения от 0 до 15. Пакеты в очереди с наибольшим приоритетом будут обработаны первыми.
  • HFSC (Hierarchical Fair Service Curve) – описание очень схоже с CBQ за исключением некоторых дополнений. HFSC есть не что иное как «исправленный» механизм, базирующийся на модели QoS. Его уникальность состоит в возможности разъединять связь между задержкой пакета и очередью. То есть HFSC обрабатывает очереди и пакеты отдельно друг от друга, однако после процесса обработки пакет и очередь опять логически связываются. В некоторых ситуациях это позволяет добиться максимальной производительности от трафик-шейпера. Очень часто это используется для сервисов, работающих в режиме реального времени.

Активизировать возможность распределения по очередям нужно в конфигурационном файле вашего фильтра (по умолчанию /etc/pf.conf) при помощи директивы «altq on», которая имеет свои дополнительные параметры:

  • <interface> – имя интерфейса, для которого мы включаем данную возможность, если не определено, то очереди будут активированы для всех интерфейсов.
  • <scheduler> – планировщик, в данный момент PF поддерживает cbq, priq, hfsc.
  • bandwidth <value> – максимальный битрейт для всех очередей на данном интерфейсе. Значение может быть определено как процент от общей пропускной способности интерфейса, так и числовой величиной. Для этого могут использоваться слова b, Kb, Mb, Gb. Что соответственно – биты, килобиты, мегабиты, гигабиты. Если значение bandwidth не задано, то будет использована максимальная скорость.
  • qlimit <value> – количество пакетов, которое может обслуживать очередь, по умолчанию 50, это значение отлично подходит для 100-мегабтиных сетей.
  • queue <list> – определяет список очередей, которые будут созданы для данного интерфейса.

В этом примере интерфейс dc0 будет распределять в очереди 5Mbit/s, используя CBQ.

altq on dc0 cbq bandwidth 5Mb queue { std, http, mail, ssh }

После включения altq мы можем создавать очереди-потомки. Для них используются те же дополнительные параметры, что и для директивы altq, за исключением и queue, т.к они уже определены. Имя родительской очереди должно совпадать с определением в altq.

Например:

queue std bandwidth 10% cbq(default)

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

  • default – попадая в эту очередь, пакет не проверяется дальше, а тут же обрабатывается.
  • red – Random Early Detection – RED отбрасывает пакеты, которые, предположительно могут перегрузить очередь.
  • ecn – Explicit Congestion Notification – практически то же самое, что и RED. Отличается лишь алгоритмом обработки очередей, в итоге результат тот же, что и при использовании RED. RED использует более оптимизированный алгоритм, и за его счет обработка очередей происходит гораздо быстрее.

Для CBQ предусмотрены дополнительные параметры.

  • borrow – очередь-потомок может «заимствовать» свободную пропускную способность у родительской очереди в случае необходимости.

Теперь параметры для HFSC.

  • realtime <sc> – минимальная доступная пропускная способность для очереди.
  • upperlimit <sc> – максимальная доступная очереди пропускная способность.
  • <sc> – список так называемых service curve (для realtime задач), которые имеют формат (m1, d, m2), работают они по принципу «для первых d мили-секунд выдавать пропускную способность m1, после этого m2».

Синтаксис определения очередей CBQ и HFSC одинаков, разница лишь в дополнительных параметрах (см. выше). Однако стоит помнить, что скорость пропускания для очередей-потомков не может быть больше той, что определена для родительской очереди.

Дополнительный параметр для определения очередей – priority – указывает приоритет очереди. Для CBQ и HFSC значения могут быть от 0 до 7, для PRIQ – от 0 до 15. Значение по умолчанию для всех очередей 1.

Присвоение пакетов очередям происходит при помощи ключевого слова queue в правилах фильтрации(!). В нормальном режиме указать можно только одну очередь, однако, если же указана вторая, то пакеты будут обрабатываться на основе TOS (Type Of Service).

Что ж, теперь давайте посмотрим, как все это выглядит на практике, ибо в теории мало что понятно.

Включаем очереди:

altq on dc0 cbq bandwidth 5Mb queue { std, http, mail, ssh }

Определяем родительские очереди и очереди-потомки.

queue std bandwidth 10% cbq(default)

queue http bandwidth 60% priority 2 cbq(borrow red) { employees, developers }

queue  developers bandwidth 75% cbq(borrow)

queue  employees bandwidth 15%

queue mail bandwidth 10% priority 0 cbq(borrow ecn)

queue ssh bandwidth 20% cbq(borrow) { ssh_interactive, ssh_bulk }

queue  ssh_interactive priority 7

queue  ssh_bulk priority 0

И назначаем правила:

block return out on dc0 inet all queue std

pass out on dc0 inet proto tcp from $developerhosts to any port 80 keep state queue developers

pass out on dc0 inet proto tcp from $employeehosts to any port 80 keep state queue employees

pass out on dc0 inet proto tcp from any to any port 22 keep state queue(ssh_bulk, ssh_interactive)

pass out on dc0 inet proto tcp from any to any port 25 keep state queue mail

Итак, очередь std будет забирать 10% от нашего 5Mbit/s канала.

Очередь http будет забирать 60% и иметь двух потомков employees и developers с механизмом определения преждевременной нагрузки RED и возможностью «заимствования» полосы пропускания у родителя. У очереди http приоритет равен 2, что в данной конфигурации является наивысшим приоритетом (т.к значения больше, чем «2» не определены). Значит, данная очередь будет обрабатывать пакеты первой. Для очередей-потомков установлены скорости в процентном отношении соответственно 75% и 15%. Важно понимать, что вычисляться эти проценты будут из того куска общей пропускной способности канала, который отдан родительской очереди.

Очередь mail определена как 10% от общей полосы пропускания и имеет низший приоритет (0), чем другие.

Очередь ssh делится на ssh_interactive и ssh_bulk, имеющие приоритеты 7 и 0. Как только появляется пакет с портом назначения 22 и его помещают в очередь ssh_bulk. После того как соединение считается установленным, пакет переходит в очередь ssh_interactive и имеет наивысший приоритет для родительской очереди. А зачем так сложно?

Стоит помнить, что «контроль состояний» (stateful in-spection) применяется не только для фильтрации, но и для контроля полосы пропускания, а это означает, что даже при огромных правилах фильтров и различных ограничений скорости ваш сервер не будет иметь проблем с загрузкой процессора.

Роутинг (маршрутизация)

Тут все просто и мощно. Управлять пакетом нам позволяют те же правила фильтрации, однако с добавлением одной из нижеперечисленных опций. Помните – когда создается «состояние» (state), все пакеты для данного правила фильтрации и роутинга попадают под него.

  • fastroute – обычный режим, система обрабатывает пакет обычным образом.
  • route-to – система направляет пакет на нужный интерфейс с возможностью указания IP для «следующего хоста». Надо помнить, что помимо route-to нужно создать правила, позволяющие направлять пакет с одного интерфейса на другой в правилах фильтрации, иначе все ваши пакеты будут зарезаны фильтром.
  • reply-to – на сей раз система отвечает пакетом с указанным IP-адресом и интерфейсом.
  • dup-to – создает дубликат пакета и отправляет его с помощью route-to. Настоящий пакет обрабатывается обычным способом. Dup-to полезно использовать для обнаружения конфликтов в сети, когда рабочий сервер трогать нельзя, а трафик, проходящий через него, нужно анализировать.

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


Комментарии
 
  03.06.2008 - 12:27 |  Гришин Ю.С.

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

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru