СТРОИМ СЕТЬ, КОТОРАЯ НАМ НЕОБХОДИМА

PF, подсистема пакетного фильтра (Packet Filter) OpenBSD – один из лучших инструментов доступных для надёжного контроля вашей сети. Прежде чем погрузиться в особенности того, как настроить сеть на пределе ваших  мечтаний, ознакомьтесь с этой главой. Она рассматривает базовые сетевые термины и понятия, предоставляет некоторые данные из истории развития PF, а так же даёт краткий обзор того, что вы можете найти в этой книге.

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

С другой стороны, если вы всё ещё изучаете, как строить сети, или не слишком уверены в своих навыках, вам может быть полезно короткое резюме основных сетевых терминов и

терминов безопасности.

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

Результат оказался вполне предсказуем. Ещё до того, как малые  компьютеры стали сетевыми,   они   были   целью   для   вирусов    (полуавтоматическому   программному обеспечению,  которое  может  заражать   другие  файлы  и  размножаться)  и  трояны (первоначально   –   троянские   кони,   программы   заставляющие   компьютер   жертвы выполнять  определённые  действия).  Став  сетевыми,    компьютеры  подверглись  ещё одному типу вирусов – worms или сетевые черви, использующие сеть для размножения.1

Попутно, на горизонте сетевой безопасности появились различные варианты  сетевого мошенничества  и  сегодня,  значительная  часть  активной  компьютерной  безопасности сконцентрировано  на  управлении  угрозами,  с   упором  на  борьбу  и  каталогизацию вредоносного ПО или так называемого malware.

Бесполезно перечислять всё зло — это было прекрасно сделано в другом месте (смотрите приложение A, например отличное эссе Марка Ранума – «Шесть  самых тупых идей в компьютерной  безопасности»).    Подход  OpenBSD  заключается,  в  первую  очередь,  в способе разработки дизайна и кода. Если в дальнейшем, вы обнаруживаете ошибки и эти ошибки  оказываются  эксплуатируемыми,  после  их  исправления  код  возвращается  в дерево, даже  если это может означать радикальный пересмотр дизайна, и в худшем случае привести к потере совместимости.2

1  До эпохи Windows был только один известный червь IBM Christmas Tree EXEC (1987 год) и первый интернет червь, известный как червь Мориса (1988 год), информацию о которых легко найти в любом поисковике.  Эпоха сетевых червей Windows, как считается, началась в мае 2000 года с появлением червя ILOVEYOU.

2  Некоторые презентации о подходе OpenBSD к вопросам безопасности можно найти на http://www .openbsd.org/papers/. Одни из моих любимых – Тео де Раад (Theo de Raadt’s ) "Методы ликвидации брешей безопасности", Дэмиен Миллер (Damien Miller’s) "Меры безопасности в OpenSSH" и "Паффи на работе – Получение правильного кода и безопасность, путь OpenBSD" Хеннинга Брауера (Henning Brauer) и Свена Демлоу (Sven Dehmlow).

В PF, а так же в этой книге, основное внимание концентрируется на сетевом  трафике сетевого уровня. Введение divert(4) сокетов в OPenBSD 4.7. сделало  проще настройку системы, где PF используется для глубокой инспекции  пакетов. Тем не менее, не всё свободное ПО имеет специфический интерфейс пользователя, поэтому мы сфокусируемся на некоторых методах основаных на  поведении присущем сетевому уровню (наиболее очевидно это показано в примере конфигурации главы 6) что поможет снизить нагрузку на программы  контроля контекста, если они у вас имеются. В следующих главах вы увидите, что сетевой уровень предлагает множество возможностей кроме блокирования и разрешения пакетов.

