Опубликован: 21.09.2006 | Уровень: для всех | Доступ: платный | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 3:

Пример пакетных фильтров в ОС FreeBSD 6.0

Аннотация: Рассматриваются пакетные фильтры, реализованные в ОС FreeBSD 6.0: PF IPFILTER (IPF) и IPFW. Рассматривается синтаксис правила для каждого из этих пакетных фильтров и возможности поддержки состояния ТСР-соединения в них. Приводится порядок прохождения пакета через правила пакетного фильтра. Изучается применение функции трансляции сетевых адресов (NAT). Приведены примеры набора правил в IPF и IPFW.

Введение

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

Пакетные фильтры могут использоваться следующим образом:

  • Защищать и изолировать приложения, сервисы и компьютеры во внутренней сети от нежелательного входящего трафика из Интернета.
  • Ограничивать или запрещать доступ с хостов внутренней сети к сервисам в Интернете.
  • Выполнять трансляцию сетевых адресов ( NAT ), что позволит внутренней сети использовать частные IP-адреса и разделять единственное соединение с Интернетом (либо с одним IP-адресом, либо с разделяемым пулом автоматически назначаемых публичных адресов).

Рассмотрим следующие проблемы:

  • Корректное определение правил фильтрования пакетов.
  • Различия между firewall’ами, встроенными во FreeBSD.
  • Использование и конфигурирование OpenBSD PF пакетного фильтра.
  • Использование и конфигурирование IPFILTER.
  • Использование и конфигурирование IPFW.

Основные характеристики пакетных фильтров в ОС FreeBSD

Существует два основных способа создания набора правил пакетного фильтра: "inclusive" — включающий и "exclusive" — исключающий. Основное различие состоит в том, какое правило применяется по умолчанию к пакетам, не соответствующим всем остальным правилам.

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

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

Дальнейшее усиление безопасности может достигаться использованием stateful firewall. Применение stateful firewall’а означает, что пакетный фильтр отслеживает открытые соединения и разрешает прохождение только того трафика, который либо соответствует существующему соединению, либо открывает новое соединение. Недостатком stateful firewall’а является то, что он уязвим для DoS-атак, если большое количество новых соединений открывается очень быстро. В большинстве случаев можно использовать комбинацию stateful и не-stateful свойств, создавая оптимальный firewall для защиты локальной сети.

ПО пакетных фильтров

FreeBSD имеет три различных пакета ПО firewall’а, встроенных в базовую систему. Это IPFILTER (также известный как IPF), IPFIREWALL (также известный как IPFW ) и PacketFilter из OpenBSD (также известный как PF). FreeBSD также имеет два встроенных пакета ПО для шейпинга ("отслеживания" — "shaping") трафика, обычно используемых для управления используемой шириной пропускания: altq и dummynet. Dummynet традиционно используется с IPFW, а ALTQ — с IPF и PF. IPF, IPFW и PF применяют правила для управления доступом пакетов в систему и из системы, но при этом они делают это разными способами и имеют разный синтаксис правил.

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

Отчасти предпочтительным можно называть IPFILTER, потому что его stateful правила являются менее сложными при использовании в окружении NAT и он имеет встроенный ftp-прокси, что упрощает правила, разрешающие использование безопасного исходящего FTP.

Так как все пакетные фильтры основаны на анализе значений определенных полей пакета, при написании набора правил пакетного фильтра следует понимать, как работает TCP/IP, что означают различные значения полей в пакете и как эти значения используются в обычном случае.

OpenBSD Packet Filter (PF) и ALTQ

В 2003 году ПО пакетного фильтра из OpenBSD, известное как PF, было портировано на FreeBSD и доступно во FreeBSD Ports Collections; первой версией, которая содержала PF в качестве составной части базовой системы, была FreeBSD 5.3, выпущенная в ноябре 2004 года. PF является полнофункциональным пакетным фильтром, который имеет дополнительную поддержку для ALTQ (Alternate Queuing). ALTQ обеспечивает качество сервиса (QoS), что позволяет гарантировать ширину пропускания для различных сервисов, указанную в правилах фильтрования.

До версий 4.Х PF не доступен.

Во всех версиях, начиная с 4.Х, PF доступен как часть проекта KAME.

5.Х до 5.3 RELEASE – может использоваться порт security/pf для инсталляции PF.

