Теперь рассмотрим порядок настройки прозрачного моста - брандмауэра в операционной системе FreeBSD 7.0. Итак. Для поднятия моста if_bridge необходимо пересобрать ядро с параметром:device if_bridgeили загрузить код драйвера при загрузке системы, для этого добавляем вот такие строки в /boot/loader.conf:if_bridge_load=”YES”
options IPFIREWALL - включает в ядро код для фильтрации пакетов;options IPFIREWALL_VERBOSE - включает возможность вести логи по правилам фильтрации и проходящих пакетов;options IPFIREWALL_VERBOSE_LIMIT=10 - ограничение списка пакетов записываемых в лог для ограничения флуда на syslog и быстрого роста размера файла лога.
Для тех, кто впервые настраивает брандмауэр на основе IPFW, возможно, полезной будет опция: IPFIREWALL_DEFAULT_TO_ACCEPT, она добавляет разрешающее правило за номером 65000:add allow ip from any to any
Настраиваем параметры загрузки брандмауэра IPFW, редактируя файл /etc/rc.conf:firewall_enable=”YES” – требуется как для загрузки IPFW в виде модуля (иначе запускать придется вручную), так и для IPFW, компилированном в ядро. “YES” установит значение системной переменной sysctl net.inet.ip.fw.enable=1, что укажет системе, использовать IPFW или нет, без скрипта с набором правил firewall загрузится с одним правилом по умолчанию;
ifconfig_nfe0=”inet 192.168.1.179 netmask 255.255.255.0”ifconfig_rl0=”up”cloned_interfaces=”bridge0”ifconfig_bridge0=”addm rl0 addm nfe0 up”
Чтобы после перезагрузки сохранились значения этих переменных необходимо прописать их в /etc/sysctl.conf.
Теперь пишем скрипт с правилами для нашего firewall#!/bin/sh#объявляем переменныеfwcmd=”/sbin/ipfw”mylan=”192.168.1.203, 192.168.1.201, 192.168.1.202, 192.168.1.200″macpc1=00:17:31:a9:e9:9bmacpc2=00:0c:42:1c:09:bdmacpc3=00:1d:92:3f:e0:f2macpc4=00:e0:4c:50:31:2dmacgate=00:0e:2e:a9:6f:9e#mac адрес сетевого интерфейса моста, которому мы присвоили IP адресipbridge=00:50:da:4e:ba:63#сбрасываем все правила${fwcmd} -f flush#проверяем, соответствует ли пакет динамическим правилам${fwcmd} add check-state#разрешаем все установленные соединения${fwcmd} add allow tcp from any to any established#разрешаем работу протоколу ARP${fwcmd} add allow all from any to any layer2 mac-type arp#так как у нас есть возможность фильтровать пакеты на канальном уровне, воспользуемся этим: #разрешаем трафик только от наших машин к роутеру провайдера и обратно${fwcmd} add allow all from any to any MAC $macpc1 $macgate${fwcmd} add allow all from any to any MAC $macgate $macpc1${fwcmd} add allow all from any to any MAC $macpc2 $macgate${fwcmd} add allow all from any to any MAC $macgate $macpc2${fwcmd} add allow all from any to any MAC $macpc3 $macgate${fwcmd} add allow all from any to any MAC $macgate $macpc3${fwcmd} add allow all from any to any MAC $macpc4 $macgate${fwcmd} add allow all from any to any MAC $macgate $macpc4#блокируем весь трафик на lo0${fwcmd} add deny all from any to 127.0.0.0/8${fwcmd} add deny all from 127.0.0.0/8 to any#блокируем мультикастовые рассылки${fwcmd} add deny all from any to 240.0.0.0/4#Запрещаем фрагментированные пакеты icmp${fwcmd} add deny log icmp from any to 255.255.255.255#запрещаем адреса которые используются в протоколах автоконфигурации${fwcmd} add deny ip from 169.254.0.0/16 to any#разрешаем http трафик${fwcmd} add allow ip from $mylan to any 80 via bridge0 keep-state#разрешаем DNS трафик${fwcmd} add allow ip from $mylan to any 53 via bridge0 keep-state#разрешаем вход по ssh c хоста 192.168.1.200 нашей сети${fwcmd} add allow ip from $mylan to me 22 keep-state${fwcmd} add allow all from any to any MAC $macpc1 $ipbridge${fwcmd} add allow all from any to any MAC $ipbridge $macpc1#разрешаем синхронизацию времени${fwcmd} add allow udp from any to any 123 keep-state#разрешаем ftp трафик (активный режим)${fwcmd} add allow tcp from $mylan to any 21 via bridge0${fwcmd} add allow tcp from any 20 to $mylan via bridge0#разрешаем icmp – эхо-запрос, эхо-ответ и время жизни пакета истекло${fwcmd} add allow icmp from any to any icmptypes 0,8,11 via bridge0#разрешаем работать с почтой${fwcmd} add allow tcp from $mylan to any 110,143,25,995 keep-state#разрешаем icq${fwcmd} add allow ip from $mylan to any 5190 keep-state#блокируем весь трафик не с наших МАС адресов${fwcmd} add deny all from any to any layer2#это правило добавится автоматически${fwcmd} add deny all from any to any
Следует отметить, что это только пример, так что какие правила писать в вашем конкретном случае, решать вам. Также следует заметить, что в данном случае (всего четыре компьютера) фильтрующий мост никак не виден в сети, задержки при прохождении пакетов через мост минимальны и ими можно пренебречь.
Литература:1. man if_bridge2. man ipfw3. FreeBSD HandBook4. Заметки об IPFW http://www.lissyara.su/?id=1536