Налаштування фільтруючого мережевого мосту на базі FreeBSD 6

Ключові слова:freebsd, bridge, ifconfig, (знайти схожі документи)

From: Кропачов Артемій Newsgroups: email Date: Sun, 25 Dec 2005 17:02:14 +0000 (UTC) Subject: Налаштування фільтруючого мережевого мосту на базі FreeBSD 6.0 з if_bridge

Налаштування мережного мосту

Комп'ютер під керуванням FreeBSD з кількома інтерфейсами може виступати не тільки в ролі маршрутизатора між сегментами мережі, але і в ролі комутатора з фільтрацією пакетів (мережевий міст). У коді FreeBSD 5-STABLE і 6-STABLE є 2 реалізації мережного моста - bridge та if_bridge. Перша реалізація буде швидко видалена з коду FreeBSD, так що розглянемо створення фільтруючого мосту за допомогою більш функціонального коду if_bridge.

Можна виділити кілька етапів цього процесу: 1. Підготовка ядра ОС 2. Увімкнення мосту 3. Підключення інтерфейсів 4. Налаштування правил фільтрації пакетів 5. Управління роботою мосту

Для початку перезберемо ядро ​​з додатковими опціями:

# cd /usr/src/sys/i386/conf # cp GENERIC BRIDGE # vi BRIDGE

Тут вносимо наступні додавання необхідні для роботи фільтруючого мережевого мосту:

#Включення підтримки IPFW options IPFIREWALL #Включення в ядро ​​коду мережевого моста device if_bridge

Далі виконуємо власне збирання ядра:

# config BRIDGE # cd /usr/src/sys/i386/compile/BRIDGE # make cleandepend # make depend # make # make install # reboot

# make cleandepend && make depend && make && make install && reboot

2 Вмикання моста в роботу

Для початку виконаємо:

#ifconfig bridge0 create

У висновку ifconfig повинен з'явитися додатковий інтерфейс - bridge0

3 Підключення інтерфейсів

Щоб міст запрацював повноцінно, йому необхідно задати імена інтерфейсів, між якими можна виконувати комутацію пакетів.

3.1 Додавання інтерфейсів

Для роботи комутатора необхідно як мінімум 2 інтерфейси, тому підключаємо їх (у нашому випадку це будуть fxp0, fxp1, fxp2, тобто створимо комутатор з трьома портами).

# ifconfig bridge0 addm fxp0 up # ifconfig bridge0 addm fxp1 up # ifconfig bridge0 addm fxp2 up

На кожен пожежний виконаємо перепідняття інтерфейсу bridge0:

# ifconfig bridge0 up

В принципі міст повинен вже заробити, якщо фаєрвол не блокує проходження пакетів.

3.2 Видалення інтерфейсів їхнього мосту:

При роботі іноді виникає необхідність вимкнути будь-який інтерфейс комутатора з його роботи. Щоб видалити будь-який інтерфейс , необхідно зробити наступне:

# ifconfig bridge0 deletem fpx1

Ця команда видалить інтерфейс fxp1 з мосту. Для того, щоб усі зміни залишилися після перезавантаження комп'ютера в rc.conf додамо рядки:

cloned_interfaces="bridge0" ifconfig_br ifconfig_fxp0="up" ifconfig_fxp1="up" ifconfig_fxp2="up"

ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0 up"

4 Налаштування правил фільтрації пакетів

Man(4) if_bridge описано як можна змінити поведінку мережного моста для фільтрації пактів. Механізм роботи: пакет із мережі потрапляє на вхідний інтерфейс, далі проходить інтерфейс bridge0. Там вирішується його доля: згідно з таблицею комутації (як у всіх комутаторів) визначається порт (у нашому випадкуінтерфейс) куди далі відправляється пакет. А з цього кінцевого інтерфейсу він вже йде в мережу. Пакети, що проходять через міст, можна фільтрувати різними способами:

а) На вхідних та вихідних інтерфейсах (для цього необхідно встановити значення змінної net.link.br > # sysctl net.link.br >

б) На "проміжному" інтерфейсі (net.link.br > # sysctl net.link.br >

в) І там, і там, тобто обидві змінні встановити в 1.

г) Ніде, тобто обидві змінні встановити в 0 (Пакети, що проходять крізь міст, не будуть піддаватися фільтрації).

Найпростіше "мостові" пакети фільтрувати на інтерфейсі bridge0. Але мене більше влаштовує варіант фільтрації на всіх інтерфейсах (можливість більш гнучкого управління поведінкою мосту і самим сервером). Тому виконаємо:

# sysctl net.link.br > # sysctl net.link.br >

Далі налаштуємо правила фаєрволу: Якщо нічого фільтрувати не хочете:

# ipfw add 100 allow ip from any to any

Якщо потрібна фільтрація, тоді вирішувати вам як її робити. Не слід забути дозволяти проходження пакетів на інтерфейсі bridge0 інакше ваш міст працювати не буде зовсім.Наведу невеликий приклад з фільтрації пакетів мережевим мостом.

# sysctl net.link.br > # sysctl net.link.br >

Далі введемо такі правила:

# ipfw flush (тільки якщо ви знаходитесь за консоллю.) # ipfw add 100 allow mac-type arp (Все ж дозволимо проходження arp пакетів крізь міст) # ipfw add 200 allow ip from any to any via bridge0 ( дозволимо весь трафік на інтерфейсі) (bridge0, простіше звичайно було зробити) (sysctl net.link.br & # # ipfw ip from any to any out via fxp0(Дозволяємо весь вихідний трафік) (з обох інтерфейсів комутації) # ipfw add 500 allow ip from not з мережі всередину) # ipfw add 600 allow ip from 10.0.1.1 до any in via fxp1 # ipfw add 700 allow ip from 10.0.1.2 to any in via fxp1 # ipfw add 800 allow ip від 10.0.1.3 до 10.0.1.4 до 10.0.1.4 до 10.0.1.5 до 10.0.1.5 до 10.0.1.5 до 10.0.1.5 до 10.0.1.5. add 1100 allow ip from 10.0.1.6 to any in via fxp1

5 Управління роботою мережевого мосту

Управління роботою мережного моста було частково описано вище: видалення, додавання інтерфейсів, налаштування способів фільтрації. Більш детальну інформацію можна знайти в man ifconfig.

a) Додавання інтерфейсу:

# ifconfig bridge0 addm fxp0

b) Видалення інтерфейсу:

# ifconfig bridge0 deletem fxp0

c) Перегляд таблиці комутації:

# 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 -learn fxp0

k) Увімкнення/Вимкнення роботи STP протоколу на інтерфейсі:

# ifconfig bridge0 stp fxp0 # ifconfig bridge0 -stp fxp0