5.3 RELEASE и более позднее – PF является частью базовой системы. Начиная с этих версий FreeBSD, не следует использовать порт security/pf. Вместо этого следует использовать PF базовой системы.

Указание необходимости использования PF

PF включен в базовую инсталляцию FreeBSD во все версии позднее 5.3 в качестве отдельного загружаемого модуля времени выполнения. Система будет динамически загружать модуль ядра PF, если в rc.conf указано утверждение pf_enable="YES". Загружаемый модуль будет иметь возможность создавать логи pflog.

Замечание. Модуль предполагает наличие опций INET и device bpf.

После того как модуль загружен или ядро статически осуществляет поддержку PF, существует возможность разрешить или запретить pf с помощью команды pfctl:

# pfctl –e

Команда pfctl предоставляет способ работы с пакетным фильтром PF.

Опции ядра

Не существует требования, что запуск PF должен выполняться обязательно из ядра FreeBSD. Компилирование PF в ядро приведет к тому, что загружаемый модуль никогда не будет использоваться.

Пример конфигурирования ядра можно найти в /usr/src/sys/ conf/NOTES:

device pf
 device pflog
 device pfsync

device pf обеспечивает поддержку пакетного фильтра PF.

device pflog обеспечивает дополнительную поддержку псевдосетевого устройства pflog, которое может быть использовано для создания логов трафика, используя bpf дескриптор. Демон pflog может использоваться для хранения информации логов на диске.

device pfsync обеспечивает дополнительную поддержку псевдосетевого устройства pfsync, которое используется для мониторинга изменений состояния. Так как оно не является частью загружаемого модуля, оно встраивается в ядро.

Опции rc.conf

Для активации PF следует установить следующие опции в /etc/rc.conf:

pf_enable="YES"                 # необходимость PF
    pf_rules="/etc/pf.conf"      # файл с определениями правил 
                                 # для PF
    pf_flags=""                     # дополнительные флаги для 
                                 # запуска pfctl
    pflog_enable="YES"             # start pflogd
    pflog_logfile="/var/log/pflog" # где pflogd должен хранить 
                                 #logfile
    pflog_flags=""                 # дополнительные флаги для 
                                 # запуска pflogd

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

gateway_enable="YES" # возможность функционирования 
                         # в качестве шлюза

Указание необходимости использования ALTQ

ALTQ доступен только в компилированном в ядро FreeBSD виде. Следует иметь в виду, что ALTQ не поддерживает все существующие драйверы сетевых карт. Для включения возможностей ALTQ следует указать следующие опции:

options ALTQ
    options ALTQ_CBQ # Class Bases Queuing (CBQ)
    options ALTQ_RED # Random Early Detection (RED)
    options ALTQ_RIO # RED In/Out
    options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC)
    options ALTQ_PRIQ #Priority Queuing (PRIQ)
    options ALTQ_NOPCC # Required for SMP build

options ALTQ обеспечивает возможность функционирования ALTQ.

options ALTQ_CBQ дает возможность делить ширину пропускания соединения на различные классы или очереди для создания приоритетов трафика на основе правил фильтрации.

options ALTQ_RED используется для предотвращения перегрузки сети. RED делает это посредством измерения длины очереди и сравнением ее с минимальным и максимальным порогами для очереди. Если очередь больше максимальной, то все новые пакеты отбрасываются. В соответствии со своим названием RED отбрасывает пакеты из различных соединений случайно.

options ALTQ_RIO передает в первую очередь трафик, который находится в самой верхней очереди.

Создание правил фильтрации

Пакетный фильтр читает правила конфигурации из pf.conf файла и модифицирует, отбрасывает или пропускает пакеты в соответствии с правилами, указанными там. Файл /etc/pf.conf также содержит полезные примеры и объяснения.

Синтаксис точно такой же, как и в OpenBSD.

Нияз Сабиров
Нияз Сабиров

Здравствуйте. А уточните, пожалуйста, по какой причине стоимость изменилась? Была стоимость в 1 рубль, стала в 9900 рублей.

Елена Сапегова
Елена Сапегова

для получения диплома нужно ли кроме теоретической части еще и практическую делать? написание самого диплома требуется?

Иван Бузмаков
Иван Бузмаков
Россия, Сарапул
Никита Сомов
Никита Сомов
Россия, Удмуртская республика