Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 29 Mar 2012 08:44:51 GMT
From:      Vladimir <tinkae.kel@gmail.com>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   docs/166482: Chapter about IPFW in russian handbook (27.6)
Message-ID:  <201203290844.q2T8ipIG053010@red.freebsd.org>
Resent-Message-ID: <201203290850.q2T8o9SC021503@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         166482
>Category:       docs
>Synopsis:       Chapter about IPFW in russian handbook (27.6)
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-doc
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          doc-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Mar 29 08:50:09 UTC 2012
>Closed-Date:
>Last-Modified:
>Originator:     Vladimir
>Release:        8.2
>Organization:
>Environment:
all platforms
>Description:
For now, there is no chapter about IPFW in russian handbook. In .ru net exists some translations of this chapter, but they are pretty poor and comlicated for perception.

>How-To-Repeat:
Go to http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/firewalls-ipfw.html
There is no russian chapter about IPFW
>Fix:
With collegue we've done this job for our internal use. In my opinion, it sounds not bad we're ready to send our version of chapter on russian language. 
File with a translation attached.

Patch attached with submission follows:

31.6 IPFW   

IPFIREWALL (IPFW) - представляет собой межсетевой экран, разрабатываемый, финансируемый и поддерживающийся ассоциацией FreeBSD. Здесь используются правила без наследования состояния и правила наследования техники кодирования для достижения того, что называют элементарной логикой сохранения состояний (при первом прочтении рекомендуется пока не заострять внимание на  термине "сохранение состояния", так как в дальнейшем будут приведены данные, необходимые для полного понимания этого термина).

Пример простейших правил IPFW (находится в /etc/rc.firewall и /etc/rc.firewall6) содержится в стандартной поставке и не ожидается, что будет использован прямо без модификаций.

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

IPFW состоит из семи составных частей, главная компонента - процессор правил фильтра уровня ядра, в который включены возможности: учета пакетов, занесения информации о пакетах в лог - файл (журналирование), правила типа divert, посредством которых активируется функция NAT и другие возможности специального назначения, такие как средства ограничения пропускной способности  траффика (dummynet), средства перенаправления fwd rule, средства создания сетевого моста, и средства антитрассировки ipstealth. IPFW поддерживает оба протокола IPv4 и IPv6.

31.6.1 Активация IPFW   

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

После перезагрузки вашей системы с записью firewall_enable="YES" в rc.conf высветится белым последующее сообщение на экране как часть процесса загрузки операционной системы:

ipfw2 initialized, divert disabled, rule-based forwarding disabled, default to deny, logging disabled

Загружаемый модуль скомпилирован с поддержкой возможности занесения в лог-файл информации о траффике. Чтобы включить функцию занесения в лог файл информации о траффике и установить уровень детальности информации, заносимой в лог-файл, можно воспользоваться функциями, предоставляемыми конфигурационным файлом /etc/sysctl.conf. При добавлении следующих двух строк в /etc/sysctl.conf функция занесения в лог будет активирована при последующих загрузках системы:

net.inet.ip.fw.verbose=1
net.inet.ip.fw.verbose_limit=5

31.6.2 Параметры ядра   

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

options IPFIREWALL

Этот параметр указывает компилятору включить IPFW как часть ядра (не подгружаемую).

options    IPFIREWALL_VERBOSE

Этот параметр включает возможность занесения в лог-файл информации о пакетах, которые проходят через IPFW по правилам, содержащим ключевое слово log. 

options    IPFIREWALL_VERBOSE_LIMIT=5

Ограничивает число пакетов зарегистрированных в syslogd (8), начиная с первого. Этот параметр может быть использован во враждебном окружении, когда отслеживать активность межсетевого экрана все же необходимо. Это не даст возможности атакующему вызвать отказ в обслуживании посредством syslogd.

options    IPFIREWALL_DEFAULT_TO_ACCEPT

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

options IPDIVERT

Этот параметр выводит пакеты на уровень обработки приложениями, в том числе NAT функционалом.

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

31.6.3 Параметры /etc/rc.conf   

Активация межсетевого экрана:

firewall_enable="YES"

Для выбора одного из стандартных типов межсетевого экрана, поставляемых с FreeBSD, найдите наиболее подходящий в файле /etc/rc.firewall и запишите его как показано ниже:

firewall_type="open"

Доступные значения для этого параметра:

open -- пропускаем весь траффик.

client -- защищаем только эту машину.

simple -- защищаем всю сеть.

closed -- полностью запрещает IP траффик кроме траффика на loopback интерфейсе.

UNKNOWN -- отключает загрузку правил межсетевого экрана.

filename -- абсолютный путь файла, содержащего правила межсетевого экрана. 

Есть два варианта загрузки пользовательских правил для межсетевого экрана ipfw. Первый способ - установить значение переменной firewall_type в виде абсолютного пути файла, содержащего правила для межсетевого экрана ipfw без общего префикса команд ipfw. Ниже представлен простой пример файла правил, который блокирует весь входящий и исходящий траффик:

add deny in
add deny out

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

#!/bin/sh
 
ipfw -q flush
 
ipfw add deny in
ipfw add deny out

Примечание: Если значение переменной firewall_type определено как client или simple, то правила, расположенные по умолчанию в /etc/rc.firewall должны быть приведены в соответствие с конфигурацией данной машины. Следует помнить, что в примерах, приведенных в этой главе, значением переменной firewall_script установлено /etc/ipfw.rules.

Активация функции журналирования:
firewall_logging="YES"

Внимание: Единственное, что делает параметр firewall_logging - присваивает логическую единицу переменной net.inet.ip.fw.verbose в конфигурационном файле sysctl (смотрите главу 31.6.1).  В rc.conf нет переменной, ограничивающей журналирование, но оно может быть установлено через переменную sysctl вручную или через конфигурационный файл /etc/sysctl.conf

net.inet.ip.fw.verbose_limit=5

Если ваша машина выполняет роль шлюза, т.е. обеспечивает трансляцию сетевых адресов (NAT) с помощью natd, имеет смысл сразу перейти к чтению главы 32.10 для уточнения информации касательно параметров /etc/rc.conf

31.6.4 Команда IPFW   

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

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

Вывод полного списка правил:

# ipfw list

Вывод полного списка правил с маркером времени когда в последний раз срабатывало правило:

# ipfw -t list

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

# ipfw -a list

Вывод динамических правил вместе со статическими. 

# ipfw -d list

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

# ipfw -d -e list

Обнуление счетчиков:

# ipfw zero

Обнулить счетчик только для правила под номером NUM:

# ipfw zero NUM

31.6.5 Правила IPFW   

Список правил - это такой набор правил, который позволяет произвольным образом разрешить или запретить прохождение пакета через межсетевой экран, на основании значений ключевых параметров полей пакета. Двунаправленный обмен пакетов между машинами является сессией. Межсетевой экран обрабатывает с помощью списка правил пакеты, приходящие из глобальной сети, а также пакеты, исходящие из системы в глобальную сеть. Каждый TCP/IP сервис (т.е.: telnet, www, mail, и т.д.)принадлежит определенному протоколу и привилегированному (слушающемуся) порту. Пакеты, адресованные определенному сервису, исходят по непривилегированному (порядковый номер старше 1024) порту и отправляются по адресу назначения на привилегированный порт сервиса. Все эти параметры (т.е. порты и адреса) могут быть использованы в качестве критериев отбора, для создания правил, которые пропускают или блокируют сервисы.

Когда пакет входит в межсетевой экран, происходит проверка на условие срабатывания первого правила в списке и так далее двигаясь сверху вниз в порядке возрастания номера правила. Когда пакет проходит проверку по определенным параметрам, выполняется действие, описанное в правиле и на этом поиск правил заканчивается. Этот метод поиска называют "победой первого совпадения". Если содержимое пакета не соответствует ни одному из условий срабатывания правил, он попадает на встроенное правило, заданное по умолчанию, под номером 65535, которое запрещает прохождение пакета и отбрасывает его без отклика в сторону источника запроса.

Примечание: Поиск продолжается после правил, использующих ключевые слова count, skipto и tee.

Инструкции, упоминающиеся в примерах, встречающихся в данном руководстве, базируются на использовании правил, включающих в себя ключевые слова сохранения состояния keep-state, limit, in, out и via. Эти ключевые слова являются основой кодирования межсетевого экрана закрытого типа.

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

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

Синтаксис правил представленный здесь был упрощен для создания списка правил стандартного межсетевого экрана закрытого типа. Для получения полной информации по синтаксису правил, смотрите руководство ipfw(8).

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

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

CMD RULE_NUMBER ACTION LOGGING SELECTION STATEFUL

31.6.5.1.1 CMD   

Каждое новое правило начинается с ключевого слова add, для добавления правила к таблице.

31.6.5.1.2 RULE_NUMBER   

Каждое правило обозначено номером в диапазоне 1..65535

31.6.5.1.3 ACTION   

При соответствии критериев отбора пакету, описанных в правиле, может быть выполнено одно из следующих действий:

allow | accept | pass | permit

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

check-state

Проверяет пакет на соответствие с динамическими правилами. Если соответствие найдено, к пакету применяется действие, содержащееся в динамическом правиле, которое ранее было сгенерированно при помощи keep-state или limit. В правиле check-state отсутствует условие проверки срабатывания. Если ключевое слово check-state отсутствует в списке правил, то проверка по динамической таблице происходит одновременно с первым вхождением keep-state или limit ключевых слов.

deny | drop

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

31.6.5.1.4 LOGGING   

log или logamount

Когда пакет соответствует критериям отбора в указанном правиле, содержащем ключевое слово log, информация об этом пересылается даемону syslogd(8) с пометкой SECURITY. Журналирование происходит только в том случае, если число срабатываний для данного правила, содержащего ключевое слово log не превысило значения параметра ключевого слова logamount. Если значение параметра logamount не объявлено, используется ограничение, устанавливаемое значением параметра net.inet.ip.fw.verbose_limit в конфигурационном файле sysctl. В обоих случаях, установка значения 0 снимает ограничения. По достижению максимального установленного количества записей в лог, ограничение на запись может быть снято путем сброса внутренних счетчиков. Это можно сделать при помощи команды ipfw reset log.

Примечание: Журналирование осуществляется после проверки на соответствие по всем условиям в правиле и перед выполнением последнего действия (разрешение/запрещение прохождения) над пакетом. Это важно для принятия решения, какие действия правил вы хотите заносить в лог.

31.6.5.1.5 SELECTION   

Ключевые слова, описанные в этом разделе используются для описания критериев по которым проверяется условие срабатывания правила. Последовательность использования ключевых слов отбора по протоколу:

udp | tcp | icmp

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

from src to dst

Ключевые слова from и to служат для отбора по IP адресам. Обязательно должны быть указаны и источник и получатель. any - это специальное ключевое слово, которое соответствует любому IP - адресу. me - это специальное ключевое слово, которое соответствует любому из IP адресов, принадлежащих интефейсам вашей системы FreeBSD. 
Примеры критериев отбора формата from src to dst:
from me to any 
from any to me
from 0.0.0.0/0 to any
from any to 0.0.0.0/0
from 0.0.0.0 to any
from any to 0.0.0.0 
from me to 0.0.0.0
IP адрес может быть определен как просто IP адресом так и IP адресом с префиксом подсети. Для упрощения вычислений, связанных с IP адресами используйте порт net-mgmt/ipcalc. Более детальную информацию можно посмотреть по адресу  http://jodies.de/ipcalc.

port number

Для протоколов, поддерживающих порты (tcp и udp) обязательно уточните номер порта соответствующего сервиса. Вместо номера порта можно использовать имя сервиса. Список поддерживаемых имен, может быть найден по адресу /etc/services.

in | out

Отбор по входящим и исходящим пакетам. Для формирования отбора, присутствие одного из этих слов обязательно.

via IF

via ключевое слово для отбора по интерфейсу, заданного именем IF. 

setup

Это обязательное ключевое слово, служащее для определения запроса начала сессии для TCP пакета.

keep-state

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

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

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

31.6.5.2 Пример правил с сохранением состояния.   

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

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

Динамические правила уязвимы к атаке SYN-пакетами, которые могут породить гигантское количество динамических правил. Для предотвращения такого рода атак, во FreeBSD предусмотрено еще одно ключевое слово - limit.

31.6.5.3 Журналирование сообщений межсетевого экрана   

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

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

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

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

Опция ядра IPFIREWALL_VERBOSE_LIMIT=5 ограничивает число сообщений, которые будут занесены в лог по каждому отдельно взятому правилу. Все пакеты, которые будут проходить через правила содержащие ключевое слово log, при условии достижения правилом максимального числа записей занесенных в лог, заданного опцией IPFIREWALL_VERBOSE_LIMIT, НИКАКИХ ЗАПИСЕЙ В ЛОГ-ФАЙЛЕ ПОРОЖДАТЬ НЕ БУДУТ. В случае, если syslogd даемон получит 200 идентичных лог-сообщений подряд, в лог файле не будут отражены все 200 сообщений, а, вместо этого, будет отражена запись вида:
last message repeated 200 times

Путь куда будут записываться даемоном syslogd сообщения с пометкой SECURITY задается в файле /etc/syslogd.conf и в базовой системе FreeBSD этот путь - /var/log/security.

31.6.5.4 Написание скрипта, содержащего правила   

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

Синтаксис примера, приведенного ниже, совместим с тремя командными оболочками: sh, csh, tcsh. Для использования значения  ранее объявленной переменной используется символ $. Во время присвоения значения переменной, значение должно быть выделено с двух сторон двойными кавычками.

Вот пример от которого вы можете оттолкнуться во время первых экспериментов с IPFW:

############### начало примера скрипта, содержащего правила ipfw #############
#
ipfw -q -f flush       # Сброс всех правил.
# Установки по умолчанию.
oif="tun0"             # название внешнего интерфейса, принадлежащего
                        # глобальной сети.
odns="192.0.2.11"      # IP DNS сервера провайдера.
cmd="ipfw -q add "     # стандартный префикс для добавления правил ipfw.
ks="keep-state"        # просто лень вводить каждый раз.
$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

Имя и расположение скрипта не несут решающей роли, но по умолчанию в FreeBSD используется именно этот путь.

Все описанные выше действия могу быть заменены эквивалентными командами, последовательно введенными в командную строку:

# 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

31.6.5.5 Правила с сохранением состояния   

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

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

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

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

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

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

Раздел, описывающий правила для исходящего траффика на внешнем интерфейсе, содержит только разрешающие правила, состоящие из значений отбора, которые уникально идентифицируют сервис, которому разрешен доступ в интернет. Каждое из правил состоит из полей proto, port, in/out, via и keep state , которые могут быть опущены опционально. Правила, накладываемые на tcp траффик содержат ключевое слово setup, которое служит для идентификации начала сессии, которое в дальнейшем передается как условие срабатывания в таблицу keep-state.

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

Также следует убедиться в том, что ваш сервер не отвечает ни на какие другие формы не предусмотренного траффика. Некорректные пакеты должны быть отброшены. В результате атакуюшие не получат информации о том, достиг ли его пакет вашего сервера или нет. Чем меньше атакующие будут знать о вашей системе, тем более она защищена. При недостаточности ваших знаний о общепринятых номерах портов, эти знания могут быть расширены содержимым директории /etc/services/ и по ссылке http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers. Рекомендуем ознакомиться с содержимым ссылки ниже для расширения своих знаний относительно общепринятых номеров портов, используемых троянами: http://www.sans.org/security-resources/idfaq/oddports.php.

31.6.5.6 Пример правил для межсетевого экрана закрытого типа.    

Последующие правила, не включающие поддержку трансляции сетевых адресов, являются логически полным набором правил для межсетевого экрана закрытого типа. При использовании подобного набора правил вы вполне можете быть уверены в безопасности вашей системы. Чтобы избежать журналирования нежелательных сообщений, добавьте правило "deny" в раздел, описывающий входящий траффик на интерфейс. Замените название интерфейса dc0, упоминающегося в правилах ниже, на название интерфейса, который в вашей системе принадлежит глобальной сети. Для ppp соединений это будет tun0.

Примечание по использованию этих правил.
- все запросы начала сессии с внешней сетью используют параметр keep-state.
- все разрешенные сервисы внешней сети имеют ключевое слово limit для защиты от шторма порождений динамических правил (flooding).
- Все правила используют in или out параметры для указания направления траффика.
- Все правила используют параметр via interface-name для уточнения интерфейса.
Последующие правила записываются в /etc/ipfw.rules

####################### Начало файла правил IPFW #######################
# Сброс всех правил перед началом работы скрипта.
ipfw -q -f flush

# Задание стандартных переменных
cmd="ipfw -q add"    # стандартный префикс для добавления правил ipfw
pif="dc0"            # название внешнего интерфейса, принадлежащего
                      # глобальной сети
             
########################################################################
# Нет ограничения внутри сетевого интерфейса для локальной сети
# Нет необходимости в этом, пока у вас нет локальной сети.
# Замените xl0 на название интерфейса вашей локальной сети. 
########################################################################
#$cmd 00005 allow all from any to any via xl0

########################################################################
# Нет ограничений на петлевом интерфейсе
########################################################################
$cmd 00010 allow all from any to any via lo0

########################################################################
# Разрешить пакет, если он был ранее добавлен в динамическую 
# таблицу при помощи keep-state
########################################################################
$cmd 00015 check-state

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

# Разрешить исходящий траффик к DNS серверу вашего 
# интернет-провайдера
# x.x.x.x необходимо заменить на IP адрес DNS сервера вашего 
# интернет-провайдера
# Продублируйте эти строки, если у вас больше чем один DNS сервер 
# интернет провайдера
# Эти IP адреса могут быть описаны в /etc/resolv.conf файле.
$cmd 00110 allow tcp from any to x.x.x.x 53 out via $pif setup keep-state
$cmd 00111 allow udp from any to x.x.x.x 53 out via $pif keep-state

# Разрешить исходящий траффик к DHCP серверу вашего интернет-провайдера
# для cable/DSL конфигураций.
# Это правило не нужно для .user ppp. соединений с глобальной сетью
# в этом случае вы можете удалить эти правила.
# Используйте это правило для записи необходимого нам IP адреса в лог-файл. 
# Возьмите значение IP адреса из лог-файла и замените в закомментированном 
# ниже правиле x.x.x.x на значение этого IP адреса и удалите первое правило. 
$cmd 00120 allow log udp from any to any 67 out via $pif keep-state
#$cmd 00120 allow udp from any to x.x.x.x 67 out via $pif keep-state

# Разрешить исходящий траффик для сессии незащищенного www соединения
$cmd 00200 allow tcp from any to any 80 out via $pif setup keep-state

# Разрешить исходящий траффик для сессии защищенного www соединения
# https с поддержкой TLS и SSL
$cmd 00220 allow tcp from any to any 443 out via $pif setup keep-state

# Разрешить исходящий POP/SMTP траффик.
$cmd 00230 allow tcp from any to any 25 out via $pif setup keep-state
$cmd 00231 allow tcp from any to any 110 out via $pif setup keep-state

# Разрешить исходящий FBSD (make install & cvsup) траффик 
# Назначаем пользователю root полные привилегии.
$cmd 00240 allow tcp from me to any out via $pif setup keep-state uid root

# Разрешаем исходящий icmp траффик для корректной работы утилиты ping
$cmd 00250 allow icmp from any to any out via $pif keep-state


# Разрешаем исходящий tcp траффик для утилиты Time.
$cmd 00260 allow tcp from any to any 37 out via $pif setup keep-state

# Разрешаем исходящий tcp траффик для утилит nntp news
$cmd 00270 allow tcp from any to any 119 out via $pif setup keep-state

# Разрешаем исходящий безопасный траффик для утилит FTP, Telnet, и SCP
# Эта функция используется программным обеспечением, работающим через протокол SSH
$cmd 00280 allow tcp from any to any 22 out via $pif setup keep-state

# Разрешаем исходящий траффик для утилиты whois
$cmd 00290 allow tcp from any to any 43 out via $pif setup keep-state

# Запрещаем и заносим в лог остальной траффик, что пытается выйти с внешнего интерфейса.
# При наличии подобного правила вне зависимости от выбранной умолчательной политики,
# межсетевой экран будет вести себя как межсетевой экран закрытого типа.
$cmd 00299 deny log all from any to any out via $pif


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

# Запрещаем весь входящий траффик с адресных пространств, не использующихся в маршрутизации. 
$cmd 00300 deny all from 192.168.0.0/16 to any in via $pif      # стандарт  RFC 1918 для локальных IP
$cmd 00301 deny all from 172.16.0.0/12 to any in via $pif       # стандарт  RFC 1918 для локальных IP
$cmd 00302 deny all from 10.0.0.0/8 to any in via $pif          # стандарт  RFC 1918 для локальных IP
$cmd 00303 deny all from 127.0.0.0/8 to any in via $pif         # петлевой интерфейс
$cmd 00304 deny all from 0.0.0.0/8 to any in via $pif           # петлевой интерфейс
$cmd 00305 deny all from 169.254.0.0/16 to any in via $pif      # DHCP авто-конфигурирование
$cmd 00306 deny all from 192.0.2.0/24 to any in via $pif        # зарезервировано
$cmd 00307 deny all from 204.152.64.0/23 to any in via $pif     # Sun cluster соединения.
$cmd 00308 deny all from 224.0.0.0/3 to any in via $pif         # D и E многоадресные классы

# Запрещаем пинг из глобальной сети
$cmd 00310 deny icmp from any to any in via $pif

# Запрещаем входящие соединения по 113 порту
$cmd 00315 deny tcp from any to any 113 in via $pif
 
# Запрещаем все Netbios службы. 137=name, 138=datagram, 139=session
# Netbios это MS/Windows сервис обмена.
# Блокируем MS/Windows hosts2 запросы сервера имен по порту 81
$cmd 00320 deny tcp from any to any 137 in via $pif
$cmd 00321 deny tcp from any to any 138 in via $pif
$cmd 00322 deny tcp from any to any 139 in via $pif
$cmd 00323 deny tcp from any to any 81 in via $pif
 
# Запрещаем любые опоздавшие пакеты.
$cmd 00330 deny all from any to any frag in via $pif

# Запрещаем пакеты c флагом ACK, которые не соответствуют динамической таблице правил.
$cmd 00332 deny tcp from any to any established in via $pif
 
# Разрешаем входящий траффик с внешнего DHCP сервера интернет-провайдера. Это правило должно содержать IP адреса вашего внешнего
# DHCP сервера интернет провайдера, чтобы этот ресурс  был единственным, от кого разрешено получать пакеты данного типа.
# Это необходимо для проводных и DSL соединений. Для .user ppp. типов соединений с глобальной сетью, в использовании этого правила нет необходимости. 
# Это тот же IP адрес, выбранный и используемый вами в разделе, описывающем правила для исходящего траффика.
$cmd 00360 allow udp from any to x.x.x.x 67 in via $pif keep-state
 
# Разрешить входящий траффик для сессии незащищенного www соединения, так как я использую apache сервер.
$cmd 00400 allow tcp from any to me 80 in via $pif setup limit src-addr 2
 
# Разрешить входящий траффик безопасных соединений по протоколу FTP, Telnet и SCP из глобальной сети
$cmd 00410 allow tcp from any to me 22 in via $pif setup limit src-addr 2
 
# Разрешить входящий траффик небезопасных Telnet соединений из глобальной сети
# это соединение считается небезопасным, потому что ID и PW пропускаются из глобальной сети в виде незашифрованного текста,
# удалите этот шаблон, если вы не используете telnet.
$cmd 00420 allow tcp from any to me 23 in via $pif setup limit src-addr 2
 
# Отбрасываем и заносим в лог весь входящий траффик из глобальной сети.
$cmd 00499 deny log all from any to any in via $pif
 

# Запрещаем и заносим в лог весь траффик, что не удовлетворил вышеописанным правилам. 
$cmd 00999 deny log all from any to any
################ Конец файла правил IPFW ###############################
  
31.6.5.7 Пример правил межсетевого экрана закрытого типа с поддержкой NAT.   

Здесь перечислены некоторые дополнительные параметры, которые должны активировать функцию NAT межсетевого экрана IPFW. К коду ядра FreeBSD надо добавить параметр option IPDIVERT к уже перечисленным параметрам, включающим IPFIREWALL.

В дополнение к стандартным IPFW параметрам в /etc/rc.conf добавим следующее:
natd_enable="YES"                   # Включить NATD функцию
natd_interface="rl0"                # Название сетевого интерфейса,
                                    # принадлежащего глобальной сети
natd_flags="-dynamic -m"            # -m = сохранить номера портов, если это возможно

Использование правил межсетевого экрана закрытого типа с divert natd правилом (Network Address Translation) значительно затрудняет логику составления правил. Расположение ключевых слов check-state и divert natd в таблице правил влияет на поведение межсетевого экрана. Это уже не просто последовательный логический поток. При применении вышеозначенных параметров становится доступным новое ключевое слово skipto. При использовании skipto нумерация правил становится обязательной. В качестве аргумента skipto используется номер правила, к которому нужно перейти.

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

Обработка правил начинается с первого по счету и идет последовательно от начала списка. В ходе обработки, пакет проверятеся на соответствие критериям отбора. В случае если соответствие найдено, к пакету применяется то действие, которое предусмотрено правилом; в случае если ни одно из правил не сработало, применяется политика, предусмотренная в системе (межсетевой экран закрытого/открытого типа).

Для правил под номерами 100, 101, 450, 500 и 510 важен порядок их расположения. Эти правила контролируют трансляцию исходящих и входящих пакетов; в таблице keep-state регистрируются только локальные IP адреса. В последующем примере разрешающие и запрещающие правила указывают направление пакетов (исходящие или входящие) и также уточняют интерфейс. Также стоит отметить, что все запросы начала исходящей сессии передаются по ключевому слову skipto на правило под номером 500 для трансляции адресов.

Предположим, что пользователь локальной сети запрашивает страницу через браузер. Веб-страницы передаются по порту 80. Пакет входит в межсетевой экран. Этот пакет не попадает под правило 100, потому что в его критериях отбора значится ключевое слово in.
Этот пакет не попадает под правило 101, потому что это первый пакет сессии и он еще не был занесен в динамическую таблицу keep-state.  Достигнув правила 125, пакет, наконец, удовлетворяет всем критериям отбора. Поскольку цель назначения пакета находится в глобальной сети, этот пакет должен быть направлен на интерфейс, взаимодействующий с глобальной сетью. На данном этапе у пакета в качестве обратного адреса указан IP адрес локального пользователя. По условию этого правила, к пакету применяются два действия:
Параметр keep-state создаст новую запись в динамической таблице и осуществит действие, указанное в правиле. Данное действие также является частью информации, заносимой в динамическую таблицу. В данном случае это skipto rule 500. Правило 500 транслирует (NAT) адреса пакета и отпускает его в сеть. Данное замечание очень важно.
Этот пакет идет к цели, где генерируется ответный пакет и отправляется обратно. Этот новый пакет начинает свой путь внутри NAT межсетевого экрана с первого правила в списке. На этот раз пакет соответствует правилу 100 и его IP адрес назначения транслируется обратно на соответствующий IP адрес локальной сети. Затем он обрабатывается правилом check-state, то есть, поскольку правило, соответствующее данной сессии уже присутствует в динамической таблице то осуществляется действие, указанное в правиле по keep-state и пакет отпускается в локальную сеть. 

Дальше пакет возвращается к отправившему его пользователю и генерируется новый пакет, запрашивающий новую порцию данных с удаленного сервера. На этот раз пакет сразу проверяется правилом check-state и в случае присутствия исходящей записи данного пакета, выполняется действие skipto 500. Пакет прыгает на правило 500, транслируется и отпускается в сеть.
В разделе, описывающем входящий траффик, все пакеты, входящие в качестве ответа, в рамках существующих сессий, по правилу keep-state, перенаправляются на правило divert natd. Если что-то нужно разрешить сверх этого, то нужно написать соответствующие правила. Также необходимо в конце указать правило, которое запрещает весь остальной небезопасный траффик. Допустим на сервере с межсетевым экраном запущен apache и мы хотим разрешить людям из глобальной сети доступ на локальный веб-сайт. Новый входящий пакет, запрашивающий начало сессии соответствует правилу 100 и его IP адрес транслируется как локальный IP. Далее пакет проверяется на соответствие вредоносному траффику и в случае отсутствия соответствия попадает на правило 425. В случае соответствия данному правилу происходят две вещи: Пакет правил помещается в динамическую таблицу keep-state, но в данный момент любая новая сессия запросов порожденных с этого IP, ограничена 2 одновременными соединениями. Это защищает от перенагрузки серви
 са по определенному правилом порту.
В качестве действия в правиле указан allow, следовательно пакет пропускается в локальную сеть. Пакет сформированный в качестве ответа попадает под check-state и распознается им как принадлежащий существующей сессии. Далее он попадает под правило 500, где происходит обратная трансляция, после чего пакет попадает на интерфейс, принадлежащий глобальной сети.

Пример файла правил #1:
#!/bin/sh
cmd="ipfw -q add"
skip="skipto 500"
pif=rl0
ks="keep-state"
good_tcpo="22,25,37,43,53,80,443,110,119"

ipfw -q -f flush

$cmd 002 allow all from any to any via xl0  # разрешаем траффик на локальном интерфейсе
$cmd 003 allow all from any to any via lo0  # разрешаем траффик на петлевом интерфейсе

$cmd 100 divert natd ip from any to any in via $pif
$cmd 101 check-state

# Разрешенные исходящие пакеты
$cmd 120 $skip udp from any to xx.168.240.2 53 out via $pif $ks
$cmd 121 $skip udp from any to xx.168.240.5 53 out via $pif $ks
$cmd 125 $skip tcp from any to any $good_tcpo out via $pif setup $ks
$cmd 130 $skip icmp from any to any out via $pif $ks
$cmd 135 $skip udp from any to any 123 out via $pif $ks


# Запрещаем весь входящий траффик с адресных пространств, не использующихся в маршрутизации. 
$cmd 300 deny all from 192.168.0.0/16  to any in via $pif  # стандарт  RFC 1918 для локальных IP
$cmd 301 deny all from 172.16.0.0/12   to any in via $pif  # стандарт  RFC 1918 для локальных IP
$cmd 302 deny all from 10.0.0.0/8      to any in via $pif  # стандарт  RFC 1918 для локальных IP
$cmd 303 deny all from 127.0.0.0/8     to any in via $pif  # петлевой интерфейс
$cmd 304 deny all from 0.0.0.0/8       to any in via $pif  # петлевой интерфейс
$cmd 305 deny all from 169.254.0.0/16  to any in via $pif  # DHCP авто-конфигурирование
$cmd 306 deny all from 192.0.2.0/24    to any in via $pif  # Зарезервировано для документов
$cmd 307 deny all from 204.152.64.0/23 to any in via $pif  # Sun cluster соединения
$cmd 308 deny all from 224.0.0.0/3     to any in via $pif  # D и E многоадресные классы

# Разрешаем входящие пакеты
$cmd 400 allow udp from xx.70.207.54 to any 68 in $ks
$cmd 420 allow tcp from any to me 80 in via $pif setup limit src-addr 1


$cmd 450 deny log ip from any to any

# Этот раздел skipto для правил с наследованием состояния, описанных для исходящих пакетов. 
$cmd 500 divert natd ip from any to any out via $pif
$cmd 510 allow ip from any to any

################################# Окончание файла правил  #####################################

Пример Правил #2:
#!/bin/sh
################################# Начало файла правил IPFW ####################################
# Сброс всех правил перед началом работы скрипта.
ipfw -q -f flush

# Задание стандартных переменных
cmd="ipfw -q add"
skip="skipto 800"
pif="rl0"     # название внешнего интерфейса, 
              # принадлежащего глобальной сети

###############################################################################################
# Нет ограничения внутри сетевого интерфейса для локальной сети
# Нет необходимости в данном правиле, пока у вас нет локальной сети.
# Замените xl0 на название интерфейса, принадлежашего вашей 
# локальной сети. 
###############################################################################################
$cmd 005 allow all from any to any via xl0

###############################################################################################
# Нет ограничений на петлевом интерфейсе
###############################################################################################
$cmd 010 allow all from any to any via lo0

###############################################################################################
# проверка входящего пакета на запись о нем в динамической таблице
###############################################################################################
$cmd 014 divert natd ip from any to any in via $pif

###############################################################################################
# Разрешить пакет, если он был ранее добавлен в динамическую 
# таблицу при помощи keep-state
###############################################################################################
$cmd 015 check-state

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

# Разрешить исходящий траффик к DNS серверу вашего 
# интернет-провайдера
# x.x.x.x должен быть IP адресом DNS сервера вашего 
# интернет-провайдера
# Продублируйте эти строки, если у вас больше чем один DNS сервер 
# интернет провайдера
# Эти IP адреса могут быть описаны в /etc/resolv.conf файле.
$cmd 020 $skip tcp from any to x.x.x.x 53 out via $pif setup keep-state

# Разрешить исходящий траффик к DHCP серверу вашего интернет-провайдера
# для cable/DSL конфигураций
$cmd 030 $skip udp from any to x.x.x.x 67 out via $pif keep-state

# Разрешить исходящий траффик для сессии незащищенного www соединения
$cmd 040 $skip tcp from any to any 80 out via $pif setup keep-state

# Разрешить исходящий траффик для сессии защищенного www соединения
# https с поддержкой TLS и SSL
$cmd 050 $skip tcp from any to any 443 out via $pif setup keep-state

# Разрешить исходящий POP/SMTP траффик.
$cmd 060 $skip tcp from any to any 25 out via $pif setup keep-state
$cmd 061 $skip tcp from any to any 110 out via $pif setup keep-state

