The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Настройка фильтрующего сетевого моста на базе FreeBSD 6.0 с if_bridge (freebsd bridge ifconfig)


<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: 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. Управление работой моста 1 Сборка ядра Для начала пересоберём ядро с дополнительными опциями: # 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, то есть создадим коммутатор с 3-мя портами). # 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_bridge0="addm fxp0 addm fxp1 addm fxp2 up" ifconfig_fxp0="up" ifconfig_fxp1="up" ifconfig_fxp2="up" Удобно навесить IP адрес на какой-либо интерфейс для последующего управления сервером фильтрации удалённо. Адрес можно навесить как на bridge0, так и на другие интерфейсы. Например в rc.conf за место 'ifconfig_fxp0="up"' напишем строку: ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0 up" 4 Настройка правил фильтрации пакетов В man(4) if_bridge описано как можно изменить поведение сетевого моста для фильтрации пактов. Механизм работы: пакет из сети попадает на входящий интерфейс, далее проходит интерфейс bridge0. Там решается его судьба: согласно таблицы коммутации (как у всех коммутаторов) определяется порт (в нашем случае интерфейс) куда далее отправляется пакет. А с этого конечного интерфейса он уже уходит в сеть.Пакеты проходящие через мост можно фильтровать различными способами: а) На входящих и исходящих интерфейсах (для этого необходимо установить значение переменной net.link.bridge.pfil_member=1): # sysctl net.link.bridge.pfil_member=1 б) На "промежуточном" интерфейсе (net.link.bridge.pfil_bridge=1) # sysctl net.link.bridge.pfil_bridge=1 в) И там и там, то есть обе переменные установить в 1. г) Нигде, то есть обе переменные установить в 0 (Пакеты проходящие сквозь мост не будут подвергаться фильтрации). Проще всего "мостовые" пакеты фильтровать на интерфейсе bridge0. Но меня больше устраивает вариант фильтрации на всех интерфейсах (возможность более гибкого управления поведением моста и самим сервером). Поэтому выполним: # sysctl net.link.bridge.pfil_member=1 # sysctl net.link.bridge.pfil_bridge=1 Далее настроим правила фаервола: Если ничего фильтровать не хотите: # ipfw add 100 allow ip from any to any Если нужна фильтрация тогда решать вам как её делать. Не следует забывать разрешать прохождение пакетов на интерфейсе bridge0 иначе ваш мост работать не будет совсем.Приведу небольшой пример по фильтрации пакетов сетевым мостом. Пусть иметься сеть 10.0.0.0/21 (То есть с маской 255.255.248.0). Мост ограничивает сеть с ай пи адресацией 10.0.1.0/24. Задача: требуется без разделения сети на сегменты ограничить доступ пользователем в остальную сеть Внешний кусок сети висит на интерфейсе fxp0, внутренний на fxp1. Правила фильтрации настроим следующим способом: # sysctl net.link.bridge.pfil_member=1 # sysctl net.link.bridge.pfil_bridge=1 Далее введём следующие правила: # 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.bridge.pfil_bridge=0 ) # ipfw add 300 allow ip from any to any out via fxp1 # ipfw add 400 allow ip from any to any out via fxp0 (Разрешаем весь исходящий трафик) (с обоих интерфейсов коммутации) # ipfw add 500 allow ip from not 10.0.1.0/24 to 10.0.1.0/24 in via fxp0 (Разрешили все ) ( входящие пакеты с сети во внутрь) # ipfw add 600 allow ip from 10.0.1.1 to any in via fxp1 # ipfw add 700 allow ip from 10.0.1.2 to any in via fxp1 # ipfw add 800 allow ip from 10.0.1.3 to any in via fxp1 # ipfw add 900 allow ip from 10.0.1.4 to any in via fxp1 # ipfw add 1000 allow ip from 10.0.1.5 to any in via fxp1 # ipfw add 1100 allow ip from 10.0.1.6 to any in via fxp1 (Тут прописали список разрешённых адресов) Если при этом последнее правило 65536 deny ip from any to any, мы получим мост который выпустит во внешнюю сеть только адреса с 1-го по 6-й, остальным доступ будет "наружу" запрещён. Следует отметить, что это только пример, так что с правилами в вашем конкретном случае решать придётся подумать. 5 Управление работой сетевого моста Управление работой сетевого моста было частично описано выше: удаление, добавление интерфейсов, настройка способов фильтрации. Более подробную информацию можно найти в man ifconfig. a) Добавление интерфейса: # ifconfig bridge0 addm fxp0 b) Удаление интерфейса: # ifconfig bridge0 deletem fxp0 c) Просмотр таблицы коммутации: # ifconfig bridge0 addr d) Установка размера Кеша адресов: # ifconfig bridge0 maxaddr 100 e) Установка времени жизни адреса в кеше (в секундах): # ifconfig bridge0 timeout 1000 f) Обнуление динамически запомненной таблицы коммутации (очистка кеша адресов): # ifconfig bridge0 flush g) Обнуление всей таблицы коммутации( удаляются даже статически заданные адреса). # ifconfig bridge0 flushall h) Добавление статической записи в таблицу коммутации (кеш адресов): # ifconfig bridge0 static fxp0 00:11:22:33:44:55 i) Удаление адреса из кеша (таблицы коммутации): # ifconfig bridge0 deladdr 00:11:22:33:44:55 j) Установка/Снятие атрибута learning на отдельном интерфейсе (то есть создаётся ли динамически кеш адресов на интерфейсе): # ifconfig bridge0 learn fxp0 # ifconfig bridge0 -learn fxp0 k) Включение/Выключение работы STP протокола на интерфейсе: # ifconfig bridge0 stp fxp0 # ifconfig bridge0 -stp fxp0 l) Управление работой протокола STP на интерфейсах - читайте в man ifconfig про : maxage, fwddelay, hellotime, priority, ifpriority, ifpathcost.

