Налаштування Firewall з if_bridge на базі FreeBSD 7

OpenSource forever

Стаття мого знайомого Володимира Ляшка надрукована у журналі Системний Адміністратор

Приводом для написання цієї статті став реальний досвід налаштування мережевого фільтруючого мосту на зв'язці if_bridge+IPFW. Для вирішення описуваного завдання це було найпростішим і найлогічнішим рішенням.

Навіщо потрібний if_bridge?

if_bridge

Налаштування ядра та конфігураційні файли

Тепер розглянемо порядок налаштування прозорого моста – брандмауера в операційній системі FreeBSD 7.0. Отже. Для підняття мосту if_bridge необхідно перезбирати ядро ​​з параметром:device if_bridge або завантажити код драйвера при завантаженні системи, для цього додаємо такі рядки в /boot/loader.conf:if_br >

br > Параметри підтримки ядром IPFW:

options IPFIREWALL - включає в ядро ​​код для фільтрації пакетів;options IPFIREWALL_VERBOSE - включає можливість вести логи за правилами фільтрації та пакетів, що проходять;options IPFIREWALL_VERBOSE_LIMIT=10 — обмеження списку пакетів, що записуються в лог для обмеження флуду на syslog і швидкого зростання розміру файлу лога.

Для тих, хто вперше налаштовує брандмауер на основі IPFW, можливо, корисною буде опція:IPFIREWALL_DEFAULT_TO_ACCEPT вона додає дозвільне правило за номером 65000:add allow ip from any to any

бо без неї в результаті при перезавантаженні системи ми отримаємо firewall, який за умовчанням матиме одне забороняюче правило за номером 65535:deny ip from any to any яке закриє проходження будь-якого IP трафіку по всіх інтерфейсах, що може викликати проблеми при віддаленому адмініструванні. Збираємо ядро, роблячи, як пишеться в handbook:

http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/kernelconfig-building.html#cd /usr/src/sys/i386/conf #mkdir /root/kernels #cp GENERIC /root/kernels/MOST #ln –s /root/kernels/MOST Правимо конфіг нового ядра:#ee MOST Збираємо:#cd /usr/src #make buildkernel KERNCONF=MOST Встановлюємо нове ядро:#make installkernel KERNCONF=MOST

Налаштовуємо параметри завантаження брандмауера 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_br >

Перевантажуємося.#reboot Дивимось за висновком ifconfig, чи піднявся наш міст: повинні з'явитися рядки member з нашими мережевими картами# ifconfig rl0: flags= 8943 metric 0 mtu 1500 options=8 ether 00:e0:4c:50:31:2d media: Ethernet autoselect (100baseTX ) status: active nfe0: flags=8943 metric 0 mtu 1500 options=8 ether 00:1d:92:3f:e0:f2 inet 192.168.1.179 netmask 0xffffff00 broadcast 192.168.1.255 media>status: active plip0: flags=108810 metric 0 mtu 1500 lo0: flags=8049 metric 0 mtu 16384 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4 <7 :1 prefixlen 128 inet 127.0.0.1 netmask 0xff000000 br > ether 5e:79:06:7c:cb:5e id 00:00:00:00:00:00 priority 32768hellotime 2 fwddelay 15 maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200 root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0 m>member: rl0 flags=143

Встановлюємо та перевіряємо наступні значення змінних системи:#sysctl net.link.ether.ipfw=1 – змінна відноситься до опцій роботи IPFW, значення, що дорівнює одиниці, включає можливість фільтрації IPFW на канальному рівні;#sysctl net.link.br >#sysctl net.link.br > Інші змінні системи, що стосуються if_bridge, у мене мали такий вигляд:#sysctl -a grep bridge net.link.bridge.ipfw: 1 net.link.bridge .log_stp: 0 net.link.bridge.pfil_local_phys: 0 net.link.bridge.pfil_member: 0 net.link.bridge.pfil_bridge: 0 net.link.bridge.ipfw_arp : 0 net.link.bridge.pfil_onlyip: 0

Щоб після перезавантаження збереглися значення цих змінних, необхідно прописати їх в /etc/sysctl.conf.

Налаштування правил для Firewall Для початку пригадаємо три головні правила, які визначають порядок проходження пакетів та логіку роботи IPFW: — пакет, потрапляючи в firewall IPFW, слід відповідно до порядку розташування його правил до першого задовольняючого, де над цим IP- пакетом, згідно з цим правилом, здійснюються будь-які дії (пропускається, відкидається, повертається назад у firewall і т.д.) — вхідні (IN) та вихідні (OUT) пакети слід розглядати щодо операційної системи, а не щодо мережевих інтерфейсів. - кожен маршрутизований IP-пакет потрапляє в firewall як на вході в операційну систему, так і не виході з неї:

Слід зазначити, що це лише приклад, тому які правила писати у вашому конкретному випадку, вирішувати вам. Також слід зауважити, що в цьомуУ випадку (всього чотири комп'ютери) фільтруючий міст не видно в мережі, затримки при проходженні пакетів через міст мінімальні і ними можна знехтувати.

Якщо є можливість та бажання, протестуйте будь ласка завантаження системи в моменти, коли передаються пакети зі швидкістю 100 Мбіт/с.