Где размещается фильтр пакетов                                            Основная  функция фильтра пакетов, как следует из названия, состоит в  фильтрации сетевых пакетов путём сопоставления свойств отдельных пакетов и сетевых соединений с критериями   фильтрации   или   правилами   пакетного   фильтра,   определёнными   его конфигурационным  файлом.  пакетный  фильтр   отвечает  за  решение  относящееся  к действию производимому с пакетом. Это означает, что решается вопрос о том, следует ли передавать пакет к месту  назначения или отклонить его, должно ли возникнуть какое- либо событие операционной системы или внешних приложений настроенных на обработку

события.

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

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

Вы  можете  использовать  критерии  фильтрации  для  непосредственного  определения видов сетевого трафика специфических хостов, назначить  классификацию трафика в

очереди, выполнить формирование трафика (шейпер) и даже перенаправить проблемный

трафик к специализированному ПО для специальной обработки.

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

системы. Существовали примеры фильтрации пакетов в пространстве пользователя (user

space), однако в большинстве операционных систем  функции фильтрации реализуются в ядре системы, что обеспечивает высокую скорость работы.

Развитие PF                                                                                Если  вас интересует история, вероятно вы знаете, что OpenBSD и  другие  BSD3   ОС являются прямыми потомками системы BSD (иногда говорят о BSD Unix), операционной

системы включающей эталонную реализацию протоколов стека TCP/IP начала 80-х годов.

Как исследовательский проект BSD был свёрнут в начале 90-х годов и его  код был освобождён для дальнейшего развития небольшими группами энтузиастов по всему миру. некоторые  из  этих  энтузиастов  были  ответственны  за  сохранение  жизненно  важных частей   инфраструктуры    Интернет   и   развитие   BSD   продолжалось   несколькими параллельными направлениями под эгидой различных групп. OpenBSD стала известна как наиболее безопасная ОС основанная на BSD. в качестве системы фильтрации  пакетов, данная система использовала подсистему названную IPFilter, написанную Дарреном Ридом (Darren Reed).

3  Если аббревиатура BSD звучит для вас незнакомо, вот краткое разъяснение. Абревиатура  расшифровывается как Berkeley Software Distribution   и первоначально являлась набором полезных программ  разработаных для операционной системы Unix сотрудниками и студентами Университета Калифорнии в Беркли. С течением времени набор программ оформился в полноценную операционную систему, которая, в свою очередь, стала основой целого семейства ОС, в том числе OpenBSD, FreeBSD, NetBSD, DragonFlyBSD, и в некоторых смыслах даже Apple Mac OS X. Для лёгкого понимания, что такое BSD, обратитесь к статье "Что такое BSD" по адресу http://www.freebsd.org/doc/en/articles/explaining-bsd (ну и конечно к официальным сайтам проектов).

В начале 2001 года, сообщество OpenBSD было шокировано заявлением Рида который объявил, что IPFilter, который на тот момент был тесно  интегрирован  с OpenBSD, не попадает  под  лицензию  BSD.  Вместо  этого,  он  использует  практически  аналогичную лицензию, исключая право внесения  изменений в код и  распространение результата изменений. Проблема заключалась в том, что версия IPFilter OpenBSD включала несколько изменений и  настроек, которые, как оказалось, не попадали под действие лицензии. В результате, 29 мая 2001 года, IPFilter был удалён из дерева исходных кодов OpenBSD и в течении нескольких недель, OpenBSD (-current) не включала никакого ПО бранмауэра.

К счастью, в это время, в Швейцарии, Даниэль Хартмейер (Daniel Hartmeier) производил некоторые  эксперименты  с  сетевой  частью  кода  ядра.  Он   начал  с  подключения собственной небольшой функции к сетевому стэку, а затем пропустил через неё сетевые пакеты. Затем он задумался о фильтрации.  Когда наступил описанный ранее кризис с лицензией, PF уже находился в стадии разработки. Первый коммит кода PF пришёлся на воскресенье 24 июня  2001 года в 19:48:58 UTC. Через несколько месяцев интенсивной работы  результирующая версия PF была выдвинута в качестве основной части  базовой системы OpenBSD 3.0 в декабре 2001 года.4   Эта версия включала  достаточно полную реализацию  пакетного  фильтра,  в  том  числе  включая  NAT,  который  был  достаточно похожим на IPFilter, т.ч. переход на новую версию OpenBSD не составил особых проблем. 5

PF оказался хорошо разработанным ПО. В 2002 году Хартмейер получил подтверждение USENIX,  доказывающее  что  тесты  производительности  OpenBSD  3.1  PF  выполняются одинаково хорошо или даже лучше чем IPFilter  на OpenBSD 3.1 или IPTables на Linux. Кроме  того,  тесты  выполненные  на  PF  OpenBSD  3.0  показали,  что  код  повышает эффективность с версии 3.0 до версии 3.1.6

Код OpenBSD PF,  написаный с помощью нового движка фильтрации пакетов, опытными разработчиками,  естетственно  вызвал  интерес  других  групп   BSD.   Проект  FreeBSD постепенно принял PF, сначала в качестве пакета, а  затем, начиная с версии 5.3 в качестве одного из трёх компонентов фильтрации пакетов базовой системы. Кроме того, PF был включён в NetBSD и DragonFlyBSD.7

Врезка: Новые версии PF работают лучше!

Как и всё в мире компьютеров, OpenBSD и PF были затронуты быстрыми изменениями аппаратных средств с сетей связи. Я не видел тестов сопоставимости USENIX, однако  пользователи PF находят, что накладные

расходы при использовании PF весьма скромные. В качестве примера (в основном, чтобы показать, что даже

слабые конфигурации оборудования вполне применимы), одна из фирм использовала в  качестве сетевых шлюзов машины в конфигурации Pentium III 450МГц c 384Мб памяти. При этом я не могу припомнить, чтобы простой машины составлял менее 96%!

Стоит отметить, что текущие разработчики PF, в основном Хеннинг Брауэр (Henning Brauer) и Райан Мак’Брид (Ryan McBride), при участии ряда других, внесли ряд оптимизаций в код OpenBSD PF в нескольких последних

релизах, что делало каждый последующий релиз с 4.4 по 4.8 заметно лучше предыдущего.

4  Эпизод с авторскими правами IPFilter  стимулировал команду OpenBSD на выполнение аудита лицензий всего дерева исходных кодов и портов, что позволило избежать подобных проблем в будущем. Несколько  потенциальных проблем были решены в течении последующих месяцев, что привело к удалению некоторого числа потенциальных лицензионных ловушек, угрожавших разработчикам свободного ПО. Тео де Раадт подвёл итоги в сообщении списка рассылки openbsd-misc 20 февраля 2003 года. Кризис лицензионной драмы миновал, а чистой прибылью стала новая система фильтрации пакетов под свободной лицензией и с лучшим качеством кода, а так же более свободные лицензии, как для большой части кода OpenBSD, так и для другого широко используемого ПО.

5   Совместимость  с  конфигурацией  IPFilter    стало  значительным  плюсом  для  разработчиков  PF,  но  это  перестало  быть приоритетом,  как  только  стало  возможно  с  уверенностью предположить, что  все  пользователи  OpenBSD  перешли  на  PF (примерно во время выхода релиза OpenBSD 3.2). Вам не следует  считать, что существующая конфигурация IPFilter будет работать без изменений с любой версией PF. С  учётом изменений синтаксиса внесёнными в OpenBSD 4.7, даже обновление ранних версий PF потребует проведения некоторых дополнительных работ.

6    Статью  предоставляющую  подробную  информацию  о  тестах,  можно  получить  на  сайте     Даниеэля   Хартмейера  – http://www.benzedrine.cx/pf-paper.html.