<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, Павел, 11:03, 29/12/2005 [ответить] [смотреть все]
  • +/
    На промежуточном интерфейсе net link bridge pfil_bridge 1 гы гы гы ув ... весь текст скрыт [показать]
     
     
  • 2.2, vippy, 17:30, 02/01/2006 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    А что такое по-вашему вообще bridge 0-9 , создаваемый запуском ifconfig Это ка... весь текст скрыт [показать] [показать ветку]
     
  • 1.3, Cover_Story, 15:16, 21/04/2006 [ответить] [смотреть все]  
  • +/
    Начал компилировать ядро: config BRIDGE.
    Система выдала ошибку:
    config: BRIDGE:284: syntax error

    В этой строке стоит следующее:
    device if_bridge

    Как быть?

    ОС freebsd 6.0

    Спасибо

     
     
  • 2.4, Dimm, 19:15, 25/04/2006 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Ключевая фраза "В коде FreeBSD 5-STABLE и 6-STABLE ..."
     
  • 1.5, volos, 01:39, 27/04/2006 [ответить] [смотреть все]  
  • +/
    Статья классная! Афтору зачот!

    Вопрос такой - у меня в ядре есть код старого BRIDGE и новое, описанное в этой статье. Работать будет нормально? А то ядро пересобирать лениво!

     
  • 1.6, Cover_Story, 18:27, 27/04/2006 [ответить] [смотреть все]  
  • +/
            # ipfw add 500 allow ip from not 10.0.1.0/24 to 10.0.1.0/24 in via fxp0 (Разрешили все )
                                                                 ( входящие пакеты с сети во внутрь)

    Извините но я не понял вот эту строчку!!!
    not 10.0.1.0/24 - это что?

     
     
  • 2.8, volos, 20:07, 01/05/2006 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    работает
     
  • 1.7, Cover_Story, 18:43, 27/04/2006 [ответить] [смотреть все]  
  • +/
            # ipfw add 500 allow ip from not 10.0.1.0/24 to 10.0.1.0/24 in via fxp0 (Разрешили все )
                                                                 ( входящие пакеты с сети во внутрь)

    Извините но я не понял вот эту строчку!!!
    not 10.0.1.0/24 - это что?

     
  • 1.9, Cover_Story, 10:30, 04/05/2006 [ответить] [смотреть все]  
  • +/
    У меня работала потом перестала как проверить в чем проблема!
     
  • 1.10, Аноним, 14:07, 05/05/2006 [ответить] [смотреть все]  
  • +/
    Порекомендую всем использующим if_bridge увеличить кеш адресов в таблице коммута... весь текст скрыт [показать]
     
     
  • 2.11, tolik, 01:56, 09/08/2006 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Очень толковая статья, сделал всё так же на радиомосте, но после поднятия бриджа... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.13, weldpua2008, 00:07, 07/12/2006 [^] [ответить] [смотреть все]  
  • +/
    Очень толковая статья, сделал всё так же на радиомосте, но после поднятия бриджа... весь текст скрыт [показать]
     
  • 1.12, Basteon, 07:33, 08/10/2006 [ответить] [смотреть все]  
  • +/
    А как заставить ходить через мосит PPPoE?
    У меня не видится сервис по другую сторону моста.
    # sysctl net.link.bridge.pfil_member
    net.link.bridge.pfil_member: 1
    # sysctl net.link.bridge.pfil_bridge
    net.link.bridge.pfil_bridge: 1
    Но поскольку фильтрация выполняется на L3, то это не должно мешать работе протоколов уровня L2.
    Плиз, подскажите что не так?
     
     
  • 2.14, gpa, 20:59, 05/01/2007 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    sysctl net link bridge pfil_onlyip 0 ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.15, weldpua2008, 13:25, 06/01/2007 [^] [ответить] [смотреть все]  
  • +/
    ХМ Сегодня поставил ФРЯХУ 6,2рс1 Сделал мост if_bridge Поставил шейперить Так во... весь текст скрыт [показать]
     
  • 1.16, weldpua2008, 03:41, 17/01/2007 [ответить] [смотреть все]  
  • +/
    }{elp тут http://www.opennet.ru/openforum/vsluhforumID1/71502.html
     
  • 1.17, ig0r, 14:05, 14/04/2007 [ответить] [смотреть все]  
  • +/
    Сделал как описано в статье. ОС FreeBSD 6.1.Сначало работает нормально, но после прокачки около 100Мб перестают ходить данные.
    Опускаю,поднимаю интерфэйс опять начинает работать, до тех пор пока не прокачаются следующие 100 метров. В чём может быть проблема?
     
  • 1.18, Mihalych, 20:08, 27/04/2007 [ответить] [смотреть все]  
  • +/
    neon! Ты мозг!
     
  • 1.19, Андрей, 20:45, 27/04/2007 [ответить] [смотреть все]  
  • +/
    А каким правилом можно закрыть один(отдельный) порт???тоесть чтобы пакеты с назначение допустим порт 1200 не проходил через мост...
     
     
  • 2.20, Fire_Anton, 05:09, 15/05/2007 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Какие системные требования к этому методу?

    Я сначала поставил это дело на 180мегогерц работало на 5мбит, загрузка ЦП была на 100процентов
    Потом поставил на 1800 работало на 100мбит. Но загрузка ЦП тоже на 100процентов.

    Какой прикол? Чем больше даш, тем больше съест?

     
     
  • 3.21, weldpua2008, 11:47, 15/05/2007 [^] [ответить] [смотреть все]  
  • +/
    >Какие системные требования к этому методу?
    >
    >Я сначала поставил это дело на 180мегогерц работало на 5мбит, загрузка ЦП
    >была на 100процентов
    >Потом поставил на 1800 работало на 100мбит. Но загрузка ЦП тоже на
    >100процентов.
    >
    >Какой прикол? Чем больше даш, тем больше съест?
    Может включен полинг?И вместо idle Он грузит проц?
    Или наоборот - включите полинг :)

     
     
  • 4.22, Fire_Anton, 18:46, 15/05/2007 [^] [ответить] [смотреть все]  
  • +/
    >Может включен полинг?И вместо idle Он грузит проц?
    >Или наоборот - включите полинг :)

    А как его включить? Или выключить?
    Тут в примере написан то он не работает.

     
     
  • 5.23, weldpua2008, 00:52, 16/05/2007 [^] [ответить] [смотреть все]  
  • +/
    >>Может включен полинг?И вместо idle Он грузит проц?
    >>Или наоборот - включите полинг :)
    >
    >А как его включить? Или выключить?
    >Тут в примере написан то он не работает.
    Значит ВАМ НАДО ВКЛЮЧИТЬ - иначе Я допускаю что так как Вы не знаете что это - то и не включали...
    Ищем по "polling или poling или полинг" - вкомпиливается в ядро - У Меня на 6-ке
    options DEVICE_POLLING
    А вообще Там со старыми версиямы были баги при включеном smp
    Он (полинг) снижает нагрузку на проц - особенно это гуд для всякихз роутеров в том числе Мостов


     
     
  • 6.24, Fire_Anton, 01:01, 16/05/2007 [^] [ответить] [смотреть все]  
  • +/

    >У Меня на 6-ке
    >options DEVICE_POLLING
    >А вообще Там со старыми версиямы были баги при включеном smp

    У меня слава богу тоже 6-ка :)

    Теперь второй вопрос. У меня есть ВЛан 4002 и надо сделать так, что-бы он был виден через мост. Как это сделать?


     
  • 2.25, Fire_Anton, 09:36, 18/06/2007 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Не хочет форвордить пакеты 53-го порта. Смотрю на фаервол вроде бы пишет, что форвординг проходит. А пробую по имени ДНСа обратится от него не знает. От куда делаю вывод, что он нифига не форвордит. Где грабли?
     
  • 1.26, Gaidamak, 15:58, 05/02/2009 [ответить] [смотреть все]  
  • +/
    Медитировал над этой статьей, есть непонятка. В случае с тремя портами на мосту на какой из двух портов уйдет пакет, пришедший на третий порт? Как это регулировать?
     
  • 1.27, valentin, 21:36, 19/02/2009 [ответить] [смотреть все]  
  • +/
    Не получается выпустить пакеты исходящие из внутреней  сети. Сделал все как описано. С мира пускает на те машины и на сам бридж. А вот с самой машины наружу нельзя вылезти. При том правила уже прописывал,которые должны выпускать. Именно что-то на уровне интерфейсов бок. Помогите плиз
     
  • 1.28, HVVPR7, 18:21, 14/06/2009 [ответить] [смотреть все]  
  • +/
    .... а как поднять мост через tun0?   ... то есть это.... дать виртуальной машине инет через tun0 ?
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:





      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor