IPFW FreeBSD


IPFW - это IP-firewall и программа для управления формирования трафика в сети.
КРАТКОЕ ОПИСАНИЕ
ipfw [-q] [-p preproc [-D macro[=value]] [-U macro]] pathname
ipfw [-f | -q] flush
ipfw [-q] {zero | presetlog | delete} [number ...]
ipfw [-s [field]] [-adeftN] {list | show} [number ... ]
ipfw [-q] add [number] rule-body [number ...]
ipfw pipe number config pipe-config-options
ipfw pipe {delete | list | show} [number ...]
ipfw queue number config queue-config-options
ipfw queue {delete | list | show} [number ...]
ОПИСАНИЕ
ipfw - это пользовательский интерфейс для управления брандмауэром (ipfirewall) и dummynet (фиктивная сеть) - формирования трафика под FreeBSD.
Конфигурация брандмауэра выполняется при помощи списка нумерованных правил. Брандмауэр проверяет по этим правилам каждых входящий и исходящий IP-пакет, пока не будет найдено соответствующее правило. После того, как соответствующее правило найдено, пакеты могут быть введены в брандмауэр в соответствии с правилом повторно в зависимости от характера дейстия, определяемого этим правилом, а также системных установок. Все правила применимы для всех сетевых интерфейсов, так что ответственность системного администратора - записать установки правила так, чтобы пусть проверки был минимальным. Конфигурация всегда включает правило по умолчанию (DEFAULT rule, номер 65535) которое не может быть изменено и которое применяется для всех пакетов. Это правило может либо разрешать все, либо запрещать все в зависимости от конфигурации системного ядра. Если установки включают в себя одно или более правил с сохранением состояния или ограничением опций, то поведение поведение ipfwстановится статичным, т.е. ipfwбудет создавать динамические правила, соответствующие точным параметрам (адреса, порты), соответствующиего пакета до тех пор, пока это соответствие не будет найдено. Эти динамические правила, имеющие ограниченное время жизни проверяются при первом вхождении правила chech-stateили keep-state и обычно используются для открытия брандмауэра по требованию и только для желаемого трафика. Подробнее смотри разделы RULE FORMAT и ПРИМЕРЫ Об инсталляции можно также прочитать здесь.
Все правила, включая и динамические, имеют несколько связанных счетчиков: подсчет пакета, подсчет байт, регистрацию подсчетов, и timestamp - регистрация времени последнего соответствия. Счетчики могут отображаться или сбрасываться командами ipfw.
Правила могут быть добавлены при помощи команды add; удалены индивидуально при помощи команды delete, а также глобально (все сразу) при помощи команды flush (сброс); правила могут быть выведены на экран опционально вместе с содержимым счетчиков, при помощи команд list. В завершение счетчики могут быть обнулены при помощи команд zero или resetlog.
Допускаются следующие команды:
-a - при распечатке показываются значения счетчиков; команда вставки подразумевает эту опцию.
-d - при распечатке в дополнение к статическим выводятся динамические правила.
-е - при распечатке, если указана опция -d, также показывает просроченные динамические правила.
-f - не запрашивать подтверждения для команд, что может вызвать проблемы, если неверно используется, например, сброс. Заметьте, что если нет никакого tty, cвязанного с процессом, то это подразумевается.
-q - во время добавления, обнуления, очистки журналов или сброса не выводить сообщений (подразумевает -f). Эта опция полезна для корректировки правил при выполнении множества команд ipfw в скриптах (например, в sh /etc/rc.firewall') или при обработке файла, содержащего множество правил ipfw при удаленной сессии. Если выполнен сброс (flush) в нормальном (подробном) режиме, (с конфигурацией ядра по умолчанию), то печатаются сообщения. Поскольку все правила сброшены, сообщения не могут быть доставлены в удаленную сессию. По этой причине удаленный вход будет закрыт, и все остальные правила выполнены не будут. Доступ к консоли должен быть восстановлен.
-t - при распечатке показывать соответствующие timestamp.
-N - проверять соответствие имен и адресов при выводе.
-s [field] - при распечатке каналов сортировать, согласно одному из четырех счетчиков (подсчитывают и текущие пакеты или байты).
С целью упрощения конфигурирования правила могут быть помещены в файл, который может быть обработан ipfw, как показано в первой строке раздела synopsis. При этом должен быть использован абсолютный путь. Файл будет читаться строка за строкой, и применяться как аргументы для ipfw. Опционально препроцессор может быть указан, используя -p preproc, где pathname должен быть сквозным канальным. Полезные препроцессоры включают в себя cpp и m4. Если preproc не запускается с прямым слэшем ("/") как его первым символом, выполняется обычный поиск пути. Необходимо соблюдать осторожность с этим в системах, где не все файловые системы (еще) смонтированы к моменту запуска ipfw или же он расположен на файловой системе NFS. Параметр -p, а также следующие за ним (опционально) -D и -U могут также передаваться препроцессору. Это позволяет создать гибкий конфигурационный файл - подобно конфигурированию локального имени хоста - и использовать макросы для централизованного конфигурирования, подобно IP-адресу.
Команды pipes ipfw используются для конфигурирования регулировщика трафика как показано разделах TRAFFIC SHAPER CONFIGURATING, приведенных ниже.
RULE FORMAT
Формат правил
Общий вид формата правил ipfw следующий:
[prob match_probability] action [log [logamount number]] proto from src to dst [interface-spec] [options]
Каждый пакет может быть отфильтрован на основании следующей информации, которая связана с:
Интерфейс приема/передачи (по имени или адресу)
Интерфейс приема/передачи (входящие или исходящие)
IP-адрес источника или получателя (возможна маска)
Протокол (IP. TCP, UDP, ICMP и т. д.)
Порты источника или получателя (список, диапазон или маска)
TCP-флаги
Флаг фрагментации IP
Опции IP
Типы ICMP-пакетов
Идентификаторы пользователей и/или групп в наборе, ассоциированном с этим пакетом
Заметьте, что может быть опасным фильтровать пакеты на основании IP-адреса источника или порта TCP/UDP, потому что они могут быть сравнительно легко подделаны.
prob match_probability
Число с плавающей точкой (от 0 до 1) - указание соответствующей вероятности. Это может быть полезно для ряда приложений типа случайного снижения скорости доставки пакета или (в соответствии с концепцией виртуальной сети - dummynet) для моделирования множественных путей интервала, приводящего к повреждению доставленных пакетов.
Action:
allow - разрешить пакетам, соответствующим правилу; завершает проверку; аналогами являются pass (пропустить), permit (разрешить) и accept (принять).
deny - отбрасывать пакеты, соответствующие данному правилу; прекращает поиск; drop - аналог (синоним) deny.
reject - (Deprecated, осуждаемый) - отбросить пакеты, которые соответствуют данному правилу и отправить ICMP-сообщение, что проверяемый хост недоступен. Завершает проверку.
unreach code - отбрасывает пакет, который соответствует данному правилу и отправляет ICMP-сообщение о недоступности хоста с кодом code, где code число от 0 до 255 или один из следующих псевдонимов (кодовых слов); net (сеть), host (хост), protocol (протокол), port (порт), needfrag (необходим фрагмент), scrfail (сбой источника), net-unknown (сеть неизвестна), host-unknown (хост неизвестен), isolated (изолирован), net-prohib, host-prohib, tosnet, toshost, filter-prohib, host-precedence (старшинство хоста) или precedence-cutoff (старшинство останова); завершает проверку.
reset - только для пакетов tcp; отбрасывает пакеты, которые сответствуют данному правилу и посылают TCP reset (RST) сообщение; завершает проверку.
count - модификация счетчиков для всех пакетов, соответствующих правилу; проверка продолжается со следующего правила.
check-state - проверяет пакет по динамическим правилам; если соответствие обнаружено, поиск прекращается; в противном случае выполняется переход к следующему правилу; eсли check-state правило не обнаружено, динамические правила проверяются по первом правилу с опцией keep-state;
divert port - переадресация пакетов, соответствующих данному правилу на divert граничное окно в порт port; проверка завершается. Подробнее о divert смотри здесь.
tee port - отправка копии пакетов, соответствующих данному правилу, на divert граничное окно в порт port; проверка завершается№; оригинал пакета принимается, но смотри раздел BUGS ниже.
fwd ipaddr [,port] - изменить next-hop (следующий отскок) для соответствующих пактов на IP-адрес ipaddr, который может быть IP-адресом в точечно-десятичной нотации или именем хоста; если IP-адрес ipaddr отсутствует в непосредственно подключенной к хосту сети, то маршрут определяется по локальной таблице маршрутизации соответствующего IP-адреса, использующегося вместо него; если IP-адрес ipaddr локальный, то производится ввод в систему с удаленного хоста и будет перенаправлен в порт port на локальной машине, сохраняя локальный IP-адрес сокета и устанавливая исходный IP-адрес для пакета, который был адресатом; это предназначено для работы с прозрачными прокси-серверами; если IP-адрес ipaddr не является локальным, то номер порта (если указан) игнорируется, и правило применяется к пакетам, уходящим из системы; это также отображает адреса к локальным портам, если пакеты сгенерированы локально; проверка завершается, если есть соответствие этому правилу; если номер порта не задан, то номер порта в пакете используется так, чтобы пакет для порта внешнего хоста Y был отправлен к локальному порту Y; системное ядро должно быть скомпилировано с опцией IPFIREWALL_FORWARD.
pipe pipe_nr - пропустить пакет через dummynet (фиктивную сеть) "pipe" c определенными параметрами - полоса пропускания, задержка и т. д.; cмотри раздел TRAFFIC SHAPER CONFIGURATION; поиск заканчивается, однако если переменная sysctl net.ionet.ip.fw.one_pass не установлена, то пакеты снова проходят через брандмауэр с просмотром следующего правила.
queue queue_nr - пропустить пакет по правилам dummynet "queue" , очередь номер queue_nr (для полосы пропускания, ограниченной с использованием WF2Q).
skipto number - пропустить все последующие правила с номерами, меньшими, чем number; поиск продолжается с первого правила, пронумерованного number или выше.
log [logamount number]
Если ядро было скомпилировано с IPFIREWALL_VERBOSE, то когда пакет, соответствующий данному правилу с ключевым словом log, сообщение будет записано в журнал syslogd cредством LOG_SECURITY; примечание: по умолчанию, они добавляются в файл /var/log/security; см. syslog.conf; если ядро скомпилировано с опцией IPFIREWALL_VERBOSE_LIMIT, то по умолчанию запись в журнал прекратится после числа пакетов, указанных в опции и полученных для этой конкретной цепочки входа и значения переменной net.inet.ip.fw.verbose_limitбудет установлено это число; однако, если используется опция logamount number, будет установлено значение, меньшее, чем net.inet.ip.fw.verbose_limit, а значение 0 снимает ограничение, очищая при этом счетчик пакетов, после чего можно вновь давать возможность регистрации; регистрация через консоль и установка динамического предела выполнятеся при помощи sysctl и основан на MIB переменной net.inet.ip.fw
proto - IP-протоколы, который определяет именем или номером (полный список приведен в файле /etc/protocols); ip или ключевое слово all указывает на соответствие всем протоколам.
src и dst:
any | me | [not] address/mask [ports]
Ключевое слово any указывает на соответствие любому IP-адресу; ключевое слово me указывает на соответствие любому IP-адресу, который присвоен конфигурируемой системе.
address/mask может быть определен следующим образом:
ipno - IP-адрес в точечно-десятичной нотации (192.168.0.2), указывает на конкретный компьютер в сети;
ipno/bits - IP-адрес с маской (длиной сетевой части) в форме 1.2.3.4/24; в этом случае будут подходить все IP-адреса от 1.2.3.0 до 1.2.3.255.
inno:mask - IP-адрес с маской в форме 1.2.3.4:255.255.240.0; в этой записи указывается на соответствие всем IP-адресам от 1.2.0.0 до 1.2.15.255
Смысл соответствия может быть инвертирован, для чего используется модификатор not перед адресом; при этом устанавливается соответствие всем адресам, которые не попадают в под указываемый диапазон.
С протоколами TCP и UDP опционально может следовать порт. Порт указывается следующим образом:
{port | port-port | port:mask} [,port [,...]]
Символ "-" указывает на диапазон портов, включая границы. Символ ":" указывает на порт и маску, объявляя соответствие, если номер порта и пакета соответствует порту в правиле, ограничивая битами, которые регулируются маской.
Имя сервиса (из файла /etc/services) может быть использовано вместо значения номера порта. В диапазоне может быть указано только первое значение и длина списка портов, ограниченная IP_FW_MAX_PORTS (как определено в /usr/src/sys/netibet/ip_fw.h). Обратный слэш ("") может быть использован для выхода поле символа черточки ("-") в названии сервиса, например:
ipfw add count tcp from any ftp\-data-ftp to any
Фрагментированные пакеты, которые имеют ненулевое смещение (такие как, например, первый фрагмент), никогда не будут соответствовать правилу, в котором указана одна или более установок порта. См. опции фрагментов для более подробной информации о соответствии фрагментированных пакетов.
interface-spec
Допускаются следующие комбинации спецификации интерфейсов:
in - только для входящих пакетов;
out - только для исходящих пакетов;
via ifx - пакет должен быть пропущен через интерфейс ifx;
via if* - пакет должен быть пропущен через интерфейс ifX, где X - любой номер устройства;
via ipno - пакет должен быть пропущен через интерфейс, IP-address которого ipno.
Указание ключевого слова via всегда заставляет проверять интерфейс. Если указаны ключевые слова recv или xmit, то это тоже заставляет всегда проверить интерфейс. Определяя передающий и принимающий интерфейсы, есть возможность выбрать пакеты, основанные как на том, так и на другом интерфейсе, например:
ipfw add 100 deny ip from any to any out recv ed0 xmit ed1
Интерфейс recv может быть проверен или на входящие, или на исходящие пакеты, в то время как интерфейс xmit может быть проверен только на исходящие пакеты. Так out требуется (и в недопустимых случаях) всякий раз, когда используется xmit. Сочетание via вместе с xmit или с recv недопустимо.
ОПЦИИ
keep-state
После соответствия firewall создаст динамическое правило, поведение которого по умолчанию должно соответствовать двунаправленному трафику между источником и получателем; IP/порт использует тот же самый протокол; правило имеет ограниченный срок действия (определяемый набором переменных sysctl), время действия обновляется при обнаружении пакета, соответствующего правилу.
limit {src-addr | src-port | dst-addr | dst-port} N
Брандмауэр разрешает только N соединений с теми же самыми параметрами, которые определяются данным правилом. Может быть указан один или более адресов источника или получателя и порты.
bridged
Cooтветствует только bridged-пакетам. Может быть полезно для многоадресного и широковещательного трафика, который в противном случае прошел бы через брандмауэр дважды: первый раз в течение соединения, а второй раз - в момент доставки пакета локальному стеку. Кроме того, будут возникать проблемы при использовании средства pipe, так как один и тот же пакет будет доставлен дважды применительно к условиям ширины полосы пропускания, занятия очереди, а также для счетчиков.
frag
Соответствует правилу, если пакет фрагментирован и если это не первый фрагмент датаграммы; fragне может быть использован как в сочетании или с другими tcp-флагами, так и указанием портов TCP/UDP.
ipoptions spec
Соответствует, если заголовок IP-пакета содержит перечисленный через запятую список опций, указанный в spec. Поддерживаются следующие опции: ssrr (strict source route, жесткая маршрутизация от источника), lsrr (loose source route, свободная маршрутизація от источника), rr (record packet route, запись маршрута пакета) и ts (timestamp, отметка о времени). Отсутствие какой-либо опции может быть обозначено знаком '!".
tcpoptions spec
Соответствует, если tcp-заголовок содержит опции, перечисленные в списке и разделенные запятыми. Поддерживаются следующие опции: mss (maximum segment size, максимальный размер сегмента), window (tcp window advertisement, рекламное окно TCP), sack (селективный опрос), ts (rfc1323, отметка о времени) и cc (rfc1644 t/tcp счетчик соединений). Отсутствие какой-либо опции может быть обозначено знаком '!".
established
Только для TCP-пакетов. Соответствует пакетам, которые имеют битовые установки RST и ACK.
setup
Только для TCP-пакетов. Соответствует пакетам, которые имеют битовую установку SYN, но не имеют установки ACK.
tcpflags spec
Только для TCP-пакетов. Соответствует, если заголовок TCP-пакета содержит указанные в списке (разделенные запятыми) флаги spec. Поддерживаются следующие TCP-флаги: fin, syn, rst, psh, ack и urg. Отсутствие какой-либо опции может быть обозначено знаком '!". Правило, содержащее TCP-флаги, может никогда не соответствовать фрагментированным пакетам, которые имеют ненулевое смещение. Смотрите опции фрагментации для детальной информации о соответствии фрагментированных пакетов.
icmptypes types
Только для пакетов ICMP. Соответствует, если тип ICMP-пакета соответствует типу, указанному в списке spec. Список может указывать как на любую комбинацию диапазонов, так и на индивидуальный тип, разделенный запятыми. Поддерживаются следующие ICMP-типы: echo reply (0) - ответное эхо, destination unreachable (3) - адресат недостижим, source quench (4), redirect (5) - перенаправляющий, echo request (8) - запрос эха, router advertisement (11) - реклама (объявление о себе) маршрутизатора, IP header bad (12) - повреждение заголовка IP, timestamp request (15) - запрос о метке времени, information reply (16) - ответная информация, address mask request (17) - запрос адресной маски, address mask reply (18) - ответ на запрос об адресной маске.
uid user
Указывает на соответствие всем пакетам TCP или UDP отправленным или принятым пользователем user. user может указывать на соответсвие имени пользователю или его идентификационному номеру.
gid group
Указывает на соответствие всем пакетам TCP или UDP, посланным или принятым группой group. group может соответствовать имени группы или ее идентификационному номеру.
TRAFFIC SHAPER CONFIGURATION (КОНФИГУРИРОВАНИЕ РЕГУЛИРОВЩИКА ТРАФИКА)
ipfw также является пользовательским интерфейсом для регулировщика трафика dummynet. Регулировщик трафика функционирует путем разделения пакетов в потоки, согласно маске, заданной пользователем, на основании различных полей в заголовке пакета IP. Пакеты, принадлежащие одному и тому же потоку, в этом случае передаются двум различным объектам, называемым каналом (pipe) или очередью (queue).
pipe (канал) эмулирует соединение с заданной пропускной способностью, задержкой при распространении, размером очереди и средней величиной потерь пакетов. Пакеты передаются через канал согласно его параметрам.
queue (очередь) - это пользовательская абстракция, реализующая политику WF2Q+. Очередь ассоциируется с каждым потоком определенного приоритета и ссылается на канал. Тогда все потоки, связанные с тем же самым каналом, отмечены по параметрам, заданным для этого канала, согласно политике WF2Q+.
Формат конфигурации pipe следующий:
pipe number config [bw bandwidth | device] [delay ms-delay] [queue {slots | size}] [plr loss_probability] [mask mask_specifier] [buckets hash-table-size] [red | gred w_q/min_th/max_p]
Формат конфигурации очереди ipfw следующий:
queue number config [pipe pipe_nr] [weight weight] [queue {slots | size] [plr loss_probability] [mask mask_specifier>] [buckets hash-table-size] [red | gred w_q/min_th/max_th/max_p]
Для конфиругирования канала (pipe) могут использоваться следующие параметры:
bw brandwidth | device
bandwidth - ширина полосы пропускания, указанная в {K | M}{bit/s | Bytes/s}.
ВНИМАНИЕ!
Следует внимательно следить за регистром символов. Следующий фрагмент кода объясняет все:
ip (*end == 'B' || !strncmp(end, "by", 2)) pipe.bandwidth*=8
Отсюда видно, что значение имеют буквы "by"
Искренняя благодарность коллегам, Юрию Колoдовскому и Аркадию Шуваеву, за указание на эти нюансы и предложения ценных поправок.
Значение 0 (по умолчанию) указывает на неограниченную полосы пропускания. Непосредственно после наименования должен следовать номер, как в примере:
ipfw pipe 1 config bw 300KBit/s queue 50Kbytes
Если вместо численного значения ширины полосы пропускания указано имя-устройства (device), то используется таймер, которым снабжено данное устройство. В настоящее время эту возможность поддерживает только интерфейс PPP.
delay ms-delay
Задержка при передаче, выраженная в миллисекундах. Значение округляется до следующего такта системного таймера (типично 10 мс, но это хорошая практика, которую выполняет системное ядро с параметром HZ=1000, но это значение может быть уменьшено до 1 мс или даже меньше). Значение по умолчанию 0, что означает отсутствие задержки.
queue {slots | size Kbytes}
Размер очереди в слотах или килобайтах. Значение по умолчанию 50 слотов, что соответствует типичному значению очереди для сетевой карты Ethernet. Причем для малой скорости соединения необходимо сохранить малый размер очереди, чтобы на трафик можно было воздействовать с существенной задержкой. Так максимальный размер Ethernet-пакета - 1500 байт - среднее 600 Кбит или 20 сек очереди на канале 30 Kбит/с. Даже худший результат получается, если пакеты приходят от интерфейса с большим значением MTU, таким как интерфейс закольцовывания с размером пакета 16 K.
plr packet-loss-rate
Величина потерь пакетов. Аргумент packet-loss-rate это десятичное число от 0 до 1, где 0 обозначает отсутствие потерь, а 1 - 100% потерь; внутреннее представление величины потерь пакетов представлено 31 битом.
mask mask-specifier
dummynet предоставляет возможность создания очередей в потоке. Идентификатор потока создается маскированием IP-адресов, портов и типов протокола при установке параметров канала (pipe). Пакеты с одним и тем же идентификатором после маскирования относятся к той же самой очереди. Маска располагает комбинацией следующих спецификаторов: dst-ip mask, dst-port mask, src-port mask, proto mask, или все вместе, где последние означают все биты во всех полях являются значимыми. Когда используется в рамках конфигурации pipe, то каждому потоку назначается скорость, равная скорости канала. Когда используется в рамках конфигурации очереди (queue), то каждому потоку назначается вес, равный весу очереди и всех потоков, претендующих на ту же самую полосу пропускания, доли канала, пропорционально весу.
buckets hash-table-size
Этот параметр указывает на размер хэш-таблицы, использующейcя для сохранения переменных очереди. По умолчанию 64 управляемых sysctl переменной net.inet.ip.dumynet.hash_size; допускается диапазон от 16 до 1024.
pipe pipe_nr
Подключает очередь с указанным каналом. Множество очередей (как правило, с разными весами) может быть подключены к одному и тому же каналу, который определяется агрегацией нормы для установок очередей.
weight weight
Определяет вес, который нужно использовать для потоков, соответствующих этой очереди. Значение weight должнj быть в диапазоне 1 ... 100, и значения по умолчанию 1.
red | gred w_q/min_th/max_th/max_p
Выполняет алгоритм управления очередью RED. w_q и max_p - десятичное дробное число в диапазоне от 0 до 1 (0 не допускается), в то время как min_th и max_th - целые числа, определяющие пороги для управления очередью, вычисленные в байтах, если очередь была определена в байтах, в противном случае в слотах. dummynet поддерживает также "вежливый" (gentle) вариант - gred. Подробнее смотрите здесь. 3 переменные sysctl могут быть использованы для управлением поведением RED.
net.inet.ip.dummynet.red_lookup_depth - специфицирует точность вычисления среднего значения очереди, когда соединение простаивает (по умолчанию 256, должно быть больше 0);
net.ip.dummynet.red_avg_pkt_size указывает на ожидаемый размер пакета (по умолчанию 512, должно быть больше нуля);
net.inet.ip.dummynet.red_max_pkt_size - специфицирует ожидаемый максимальный размер пакета. Используется только в том случае, если переменные очереди выражены в байтах. По умолчанию 1500, должно быть больше 0.
CHECK-LIST
Здесь приведены некоторые важные моменты, рассматриваемые при составлении правил:
Запомните, что фильтр проверяет оба пакета - и входящие, и исходящие. Большинство соединений нуждаются в пакетах, проходящих в обоих направлениях.
Не забудьте очень тщательно проверять очередь. Хорошая идея - постоянно быть около консоли сервера при выполнении этого теста. Если это невозможно, используйте скрипт /usr/share/examples/ipfw/change_rules_sh, который восстанавливает предыдущее состояние.
Не забудьте закольцовывающий интерфейс
Имеется один пакет вида, который брандмауэр всегда будет сбрасывать, который является фрагментом с TCP-пакета со смещенным фрагментом пакета. Этот пакет допустим, но только он часто используется для обхода брандмауэра. Когда регистрация пакетов включена, эти пакеты сообщаются об исключении правилом -1.
если вы войдете по сети, загружая при этом kld(4), установка ipfw будет не такой простой, как вам думалось. Pекомендeтся следующая командная строка:
kldload /modules/ipfw.ko &&
ipfw add 32000 allow ip from any to any
По той же самой строке:
ipfw flush
В подобном окружении это не очень хорошая идея.
Список правил фильтра ipfw не может изменяться, если системная норма безопасности установлена в 3 или выше.
ОТКЛОНЕНИЕ ПАКЕТА
Граница socket divert (4) определяет порт, который будет принимать все пакеты, перенаправляемые в этот порт. Если нет сокета - границы порта назначения, или если ядро не было скомпилировано с поддержкой сокета переадресовки, пакеты пропадают.
ПЕРЕМЕННЫЕ SYSCTL
Установки переменных sysctl управляют поведением брандмауэра. Здесь они показаны со своими значениями по умолчанию. Но всегда проверяйте командой sysctl, что значение актуально и используется.
net.inet.ip.fw.debug: 1 Управляет отладочными сообщениями, генерируемыми ipfw.
net.inet.ip.fw.one_pass: 1 Когда установлено, пакет, выходящий из потока dummynet, не проходит через брандмауэр повторно, В противном случае, после обработки канала пакет повторно вводится в брандмауэр по следующему правилу.
net.inet.ip.fw.verbose: 1 Разрешены подробные сообщения.
net.inet.ip.fw.enable: 1 Брандмауэр включен. Установка значения этой переменной в 0 запускает машину без брандмауэра, даже если при компиляции брандмауэр включен.
net.inet.ip.fw.verbose_limit: 0 Значение, ограничивающее число подробных сообщений, генерируемых брандмауэром.
net.inet.ip.fw.dyn_buckets: 256
net.inet.ip.fw.curr_dyn_buckets: 256
Конфигурация и текущее значение хешированной таблицы, используемой для хранения динамических правил. Это должно быть 2. Таблица может быть изменена только если она пустая, так что изменяя ее "на лету", Вы вероятно должны будете сбросить ее на жесткий диск и перезагрузить установки правил.
net.inet.ip.fw.dyn_count: 3 Текущее число динамических правил (только на чтение).
net.inrt.ip.fw.dyn_ack_lifetime: 300
net.inrt.ip.fw.dyn_syn_lifetime: 20
net.inrt.ip.fw.dyn_fin_lifetime: 1
net.inrt.ip.fw.dyn_rst_lifetime: 1
net.inrt.ip.fw.dyn_rst_lifetime: 5
net.inrt.ip.fw.dyn_short_lifetime: 30
Эти переменные управляют временем жизни в секундах динамических правил. SYN заменяется время жизни сохраняется коротким, затем увеличен, после оба SYN были замечены, затем уменьшены снова в течение конечной FIN когда RST.

Обновлено: 12.03.2015