Московский государственный университет имени М.В.Ломоносова
Опубликован: 21.09.2006 | Доступ: свободный | Студентов: 5092 / 948 | Оценка: 4.32 / 4.09 | Длительность: 19:19:00
ISBN: 978-5-9556-0076-0
Лекция 3:

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

Набор правил IPF

Набор правил определяет прохождение или блокировку пакетов, основываясь на значениях, содержащихся в пакете. Установление сессии включает в себя двунаправленный обмен пакетами между хостами. Набор правил firewall’а обрабатывает пакет два раза: один раз — когда он поступает из Интернета и второй — когда он возвращается обратно в Интернет. Каждый TCP/IP-сервис (http, smtp, telnet и т.п.) определяется своим протоколом, IP-адресами источника и получателя, номерами портов источника и получателя. Эти значения являются основными критериями, на основе которых разрешаются или блокируют сервисы.

IPF был первоначально написан с использованием логики обработки правил "используется последнее правило, которому соответствует пакет". Правила не поддерживали состояния. Со временем IPF был усилен включением опции quick и опции поддержки состояния keep state, что существенно изменило логику обработки правил.

Далее мы будем рассматривать использование правил, которые включают опцию quick и опцию поддержки состояний keep state. Это общая основа для набора во включающем пакетном фильтре.

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

Синтаксис правила

Синтаксис использует логику "используется первое правило, которому соответствует пакет".

Символ # используется для обозначения начала комментария и может появиться в конце строки правила или в начале всей строки.

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

Общий синтаксис правила следующий:

ACTION IN-OUT OPTIONS PROTO SRC_ADDR,DST_ADDR TCP_FLAG STATEFUL

Где:

ACTION = block | pass
    IN-OUT = in | out
    OPTIONS = log [body | first] | quick | on 
    PROTO = proto <Value;>
    Value = tcp/udp | udp | tcp | icmp
    SRC_ADDR,DST_ADDR = all | from <Object > to <Object>
    Object = <IP-address > [<PORT_NUM >] | any [<PORT_NUM >]
    PORT_NUM = port <number >
    TCP_FLAG = flags <flag-value <
    flag-value = S
    STATEFUL = keep state
Действие (action)

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

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

pass указывает, что пакет должен быть пропущен пакетным фильтром, если он соответствует параметру выбора.

IN-OUT

Обязательное требование состоит в том, что в каждом правиле фильтра должно быть явно указано, пакеты какого направления оно анализирует. Ключевым словом может быть либо in, либо out. Если указано что-либо еще, то правило не пройдет синтаксическую проверку.

in означает, что данное правило применяется для входящего пакета на указанном интерфейсе.

out означает, что данное правило применяется для исходящего пакета на указанном интерфейсе.

Опции

Опции должны использоваться в указанном ниже порядке.

log означает, что заголовок пакета будет записан в ipl лог, если пакет соответствует параметрам выбора.

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

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

Когда пакет записывается в лог, заголовки пакета используются пакетом IPL, который создает логи на псевдо-устройстве. Непосредственно за ключевым словом log могут использоваться следующие квалификаторы (в указанном порядке):

body означает, что после заголовков будут записаны первые 128 бит содержимого пакета.

first – если ключевое слово log используется вместе с опцией keep state, рекомендуется, чтобы данная опция также применялась, так как в этом случае только начальный пакет заносится в лог, но не пакеты, которые в дальнейшем соответствуют информации keep state.

SELECTION

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

PROTO

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

tcp/udp | udp | tcp | icmp или название любого другого протокола, которое находится в /etc/protocols. Ключевое слово tcp/udp может использоваться для указания соответствия пакета либо ТСР, либо UDP, и добавлено для удобства.

SRC_ADDR / DST_ADDR

Ключевое слово all является синонимом для from any to any без каких-либо других параметров.

from src to dst: ключевые слова from и to используются для указания соответствующих IP-адресов. В правилах должны быть указаны оба параметра, и источник, и получатель. any является специальным ключевым словом, которое соответствует любому IP-адресу. Примеры использования: from any to any, from 0.0.0.0/0 to any, from 0.0.0.0 to any.

IP-адреса должны быть указаны как в форме dot-нотации с указанием длины маски, так и в форме единственного IP-адреса в dot-нотации.

PORT

Когда проверяется соответствие порта, то может использоваться либо целое число номера порта, либо название сервиса из /etc/services. Когда порт указывается как часть объекта from, он соответствует номеру порта источника; когда он появляется как часть объекта to, он соответствует номеру порта получателя. Использование опции port с объектом to является обязательным требованием для модернизированной логики обработки правил. Пример использования: from any to any port=80.

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

port "=" | "!=" | ">" | ";<" | ";<=" | ">=" | "eq" | "ne" | "lt" | "gt" | "le" | "ge"

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

port "<>" | "><"
TCP_FLAG

Флаги устанавливаются только для ТСР-фильтрации. Буквы указывают один из возможных флагов, который может быть установлен в заголовке ТСР-пакета. В модернизированной логике обработки пакетов используется параметр flags S для идентификации запроса начала сессии.

STATEFUL

keep state указывает, что в правиле pass любые пакеты, которые соответствуют параметрам выбора в правиле, должны активизировать stateful возможность фильтрации.

Замечание. Данная опция является обязательной для модернизированной логики обработки правил.

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

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

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

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