# Разрешить исходящий FBSD (make install & cvsup) траффик 
# Назначаем пользователю root полные привилегии.
$cmd 070 $skip tcp from me to any out via $pif setup keep-state uid root

# Разрешаем исходящий icmp траффик для корректной работы утилиты ping
$cmd 080 $skip icmp from any to any out via $pif keep-state

# Разрешаем исходящий tcp траффик для утилиты Time.
$cmd 090 $skip tcp from any to any 37 out via $pif setup keep-state

# Разрешаем исходящий tcp траффик для утилит nntp, news (то есть news groups)
$cmd 100 $skip tcp from any to any 119 out via $pif setup keep-state

# Разрешаем исходящий безопасный траффик для утилит FTP, Telnet, и SCP
# Эта функция используется программным обеспечением, работающим через протокол SSH
$cmd 110 $skip tcp from any to any 22 out via $pif setup keep-state

# Разрешаем исходящий траффик для утилиты whois
$cmd 120 $skip tcp from any to any 43 out via $pif setup keep-state

# Разрешаем исходящий udp траффик для ntp time server
$cmd 130 $skip udp from any to any 123 out via $pif keep-state

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

# Запрещаем весь входящий траффик с адресных пространств, не использующихся в маршрутизации. 
$cmd 300 deny all from 192.168.0.0/16  to any in via $pif  #RFC 1918 private IP
$cmd 301 deny all from 172.16.0.0/12   to any in via $pif  #RFC 1918 private IP
$cmd 302 deny all from 10.0.0.0/8      to any in via $pif  #RFC 1918 private IP
$cmd 303 deny all from 127.0.0.0/8     to any in via $pif  #loopback
$cmd 304 deny all from 0.0.0.0/8       to any in via $pif  #loopback
$cmd 305 deny all from 169.254.0.0/16  to any in via $pif  #DHCP auto-config
$cmd 306 deny all from 192.0.2.0/24    to any in via $pif  #reserved for docs
$cmd 307 deny all from 204.152.64.0/23 to any in via $pif  #Sun cluster
$cmd 308 deny all from 224.0.0.0/3     to any in via $pif  #Class D & E multicast

# Запрещаем входящие соединения по 113 порту
$cmd 315 deny tcp from any to any 113 in via $pif

# Запрещаем все Netbios службы. 137=name, 138=datagram, 139=session
# Netbios это MS/Windows сервис обмена.
# Блокируем MS/Windows hosts2 запросы сервера имен по порту 81
$cmd 320 deny tcp from any to any 137 in via $pif
$cmd 321 deny tcp from any to any 138 in via $pif
$cmd 322 deny tcp from any to any 139 in via $pif
$cmd 323 deny tcp from any to any 81  in via $pif

# Запрещаем любые опоздавшие пакеты.
$cmd 330 deny all from any to any frag in via $pif

# Запрещаем пакеты c флагом ACK, которые не соответствуют динамической таблице правил.
$cmd 332 deny tcp from any to any established in via $pif

# Разрешаем входящий траффик с внешнего DHCP сервера интернет-провайдера. Это правило 
# должно содержать IP адреса вашего внешнего DHCP сервера интернет провайдера, чтобы
# этот ресурс  был единственным, от кого разрешено получать пакеты данного типа.
# Это необходимо для проводных и DSL соединений. Для .user ppp. типов соединений с 
# глобальной сетью, в использовании этого правила нет необходимости. 
# Это тот же IP адрес, выбранный и используемый вами в разделе, описывающем правила для
# исходящего траффика.
$cmd 360 allow udp from x.x.x.x to any 68 in via $pif keep-state

# Разрешить входящий траффик для сессии незащищенного www соединения, так как я использую
# apache сервер.
$cmd 370 allow tcp from any to me 80 in via $pif setup limit src-addr 2

# Разрешить входящий траффик безопасных соединений по протоколу FTP, Telnet и SCP из 
# глобальной сети
$cmd 380 allow tcp from any to me 22 in via $pif setup limit src-addr 2

# Разрешить входящий траффик небезопасных Telnet соединений из глобальной сети.
# Это соединение считается небезопасным, потому что ID и PW пропускаются из глобальной сети
# в виде незашифрованного текста.
# Удалите этот шаблон, если вы не используете telnet.
$cmd 390 allow tcp from any to me 23 in via $pif setup limit src-addr 2

# Отбрасываем и заносим в лог весь входящий траффик из глобальной сети.
$cmd 400 deny log all from any to any in via $pif

# Отбрасываем и заносим в лог весь исходящий траффик в глобальную сеть.
$cmd 450 deny log all from any to any out via $pif

# Это раздел для ключевого слова skipto содержащегося в правилах с наследованием состояния.
$cmd 800 divert natd ip from any to any out via $pif
$cmd 801 allow ip from any to any
 
# Запрещаем и заносим в лог весь траффик, что не удовлетворил вышеописанным правилам. 
$cmd 999 deny log all from any to any
################################# Окончание файла правил IPFW ####################################


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201203290844.q2T8ipIG053010>