![]() |
Настройка фильтрующего сетевого моста на базе FreeBSD 6.0 с if_bridge
Статья скажу сразу не моя :) знакомого админа Кропачева Артемия aka neon так что все копирайты за ним. Думаю будет позновательно, так как мосты довольно распространеная весчь Ж)
Настройка сетевого моста Компьютер под управлением FreeBSD с несколькими интерфейсами может выступать не только в роли маршрутизатора между сегментами сети, но и в роли коммутатора с фильтрацией пакетов (сетевой мост). В коде FreeBSD 5-STABLE и 6-STABLE есть 2 реализации сетевого моста – bridge и if_bridge. Первая реализация будет скоро удалена из кода FreeBSD, так что рассмотрим создание фильтрующего моста с помощью более функционального кода if_bridge. Можно выделить несколько этапов данного процесса:
Для начала пересоберём ядро с дополнительными опциями: Код:
# cd /usr/src/sys/i386/conf Код:
#Включение поддержки IPFW Код:
# config BRIDGE Код:
# make cleandepend && make depend && make && make install && rebootДля начала выполним: Код:
# ifconfig bridge0 create3. Подключение интерфейсов. Чтобы мост заработал полноценно ему необходимо задать мена интерфейсов, между которыми можно выполнять коммутацию пакетов. 3.1 Добавление интерфейсов. Для работы коммутатора необходимо как минимум 2 интерфейса, поэтому подключаем их (в нашем случае это будут fxp0,fxp1,fxp2, то есть создадим коммутатор с 3-мя портами). Код:
# ifconfig bridge0 addm fxp0 upКод:
# ifconfig bridge0 up3.2 Удаление интерфейсов их моста. При работе иногда возникает необходимость выключить какой-либо интерфейс коммутатора из его работы. Для того чтобы удалить какой-либо интерфейс необходимо сделать следующее: Код:
# ifconfig bridge0 deletem fpx1Код:
cloned_interfaces="bridge0"Код:
ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0 up"В man(4) if_bridge описано как можно изменить поведение сетевого моста для фильтрации пактов. Механизм работы: пакет из сети попадает на входящий интерфейс, далее проходит интерфейс bridge0. Там решается его судьба: согласно таблицы коммутации (как у всех коммутаторов) определяется порт (в нашем случае интерфейс) куда далее отправляется пакет. А с этого конечного интерфейса он уже уходит в сеть.Пакеты проходящие через мост можно фильтровать различными способами: а) На входящих и исходящих интерфейсах (для этого необходимо установить значение переменной net.link.bridge.pfil_member=1): Код:
# sysctl net.link.bridge.pfil_member=1Код:
# sysctl net.link.bridge.pfil_bridge=1г) Нигде, то есть обе переменные установить в 0 (Пакеты проходящие сквозь мост не будут подвергаться фильтрации). Проще всего «мостовые» пакеты фильтровать на интерфейсе bridge0. Но меня больше устраивает вариант фильтрации на всех интерфейсах (возможность более гибкого управления поведением моста и самим сервером). Поэтому выполним: Код:
# sysctl net.link.bridge.pfil_member=1Если ничего фильтровать не хотите: Код:
# ipfw add 100 allow ip from any to anyПусть иметься сеть 10.0.0.0/21 (То есть с маской 255.255.248.0). Мост ограничивает сеть с ай пи адресацией 10.0.1.0/24. Задача: требуется без разделения сети на сегменты ограничить доступ пользователем в остальную сеть Внешний кусок сети висит на интерфейсе fxp0, внутренний на fxp1. Правила фильтрации настроим следующим способом: Код:
# sysctl net.link.bridge.pfil_member=1Код:
# ipfw flush (только если вы находитесь за консолью!!!!)5. Управление работой сетевого моста. Управление работой сетевого моста было частично описано выше: удаление, добавление интерфейсов, настройка способов фильтрации. Более подробную информацию можно найти в man ifconfig. a) Добавление интерфейса: Код:
# ifconfig bridge0 addm fxp0Код:
# ifconfig bridge0 deletem fxp0Код:
# ifconfig bridge0 addrКод:
# ifconfig bridge0 maxaddr 100Код:
# ifconfig bridge0 timeout 1000Код:
# ifconfig bridge0 flushКод:
# ifconfig bridge0 flushallКод:
# ifconfig bridge0 static fxp0 00:11:22:33:44:55Код:
# ifconfig bridge0 deladdr 00:11:22:33:44:55Код:
# ifconfig bridge0 learn fxp0Код:
# ifconfig bridge0 stp fxp0 |
| Время: 04:19 |