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

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

Selection

Ключевые слова данного раздела применяются для описания атрибутов пакета, которые будут анализироваться, чтобы определить, соответствует ли пакет правилу или нет. Следующие атрибуты общего назначения предназначены для поиска соответствия и должны использоваться в указанном порядке:

udp | tcp | icmp

Также может быть использовано любое другое название протокола, которое указано в /etc/protocols. Это значение является протоколом, соответствие с которым будет проверяться.

from src to dst

Ключевые слова from и to используются для поиска соответствия с IP-адресами. Правила должны указывать ОБА параметра как источника, так и назначения. any является специальным ключевым словом, которое соответствует любому IP-адресу. me является специальным ключевым словом, которое соответствует любому IP-адресу, сконфигурированному на интерфейсе системы, на которой выполняется пакетный фильтр (например, from me to any или from any to me ). IP-адреса указываются в dot-нотации IP-адреса со "/" и длиной маски. Это — обязательное требование.

port <number>

Используется для протоколов, которые поддерживают номера портов (таких как ТСР и UDP). Вместо значения номера порта может быть указано имя сервиса из /etc/services.

in | out

Используется для указания входящих или исходящих пакетов, соответственно. Одно из этих ключевых слов должно быть указано обязательно в качестве части критерия при поиске соответствия.

via IF

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

setup

Это является обязательным ключевым словом, которое идентифицирует запрос начала установки сессии для ТСР-пакетов.

keep-state

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

limit { src-addr | src-port | dst-addr | dst-port }

Указывается, что пакетный фильтр разрешает только N соединений с одним и тем же набором параметров. Может быть указано один или более адресов и портов источника и получателя. limit и keep-state не могут быть одновременно указаны в одном и том же правиле. Limit предоставляет определенную возможность поддержки состояния, как и keep-state, но также имеет и дополнительные возможности.

Опции правила Stateful

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

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

Динамические правила уязвимы для исчерпания ресурсов с помощью SYN-flood атаки, при которой создается большое число динамических правил. Для отражения данной атаки во FreeBSD версии 4.5 добавлена новая опция, называемая limit. Эта опция используется для ограничения количества одновременно устанавливаемых сессий с помощью просмотра полей источника или получателя в правиле, которое выполняется, если установлена опция limit. Если значение счетчика больше, чем значение, указанное в опции limit, пакет отбрасывается.

Создание логов

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

Даже при установленной возможности создания логов IPFW не создает логи для каждого своего правила. Администратор пакетного фильтра сам решает, какие правила он хочет записывать в лог, и добавляет признак log в эти правила. Обычно это добавляется только для правил deny, например, для правила deny для входящих ICMP-пакетов. Также признак log добавляется в самое последнее правило. Это позволяет отследить все пакеты, которые не соответствовали ни одному из правил.

С созданием логов связано две опасности: можно потеряться в огромном количестве данных и переполнить дисковое пространство. DoS-атака, которая переполняет диск, является одной из старейших DoS-атак. Эти сообщения логов не только пишутся с использованием утилиты syslogd, но также показываются на консоли администратора, что скоро начинает раздражать.

Опция ядра IPFIREWALL_VERBOSE_LIMIT=5 ограничивает количество последовательных сообщений, посылаемых в syslogd, которые касаются пакета, соответствующего данному правилу. Когда данная опция установлена в ядре, количество последовательных сообщений, относящихся к конкретному правилу, не превышает указанного количества. Никогда не будет создано 200 сообщений лога, говорящих об одном и том же. Например, пять последовательных сообщений, касающихся конкретного правила, будут занесены в syslogd, оставшиеся сообщения будут подсчитаны и занесены в syslogd с помощью примерно такой фразы:

last message repeated 45 times

Все сообщения по умолчанию записываются в файл /etc/log/security, который определяется в файле /etc/syslog.conf.

Построение скрипта правила

Опытные администраторы IPFW создают файл, содержащий правила и код, который затем выполняется в виде скрипта. Основное преимущество состоит в том, что правила пакетного фильтра могут быть изменены без необходимости перезапуска системы. Этот метод очень удобен при тестировании новых правил, так как данная процедура может быть выполнена много раз. При написании скрипта можно создавать символьные подстановки для обозначения часто используемых значений и затем указывать их в нескольких правилах. Синтаксис скрипта совместим с sh, csh и tcsh shell’ами. Поля символьной подстановки должны начинаться со знака $. Символьные поля не имеют префикса $. Значение, которое принимает символьное поле, должно быть заключено в двойные кавычки.

Файл правил должен начинаться примерно так:

############### start of example ipfw rules script #############
    #
    ipfw -q -f flush  # Delete all rules
    # Set defaults
    oif="tun0"    # out interface
    odns="192.0.2.11"  # ISP's DNS server IP address
    cmd="ipfw -q add " # build rule prefix
    ks="keep-state"  # just too lazy to key this each time
    $cmd 00500 check-state
    $cmd 00502 deny all from any to any frag
    $cmd 00501 deny tcp from any to any established
    $cmd 00600 allow tcp from any to any 80 out via $oif setup $ks
    $cmd 00610 allow tcp from any to $odns 53 out via $oif setup $ks
    $cmd 00611 allow udp from any to $odns 53 out via $oif $ks
    ################### End of example ipfw rules script ############

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

Если приведенный выше пример находится в файле /etc/ipfw.rules, то эти правила могут быть загружены с помощью следующего ввода в командной строке:

# sh /etc/ipfw.rules

То же самое можно сделать, выполнив вручную следующие команды:

# ipfw -q -f flush
    # ipfw -q add check-state
    # ipfw -q add deny all from any to any frag
    # ipfw -q add deny tcp from any to any established
    # ipfw -q add allow tcp from any to any 80 out via tun0 setup keep-state
    # ipfw -q add allow tcp from any to 192.0.2.11 53 out via tun0 setup keep-state
    # ipfw -q add 00611 allow udp from any to 192.0.2.11 53 out via tun0 keep-state
Нияз Сабиров
Нияз Сабиров

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

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

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

Игорь Касаткин
Игорь Касаткин
Россия, Москва
Зарина Каримова
Зарина Каримова
Казахстан, Алматы, Гимназия им. Ахмета Байтурсынова №139, 2008