7  Одно время производители персонального брандмауэра Core Force утверждали, что он основан на PF. В начале 2010 года, Core Security, компания разработавшая Core Force (http://force.coresecurity.com/) переключилась на  другие области безопасности, такие как тестирование проникновения, однако продукт по прежнему доступен для скачивания.

Эта книга посвящена PF доступном в OpenBSD 4.8, и, в случае необходимости, я буду отмечать значительные различия между этой версией и теми, которые интегрированы в другие системы. Если вы гготовы погрузиться в конфигурирование PF, вы можете перейти к Главе 2, чтобы сразу начать работу. Если вы

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

Если вы пришли из другого места                                           Если вы читаете это по той причине, что планируете переместить настройки PF из другой системы – этот раздел для вас. Если вы хотите использовать PF, необходимо установить и запустить системы такие как OpenBSD, FreeBSD,  NetBSD или DragonFly BSD. Всё это – прекрасные ОС, но лично мне больше нравится OpenBSD, в основном по той причине, что это та операционная  система  в которой, по существу, происходит развитие PF, и мне нравится деловой подход к её разработке. Иногда, небольшие изменения и исправления ошибок присходят в реализациях PF на других системах, но новый и самый современный код PF всегда можно найти в OpenBSD.

Некоторые  из  особенностей  описанные  в  этой  книге  доступны  только  в  последних версиях OpenBSD.   Другие BSD системы, как правило портируют  последние релизы PF OpenBSD   в   свой   базовый   код,   однако    синхронизация   обновлений   далеко   не гарантирована и отставание может быть значительным.

Если вы планируете использовать PF на FreeBSD, NetBSD, DragonFly BSD  или  других системах,  вы  должны  проверить  замечания  к  релизу  для  вашей  системы  и  прочую документацию, в целях получения подробной информации о включённой версии PF.

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

конфигурированию BSD.

–    Linux   и   BSD   используют   различные   соглашения   для   именования   сетевых интерфейсов. Конвенция Linux – маркировка всех сетевых интерфейсов на машине в виде последовательности eth0, eth1 и так далее (хотя для некоторых драйверов и их   комбинаций   вы   можете   встретить   wlan0,   wlan1   и   т.д.   например   для беспроводных интерфейсов). В системах BSD, интерфейсам присваиваются имена, состоящие из имени драйвера и порядкового номера интерфейса. Например старые карты 3Com использующие драйвер ep появляются в  системе как ep0, ep1 и так далее; карты Intel Gigabit, определяются  как  em0, em1 и так далее. Некоторые карты SMC представляются как sn0, sn1… Эта система вполне логична, и позволяет проще  найти  данные  для  специфичного  интерфейса.  Если  сообщения  ядра  (в процессе   загрузки  или  выводе  ifconfig),  говорят,  что  у  вас  есть  интерфейс названный em0, вам необходимо обратится к странице руководства системы, чтобы узнать,  какую  скорость  он  поддерживает, какие  прошивки  ему  нужны  и  тому подобное.

–    Вы должны знать, что BSD-системы конфигуриются посредством  /etc/rc.conf. В общем, BSD системы организованы так, чтобы читать  конфигурацию из файла

/etc/rc.conf, который читается скриптом /etc/rc при начальной загрузке. OpenBSD рекомендует  использовать  /etc/rc.conf.local для  локальных  настроек,  поскольку

rc.conf содержит значения по умолчанию. FreeBSD использует /etc/defaults/rc.conf для  хранения значений  по  умолчанию,  предоставляя  /etc/rc.conf для  внесения

собственных  изменений.  Кроме  того,  OpenBSD  использует   конфигурационные файлы для каждого отдельного интерфейса, называемые hostname.<if>, где <if>

заменяется именем интерфейса.

–    В целях изучения PF, вам необходимо сконцентрироваться на файле  /etc/pf.conf, который вы, по большей части, будете создавать сами.

Если  вам требуются более широкие и  тщательные сведения о вашей BSD  системе, обратитесь  к  документации  по  системе,  в  том  числе  FAQ,   спискам  рассылки  и официальным сайтам проектов. Некоторые рекомендации для прочтения вы можете найти в Приложение А.

Источник: Книга о PF, by Peter N.M. Hansteen, Перевод выполнил Михайлов Алексей aka iboxjo

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий