Примеры IPFW (FreeBSD)

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

Это пример динамического правила.

При помощи конструкции probe можно использовать разделение трафика по двум различным каналам. Например:

ipfw add prob 0.34 forward 212.1.1.254 ip from 212.1.2.0/24 to any

Здесь часть пакетов (примерно 34%), поступающих из сети 212.1.2.0:255.255.255.0, будет перенаправлено на "альтернативный" шлюз - хост 212.1.1.254. Подробнее о настройке маршрутизации с использованием ipfw смотрите

Обновлено: 12.03.2015