PF, подсистема пакетного фильтра (Packet Filter subsystem) OpenBSD - один из лучших доступных инструментов для надёжного контроля вашей сети. Прежде чем погрузиться в особенности того, как настроить сеть на пределе ваших мечтаний, ознакомьтесь с этой главой. Тут объясняются основные сетевые термины и понятия, коротко рассказывается о истории развития PF, а так же даётся краткий обзор того, что вы можете найти в этой книге. |
Информационная безопасность - это большая, сложная и часто запутанная тема. Даже если ограничиться только исследованием терминов сетевой безопасности, возникает ощущение, что мы не сильно сократили своё поле деятельности. Дела стали намного хуже несколько лет назад, когда персональные компьютеры начали объединяться в глобальные сети и стали оснащаться программами для работы в сетевом окружении, которые далеко не всегда были правильно спроектированы.
Результат оказался вполне предсказуем. Ещё до того, как персональные компьютеры стали сетевыми, они были целью для вирусов (полуавтоматическим программам, которые могут заражать другие файлы, а так же копировать себя) и трояны (первоначально троянские кони - программы, заставляющие компьютер жертвы выполнять определённые действия). Подключившись к сети, компьютеры подверглись ещё одному типу вирусов - worms или сетевым червям, использующим сеть как среду для самокопирования и распространения. 1 Попутно, на горизонте сетевой безопасности появились различные варианты сетевого мошенничества и сегодня значительная часть активной компьютерной безопасности сконцентрирована на управлении угрозами, с упором на борьбу и каталогизацию вредоносного ПО или так называемого malware.
Бесполезно перечислять всё зло — это было прекрасно сделано в другом месте (смотрите приложение A, например отличное эссе Марка Ранума - «Шесть самых тупых идей в компьютерной безопасности»). Подход OpenBSD заключается, в первую очередь, в способе разработки дизайна и кода. Если в дальнейшем, вы обнаруживаете ошибки и эти ошибки оказываются эксплуатируемыми, после их исправления код возвращается в дерево, даже если это может означать радикальный пересмотр дизайна, и в худшем случае привести к потере совместимости.
В PF, а так же в этой книге, основное внимание концентрируется на сетевом трафике сетевого уровня. Введение divert(4) сокетов в OpenBSD 4.7. сделало проще настройку системы, где PF используется для глубокой инспекции пакетов. Тем не менее, не всё свободное ПО имеет специфический интерфейс пользователя, поэтому мы сфокусируемся на некоторых методах основаных на поведении присущем сетевому уровню (наиболее очевидно это показано в примере конфигурации главы 6) что поможет снизить нагрузку на программы контроля контекста, если они у вас имеются. В следующих главах вы увидите, что сетевой уровень предлагает множество возможностей кроме блокирования и разрешения пакетов.
PF позволяет администратору создавать собственные критерии фильтрации для контроля сетевого трафика, основываясь на содержимом пакета или параметрах подключения, в том числе адресах источника и назначения, интерфейсе, протоколе, портах и направлении. Основываясь на этих критериях, пакетный фильтр применяет указанное действие. Одним из простейших и наиболее общих действий является блокирование трафика.
Пакетный фильтр может сдерживать нежелательный сетевой трафик. Кроме того, он может помочь контролировать внутри сетевой трафик вашей собственной внутренней сети. Обе эти функции очень важны в концепции брандмауэра, однако блокирование трафика далеко не единственная полезная и интересная функциональная особенность пакетного фильтра.
Вы можете использовать критерии фильтрации для непосредственного определения видов сетевого трафика специфических хостов, назначить классификацию трафика в очереди, выполнить формирование трафика (шейпер) и даже перенаправить проблемный трафик к специализированному ПО для специальной обработки. Все эти обработки производятся на сетевом уровне, основываясь на свойствах пакетов и соединений. PF является частью сетевого стека, встроенного в ядро операционной системы. Существовали примеры фильтрации пакетов в пространстве пользователя (user space), однако в большинстве операционных систем функции фильтрации реализуются в ядре системы, что обеспечивает высокую скорость работы.
Как исследовательский проект BSD был свёрнут в начале 90-х годов и его код был освобождён для дальнейшего развития небольшими группами энтузиастов по всему миру. некоторые из этих энтузиастов были ответственны за сохранение жизненно важных частей инфраструктуры Интернет и развитие BSD продолжалось несколькими параллельными направлениями под эгидой различных групп. OpenBSD стала известна как наиболее безопасная ОС основанная на BSD. в качестве системы фильтрации пакетов, данная система использовала подсистему названную IPFilter, написанную Дарреном Ридом (Darren Reed).
В начале 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 не составил особых проблем.
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.
Эта книга посвящена PF доступном в OpenBSD 4.8, и, в случае необходимости, я буду отмечать значительные различия между этой версией и теми, которые интегрированы в другие системы. Если вы гготовы погрузиться в конфигурирование PF, вы можете перейти к Главе 2, чтобы сразу начать работу.
Если вы хотите потратить немного времени и прокатиться по незнакомой территории BSD, можете продолжить чтение этой главы.
Врезка: Новые версии PF работают лучше! Как и всё в мире компьютеров, OpenBSD и PF были затронуты быстрыми изменениями аппаратных средств с сетей связи. Я не видел тестов сопоставимости USENIX, однако пользователи PF находят, что накладные расходы при использовании PF весьма скромные. В качестве примера (в основном, чтобы показать, что даже слабые конфигурации оборудования вполне применимы), одна из фирм использовала в качестве сетевых шлюзов машины в конфигурации Pentium III 450МГц c 384Мб памяти. При этом я не могу припомнить, чтобы простой машины составлял менее 96%! Стоит отметить, что текущие разработчики PF, в основном Хеннинг Брауэр (Henning Brauer) и Райан Мак'Брид (Ryan McBride), при участии ряда других, внесли ряд оптимизаций в код OpenBSD PF в нескольких последних релизах, что делало каждый последующий релиз с 4.4 по 4.8 заметно лучше предыдущего.
Если вы хотите использовать PF, необходимо установить и запустить системы такие как OpenBSD, FreeBSD, NetBSD или DragonFly BSD. Всё это - прекрасные ОС, но лично мне больше нравится OpenBSD, в основном по той причине, что это та операционная система в которой, по существу, происходит развитие PF, и мне нравится деловой подход к её разработке. Иногда, небольшие изменения и исправления ошибок присходят в реализациях PF на других системах, но новый и самый современный код PF всегда можно найти в OpenBSD.
Некоторые из особенностей описанные в этой книге доступны только в последних версиях OpenBSD. Другие BSD системы, как правило портируют последние релизы PF OpenBSD в свой базовый код, однако синхронизация обновлений далеко не гарантирована и отставание может быть значительным.
Если вы планируете использовать PF на FreeBSD, NetBSD, DragonFly BSD или других системах, вы должны проверить замечания к релизу для вашей системы и прочую документацию, в целях получения подробной информации о включённой версии PF.
В системах BSD, интерфейсам присваиваются имена, состоящие из имени драйвера и порядкового номера интерфейса. Например старые карты 3Com использующие драйвер ep появляются в системе как ep0, ep1 и так далее; карты Intel Gigabit, определяются как em0, em1 и так далее. Некоторые карты SMC представляются как sn0, sn1... Эта система вполне логична, и позволяет проще найти данные для специфичного интерфейса. Если сообщения ядра (в процессе загрузки или выводе ifconfig), говорят, что у вас есть интерфейс названный em0, вам необходимо обратится к странице руководства системы, чтобы узнать, какую скорость он поддерживает, какие прошивки ему нужны и тому подобное.
hostname.if
,
где if заменяется именем интерфейса.
Несколько простых советов ориентирующих пользователей Linux в BSD представлены в на странице 6 "Указания для пользователей Linux".
Общая проблема в том, что конфигурационные файлы PF легко читаемы, т.ч. графический интерфейс, на самом деле, не является крайне необходимым. В любом случае, существует несколько графических инструментов, которые позволяют редактировать и/или генерировать конфигурацию PF, в том числе и специализированный дистрибутив FreeBSD называемый pfSense (http://pfsense.org), включающий в себя достаточно комплексный GUI редактор.
Я рекомендую изучить эту книгу, особенно части относящие к вашей ситуации, а затем решить вопрос о необходимости использования GUI.
Прочие продукты неизбежно будут иметь иной набор функциональных возможностей и отличную конфигурацию, отражающую различные подходы к конкретным проблемам, которые может быть непросто сопоставить с особенностями PF и связанных с ним инструментов.
Документирование политики с поддержанием актуального состояния документации по мере внесения изменений сильно облегчает вам жизнь. Данная документация должна содержать полную спецификацию того, достижению чего способствуют ваши настройки. (Вы можете начать с комментирования файла конфигурации для объяснения целей каждого создаваемого правила). Это позволяет убедиться, является конфигурация рациональной реализацией проектируемых целей.
Обычно системный администратор ищет пути автоматического преобразования настроек, и это вполне понятно. Я призываю вас противостоять таким желаниям и выполнять перенос настроек только после переоценки вашего технического оснащения и потребностей бизнес-процесса, и, желательно, после создания или обновления формальной спецификации и политики.
Некоторые из инструментов обладающих адинистративным интерфейсом имеют возможность формирования файлов конфигурации для нескольких различных типов брандмауэров и, вполне очевидно, могут использоваться в качестве инструментов преобразования настроек. Однако, при этом возникает эффект создания нового уровня абстракции между вами и вашим набором правил, что ставит вас в зависимость от понимания автора инструмента о том, как работает набор правил PF. Я рекомендую ознакомиться с соответствующими частями этой книги, прежде чем начинать тратить время на серьёзное рассмотрение проблемы автоматизированного преобразования настроек.
Уроки извлечённые в течение почти десяти лет развития и использования PF привели к внутренним изменениям кода, который в конечном счёте ясно дал понять разработчикам, что незначительное изменение синтаксиса имело бы смысл. Для пользователей, результатом стало то, что PF стал проще в использовании и работает лучше чем в более ранних версиях. Если вы обновите свою систему до OpenBSD 4.7 или выше, вы почувствуете реальное удовольствие от работы.
Если у вас есть BSD системы с установленным PF, обратитесь к man страницам руководства для получения информации о особенностях текущей версии PF. Если не указано иное, информация этой книги относится к системе OpenBSD 4.8.
Стихотворение приведённое здесь, является хорошим показателем того чувства, которое PF вызывает у своих пользователей. Это стихотворение (поэма) появилась в списке рассылки PF, в потоке начинавшемся с сообщения "Вещи которое не может PF?" в мае 2004 года. Сообщение было написано кем- то, кто имел совсем мало опыта работы с брандмауэром и не мог добиться желаемого результата.
Конечно, это привело к некоторой дискуссии среди участников, обсуждающей трудность освоения PF новичками, возможные альтернативы типа Bitdefender и пр. Поток закончился следующей восхвалительной хайку, написанной Джейсоном Диксоном (Jason Dixon), 20 мая 2004 года.
Сравнение работы iptables и PF подобно этому хайкуНекоторые из концепций которые Диксон использует здесь могут звучать незнакомо, но если вы продолжите читать книгу, они скоро обретут смысл.