Документация по ОС FreeBSD Среда, 11.12.2024, 23:11
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
IPFW [58]

Главная » Статьи » FireWall » IPFW

IPFW и Примеры использования IPFW
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 - проверяет пакет на соответсвиес динамическим правилом; если соответствие найдено, проверка прекращается; в противном случае выполняется переход к следующему правилу; если ни одного правила chech-stateнайдено не было, динамические установки проверяются до первого правила keep-state.

divert port - переадресация пакетов, соответствующих данному правилу на divert граничное окно в порт port; проверка завершается.

tee port - отправка копии пакетов, соответствующих данному правилу, на divert граничное окно в порт port ; проверка завершаетсяN; оригинал пакета принимается, но смотри раздел 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

Соответствующий брандмауэр создает динамическое правило. Поведение по умолчанию этого правила приводит к соответствию двунаправленного трафика между источником и адресатом IP/Port, используя тот же самый протокол. Правило имеет ограниченное время жизни (время жизни управляется набором переменных sysctl) продолжительность жизни обновления, каждый раз на основании пакета соответствия. Как только сообветствие найдено, life-time обновляется.

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}.

ВНИМАНИЕ!

Практически и теоретически доказано, что при указании единиц измерения полосы пропускания не имеет значения, что стоит после первых двух букв, важно только "К" и "В"! Причем, если вторая буква строчная, то он считает это битами, если заглавная, то байтами. Следовательно, если указать 100KBit/s, то это будет означать 100 килобайт в секунду!!!

Искренняя благодарность моему коллеге, Юрию Кол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.

Примеры использование IPFW

ipfw add deny tcp from cracker.evil.org to wolf.kiev.ua telnet

С помощью данной конструкции можно запретить соединение по протоколу telnet (порт 23) с хоста cracker.evil.org на хост wolf.kiev.ua
ipfw add reject tcp from any to 192.168.168.0/26 out
ipfw add reject tcp from 192.168.168.0/26 to me in

Данное правило отвергает все входящие соединения с компьютеров, имеющих IP-адреса 192.168.168.1 по 192.168.168.254 При этом выдается соответствующее ICMP-сообщение.
ipfw add allow tcp from 10.10.10.0/24 to any via fxp1 setup limit src-addr 10
ipfw add allow tcp from any to me limit src-addr 4

Данное правило ограничивает число соединений, которое может быть открыто пользователем. Брандмауэр (предполагается, что он запущен на шлюзе) разрешает каждому хосту в сети 10.10.10.0/24 открыть максимум 10 соединений. Кроме того, брандмауэр может может быть настроен на сервер так, чтобы убедиться, что один клиентский компьютер совершает не более четырех одновременных соединений.

ВНИМАНИЕ: Такое правило может быть использовано для атак типа DoS (отказ в обслуживании) путем "SYN-затопления", которое открывает огромное число динамических правил. Ущерб от таких атак может быть значительно ограничен путем варьирования установок переменно sysctl, которые контролируют действие брандмауэра.
ipfw add pipe 31 ip from any to 192.168.0.9 out via fxp1
ipfw pipe 31 config 31 bw 64Kbit/s

Это правило вводит ограничение скорости для хоста 192,168.0.9. Скорость ограничивается 64Кбит/с
ipfw add pipe 101 ip from any to 192.168.168.0:255.255.255.246 via ed0
ipfw pipe config 101 delay 100ms plr 0.75

Это правило может быть полезно для "проштрафившихся" пользователей, например, которые не оплачивают работу долгое время. Работать-то можно, но теряется большая часть пакетов (75%) и задержка оставшихся составляет 100 мс, следовательно, страницы будут открываться очень медленно.
ipfw add pipe 1025 tcp from me to any 25 out via fxp0
ipfw pipe 1025 config bw 128Kbit/s delay 120ms

В данном примере скорость ограничивается значением 128Кбит/с, но при этом задержка каждого пакета составляет 120 мс.
ipfw add pipe 23 ip from any to 192.168.0.87 out
ipfw add pipe 24 ip from 192.168.0.87 to any in
ipfw pipe 23 config 57600bit/s
ipfw pipe 24 config 33600bit/s

Эмуляция полнодуплексного канала, более похожая на работу по протоколу V.90. Здесь трафик имеет асимметричных характер: относительно пользователя 192.168.0.87 трафик имеет асимметричный характер - скорость входящего трафика 57600 бит/с, а скорость исходящего трафика - 33600 бит/с.
ipfw add pipe 6 ip from any to 192.168.0.100 out via ed0
ipfw add pipe 6 ip from 192.168.0.100 to any in via ed0

А это эмуляция полудуплексного канала.
ipfw add prob 0.33 pipe 1 ip from A to B
ipfw add prob 0.5 pipe 2 ip from A to B
ipfw add pipe 3 ip from A to B
ipfw pipe 1 config ...
ipfw pipe 2 comfig ...
ipfw pipe 3 config ...

Одной из положительных особенностей новой версии dummynet является способность имитировать множество путей между отправителем и получателем. Это делается с использованием вероятностей величины prob. При условии, что пакет является правильным (т. е. он циркулирует от хоста А к хосту В), первое правило будет выполняться с вероятностью 1/3; в оставшихся 2/3 случаях будет происходить переход ко 2-му правилу, которое будет выполняться с вероятностью 1/2 (0.5) (так что 1/2*2/3=1/3); в оставшихся 1/3 случаев будет происходить переход к третьему правилу, которое имеет вероятность 1. Мы можем конфигурировать эти 3 канала по желанию, чтобы эмулировать, например, такие явления, как повторный запрос пакета и т. д.
ipfw add queue 16 tcp from any to 192.168.0.110 out via ed0
ipfw add queue 17 tcp from 192.168.0.110 to any in via ed0
ipfw queue 16 config weight 10 pipe 160
ipfw queue 17 config weight 7 pipe 160
ipfw pipe 160 config bw 128Kbit/s

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

Для приоретизации трафика можно применять следующую конструкцию.
ipfw add queue 10 tcp from any 20,21 to any 1024-65535 in via fxp0
ipfw add queue 20 tcp from any 1024-65535 to any 20,21 out via fxp0
ipfw add queue 10 tcp from any 1024-65535 to any 1024-65535 in via fxp0
ipfw add queue 10 tcp from any 1024-65535 to any 1024-65535 out via fxp0
ipfw queue 10 config weight 1 pipe 10
ipfw queue 20 config weight 1 pipe 20

ssh
ipfw add queue 50 tcp from any 22 to any 1024-65535 in via fxp0
ipfw add queue 60 tcp from any 1024-65535 to any 22 out via fxp0
ipfw queue 50 config pipe 10 weight 100
ipfw queue 60 config pipe 20 weight 100

pipes
ipfw add pipe 10 tcp from any to any in via fxp0
ipfw pipe 10 config
ipfw add pipe 20 tcp from any to any out via fxp0
ipfw pipe 20 config

all traffic (весь остальной трафик).
ipfw add check-state
ipfw deny tcp from any to any established
ipfw allow tcp from 192.168.0.0/24 to any setup keep-state

Это пример динамического правила.
Категория: IPFW | Добавил: oleg (29.10.2007)
Просмотров: 2550 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024