Spanning tree protocol

В чём разница между мост-брандмауэром (bridging firewal) и обычным брандмауэром (межсетевой экран, firewall)? Обычный брандмауэр работает, как маршрутизатор: находящуюся за ним систему кофигурируют таким образом, чтобы из неё межсетевой экран был виден как шлюз во внешнюю сеть, а внешние маршрутизаторы конфигурируются так, чтобы видеть его как шлюз в защищенную сеть. Мост (bridge) — это часть оборудования, соединяющая два (или более) сегмента сети вместе и просто перенаправляет пакеты в обе стороны. Другими словами, маршрутизатор соединяет две сети вместе и выполняет роль транслятора между ними; мост же похож на патч-кабель (patch cable), соединяющий две части одной сети вместе. Мост-брандмауэр действует как мост, но одновременно фильтрует проходящие пакеты, оставаясь невидимым для другой стороны.

Почему у вас может появиться желание использовать мост-брандмауэр? На ум сразу приходят две причины:

Вы можете подключить брандмауэр не изменяя существующую сетевую конфигурацию.

Вы можете защитить ту часть сети, в которой вы не имеете контроля над внешней маршрутизацией (external routing) в вашу сеть.

Моя проблема

У меня в офисе новое «с иголочки» ADSL соединение от Demon Internet (ISP в UK — United Kingdom или Объединенное Королевство, официальное название Великобритании. Прим. ред.) с подсетью на 16 адресов (базовый, широковещательный, ip-адрес шлюза + 13 ip-адресов). По вине капризов и причуд UK-коммерции и «регулятивного окружения», линия и маршрутизатор были установлены  и являются собственностью British Telecom plc., а оборудование для конфигурации маршрутизатора, как встроенного шлюза (internal gateway), отсутствует. Это оставляет мне две возможности:

Соединить каждый хост напрямую с ADSL и настроить iptables отдельно для каждого из них.

Использовать межсетевой экран с ip-маскарадингом для предоставления внешнему миру одного ip-адреса.

Первый вариант неприемлем с точки зрения безопасности.  Рост числа iptable-конфигураций увеличивает вероятность ошибки и затраты на администрирование.  Второй вариант тоже имеет свои недостатки. В то время, как почти все можно настроить и вполне успешно использовать под ip-маскарадингом, есть и исключения, в том числе некоторые технологии, которые я хотел бы исследовать, например VPN. Мост-брандмауэр может решить эти проблемы. Такой экран может располагаться за ADSL-маршрутизатором, выполнять часть его функций и защищать сеть без перекофигурирования самого маршрутизатора. Последняя оставшаяся проблема — это то, что реализация межсетевого моста в стандартном ядре Linux не использует iptables, поэтому вы получаете машину, которая выполняет либо функции моста, либо межсетевого экрана, но не может являться и тем и другим одновременно.

Решение

К счастью есть проект, позволяющий машине выполнять функции моста (bridging) в связке с iptables так, что любые проходящие через мост пакеты должны подчиняться правилам iptables. В результате получаем полностью прозрачный для сети межсетевой экран не требующий специальной маршрутизации. В том, что касается Интернета, такой брандмауэр никак себя не проявляет за исключением случая, когда определённые соединения блокируются. Программное обеспечение представляет собой накладываемую на ядро «заплатку» (патч, patch), позволяющую существующему коду сетевого моста работать внутри iptables. Для удобства разработчиками создан rpm-пакет с ядром (для RedHat 7.2) с уже установленной заплаткой.

Хуже то, что использование этого патча мало документировано, поэтому я и подумал о том, чтобы восполнить этот пробел (в помощь собравшихся пойти по этому пути).

Функционирование моста (bridging) и маршрутизация — как это работает

Если кратко, то мост работает связывая два или более сетевых интерфейса. Производя мониторинг активности во всех подключённых сегментах сети, код реализации моста  «выучивает» MAC-адреса, до которых можно «достучаться» с каждого интерфейса и использует эту информацию для принятия решения о том, куда отправлять тот или иной пакет. Интерфейсы, подключенные к мосту обычно не имеют ассоциированных с ними ip-адресов , но, в целом, с точки зрения межсетевого экрана, мост представляет собой единый интерфейс.

Топология сети

Мои статические адреса расположены в диапазоне xxx.xxx.xxx.48-63, маска подсети — 255.255.255.240. Я решил разделить этот диапазон на два сегмента: диапазон xxx.xxx.xxx.48-56 будет использоваться для сети, расположенной перед сетевым экраном и включать в себя ip-адрес ADSL-маршрутизатора (xxx.xxx.xxx.49). Диапазон xxx.xxx.xxx.57-62 предназначен для сети, расположенной за межсетевым экраном. Учтите, что это не настоящие подсети, поскольку они соединены при помощи моста, а не маршрутизатора.

 

Правила для межсетевого экрана

Пример скрипта с правилами для межсетевого экрана  очень похож на скрипт настройки обычного брендмауэра (он списан с Oskar Andreasson’s iptables tutorial). Основные правила следующие:

Блокировать пакеты с нежелаемых ip-адресов.

Разрешать любые исходящие соединения из внутренней сети.

Разрешать прохождение пакетов принадлежащих уже установленным соединениям.

Разрешать соединения с указанными портами и хостами, расположенными снаружи.

Объявление переменных

Для понимания и простоты обслуживания, хорошей идеей будет использовать в качестве имён интерфейсов и ip-адресов переменные. Значения, используемые в описываемых примерах следующие:

IP_TABLES=/sbin/iptables BR_IP=»xxx.xxx.xxx.57″ BR_IFACE=br0 LAN_BCAST_ADDRESS=»xxx.xxx.xxx.63″ INTERNAL_ADDRESS_RANGE=»xxx.xxx.xxx.56/29″ INET_IFACE=»eth1″ LAN_IFACE=»eth0″ LO_IFACE=»lo» LO_IP=»127.0.0.1″

«xxx.xxx.xxx» представляет собой первые три байта ip-адреса. $INTERNAL_ADDRESS_RANGE содержит адрес сегмента сети, расположенного за межсетевым экраном.

Настройка моста

Теперь мы должны произвести несколько обычных настроек. Во-первых, мы отключим наши два интерфейса и удалим их ip-адреса.

ifdown $INET_IFACE ifdown $LAN_IFACE ifconfig $INET_IFACE 0.0.0.0 ifconfig $LAN_IFACE 0.0.0.0

Если вы только что выполнили эти команды по telnet’у или через ssh-соединение, то встаньте и перейдите к консоли вашего брандмауэра:).

Следующей командой мы создаём мост и присоединяем  к нему ethernet-интерфейсы.

brctl addbr $BR_IFACE brctl addif $BR_IFACE $INET_IFACE brctl addif $BR_IFACE $LAN_IFACE

Теперь, если вы хотите, то можете поднять мост как внутренний интерфейс,

ifconfig $BR_IFACE $BR_IP

Блокирование спуфинга

Мы можем блокировать пакеты со злонамеренно измененными адресами (spoofed) ещё на уровне цепочки преобразований [mangle] PREROUTING. Здесь мы можем одновременно  захватить как входящие (INPUT) так и транзитные (FORWARDED) пакеты. Предпочтительнее использовать mangle PREROUTING, чем nat PREROUTING, потому что при передаче в nat таблице на соответствие ip-адреса и имени хоста проверяется только первый пакет.

Эта строка гарантирует,  что только пакеты с правильными внутренними адресами ($INTERNAL_ADDRESS_RANGE) будут приняты внутренним интерфейсом ($LAN_IFACE):

А эта цепочка предотвратит принятие пакетов с внутренними адресами ($INTERNAL_ADDRESS_RANGE) внешним интерфейсом ($INET_IFACE):

Доступ к сетевому экрану из внутренней сети

Можно сделать межсетевой экран полностью невидимым в сети или, ради удобства, разрешить соединения из него. Эти команды разрешат все соединения из внутренней сети. В зависимости от степени вашего доверия к пользователям локальной сети, вы можете быть более избирательным.

Помните, что пакеты из диапазона $INTERNAL_ADDRESS_RANGE, которые пришли на неправильный интерфейс, вы уже уничтожили.

Дополнительная информация

Патч на ядро,  без которого правила iptables работать не будут.

Рекомендую прочесть iptables tutorial от Oskar Andreasson.

Для лучшего понимания пакетной фильтрации и работы в сети попробуйте также почитать Rusty’s Remarkably Unreliable Guides .

Sparkle Home Page (сайт компании автора)

Благодарности

Спасибо Lennert Buytenhek за действительно полезный патч и замечание по этой статье.


David Whitmarsh

David Whitmarsh — независимый консультант, его компания, Sparkle Computer Co Ltd, обслуживает главным образом финансовые организации в Лондоне. При наличии четырех детей время становится большой ценностью, и единственная для Дейвида возможность  поработать с Linux и свободным софтом — работа на лаптопе во время ежедневных поездок из Sussex’а.


Copyright (C) 2002, David Whitmarsh.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 76 of Linux Gazette, March 2002

Этап. Выбор корневого коммутатора

⇐ Предыдущая12345678910Следующая ⇒

вручную администратором или автоматически (по минимальности MAC-адреса блока управления) – по пакетам BPDU (bridge protocol data unit)

Этап.

Выбор корневых портов (на каждом коммутаторе)

на каждом коммутаторе (по ретранслируемым пакетам BPDU) выбирается порт, имеющий минимальное «расстояние» (STP Cost) до корневого коммутатора

Этап. Выбор назначенных (designated) портов (в каждом сегменте сети)

Из всех портов всех коммутаторов сегмента выбирается порт с минимальным «расстоянием» до корневого коммутатора

Все остальные порты (кроме корневых и назначенных) блокируются. Математически доказано, что при таком выборе активных портов в сети исключаются петли, а оставшиеся связи образуют покрывающее дерево

Spanning Tree Protocol

Основной задачей STP является приведение сети Ethernet с множественными

связями к древовидной топологии, исключающей циклы пакетов. Происходит это

путём автоматического блокирования избыточных в данный момент связей для полной

связности портов..

Принцип действия протокола

1. В сети выбирается один корневой мост (англ. Root Bridge).

2. Далее каждый, отличный от корневого, мост просчитывает кратчайший путь к

корневому. Соответствующий порт называется корневым портом (англ. Root

Port). У любого не корневого коммутатора может быть только один корневой

порт.

3. После этого для каждого сегмента сети просчитывается кратчайший путь к

корневому порту. Мост, через который проходит этот путь, становится

назначенным для этой сети (англ. Designated Bridge). Непосредственно

подключенный к сети порт моста — назначенным портом.

4. Далее на всех мостах блокируются все порты, не являющиеся корневыми и

назначенными. В итоге получается древовидная структура (математический

граф) с вершиной в виде корневого коммутатора.

Важные правила работы STP

Корневым (root-овым) коммутатором назначается коммутатор с САМЫМ

НИЗКИМ BID (Bridge ID)!

Возможны случаи, когда приоритет у двух и более коммутаторов будет

одинаков, тогда выбор корневого коммутатора (root-а) будет происходит на

основании MAC-адреса коммутатора, где корневым (root) коммутатором станет

коммутатор с наименьшим MAC-адресом.

Коммутаторы, по умолчанию, не измеряют состояние сети, а имеют заранее

прописанные настройки.

Каждый порт имеет свою стоимость (cost) соединения, установленную либо на

заводе-изготовителе (по умолчанию), либо вручную.

Алгоритм действия протокола STP

После включения коммутаторов в сеть, по умолчанию каждый (!) коммутатор

считает себя корневым (root).

Затем коммутатор начинает посылать по всем портам конфигурационные Hello

BPDU пакеты раз в 2 секунды.

Исходя из данных Hello BPDU пакетов, тот или иной коммутатор приобретает

статус root, то есть корня.

После этого все порты кроме root port и designated port блокируются.

Происходит посылка Hello-пакетов раз в 2 секунды, с целью препятствия

появлению петель в сети.

 

11. Виртуальные локальные сети

Виртуальная локальная сеть(Virtual LAN, VLAN) – группа узлов сети, трафик которой (в т. ч. широковещательный) на канальном уровне полностью изолирован от других узлов сети.

Достоинством технологии виртуальных сетей является то, что она позволяет создавать полностью изолированные сегменты сети путем логического конфигурирования коммутаторов, не прибегая к изменению физической структуры.

VLANимеет те же свойства, что и физическая локальная сеть, но позволяет конечным

станциям группироваться вместе, даже если они не находятся в одной физической сети.

Такая реорганизация может быть сделана на основе программного обеспечения вместо

физического перемещения устройств.


⇐ Предыдущая12345678910Следующая ⇒


Дата добавления: 2016-03-28; просмотров: 196 | Нарушение авторских прав


Похожая информация:


Поиск на сайте:


Основные команды настройки STP.

 

Команда Описание
spanning-tree vlan vlan-id root Команда глобальной конфигурации для изменения корневого коммутатора
spanning-tree vlan vlan-id {priority priority} Команда глобальной конфигурации, которая изменяет приоритет коммутатора в определённом VLAN
spanning-tree vlan cost cost Команда подрежима настройки интерфейса, которая изменяет стоимость маршрута
channel-group channel-group-number mode {auto|desireble|on} Команда подрежима настройки интерфейса, которая включает Ether Channel на интерфейсе
show spanning-tree Выводит детальный отчёт о состоянии STP на коммутаторе, включая состояние каждого порта
show spanning-tree interface int-id Выводит STP-информацию по конкретному порту
show spanning-tree vlan vlan-id Выводит STP-информацию для конкретного VLAN
debug spanning-tree Выводит сообщения об изменениях в топологии STP
show etherchannel [channel-group-number]{brief|detail|port|port-channel|symmary} Выводит информацию о состоянии канала Ether Channel на коммутаторе

 

Рассмотрим конфигурацию STP на примере сети показанной на рис. 14.

2 коммутатора SW1 и SW2 соединены следующим образом:

Порт fastEthernet 0/1 SW1 с портом fastEthernet 0/1 SW2;

Порт fastEthernet 0/2 SW1 с портом fastEthernet 0/2 SW2;

Порт fastEthernet 0/3 SW1 с портом fastEthernet 0/3 SW2.

 

Рис. 14. Соединение SW1 и SW2 по трем параллельным линиям.

 

Введем команду show spanning-tree на SW1 (пример 10).

В результате выполнения этой команды видно, что Root ID совпадает с ID этого коммутатора, следовательно, он и является корневым, а все его порты находятся в режиме передачи.

 

Пример 10.

 

Switch1#show spanning-tree

VLAN0001

Spanning tree enabled protocol ieee

Root ID Priority 32769

Address 0006.d6a9.cfc0

This bridge is the root

Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec

Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)

Address 0006.d6a9.cfc0

Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec

Aging Time 300

Interface Port ID Designated Port ID

Name Prio.Nbr Cost Sts Cost Bridge ID Prio.Nbr

—————- ——— ——— — ——— ——————— ———

Fa0/1 128.1 19 FWD 0 32769 0006.d6a9.cfc0 128.1

Fa0/2 128.2 19 FWD 0 32769 0006.d6a9.cfc0 128.2

Fa0/3 128.3 19 FWD 0 32769 0006.d6a9.cfc0 128.3

Введём команду show spanning-tree на SW2 (пример 11).

В результате выполнения этой команды видно, что Root ID отличается от ID SW2, следовательно, он не является корневым. Поэтому для исключения дублирующих связей на SW2 должен быть включен только один порт.

Порт fa0/1 находится в режиме передачи, а порты fa0/2 и fa0/3 заблокированы, так как их приоритет ниже, чем приоритет порта fa0/1.

 

Пример 11.

 

Switch2#show spanning-tree

VLAN0001

Spanning tree enabled protocol ieee

Root ID Priority 32769

Address 0006.d6a9.cfc0

Cost 19

Port 1 (FastEthernet0/1)

Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec

Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)

Address 0006.d6ac.6840

Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec

Aging Time 15

Interface Port ID Designated Port ID

Name Prio.Nbr Cost Sts Cost Bridge ID Prio.Nbr

—————- ——— ——— — ——— ——————— ———

Fa0/1 128.1 19 FWD 0 32769 0006.d6a9.cfc0 128.1

Fa0/2 128.2 19 BLK 0 32769 0006.d6a9.cfc0 128.2

Fa0/3 128.3 19 BLK 0 32769 0006.d6a9.cfc0 128.3

Теперь введём изменения в конфигурацию STP. Для этого уменьшим стоимость (cost) линии связи, соединяющей SW1 и SW2 по портам fa0/3 (по умолчанию cost=19).

Сначала введём на коммутаторе SW2 команду debug spanning-tree для получения сообщений об изменениях в топологии STP.

Затем изменим стоимость порта fa0/3 с помощью команды spanning-tree cost 10. После применения данных изменений появляются отладочные сообщения о состояниях портов. Порт fa0/3 сначала перейдёт в состояние listening, затем в состояние learning, и в завершении перейдёт в состояние forwarding (пример 12).

 

Пример 12.

Switch2#debug spanning-tree config

Spanning Tree configuration debugging is on

Switch2#configure terminal

Enter configuration commands, one per line. End with CNTL/Z.

Switch2(config)#interface

Switch2(config)#interface fastEthernet 0/3

Switch2(config-if)#spanning-tree cost 10

Switch2(config-if)# Z

00:12:16: SPANPORT: nvgen=0 sense=1 which=3 set_to_default=0 if 80758D18 stp unk

nown 0 parm=10

00:12:16: SPANPORT: set port parms unknown 0 int Fa0/3(80758D18) which 3 param 1

00:12:16: STP CFG: creating port config FastEthernet0/3 (80758D18)

00:12:16: STP CFG: create port cfg subblock on FastEthernet0/3 (80758D18)

00:12:16: STP CFG: found port cfg FastEthernet0/3 (80758D18)

00:12:16: STP CFG: found port cfg FastEthernet0/3 (80758D18)

00:12:16: STP CFG: set port param unknown 0 FastEthernet0/3(807^Z

Switch2#58D18) which 3 value 10 rc=[OK]

Switch2#show spanning-tree

VLAN0001

Spanning tree enabled protocol ieee

Root ID Priority 32769

Address 0006.d6ac.6840

Cost 10

Port 3 (FastEthernet0/3)

Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec

Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)

Address 0006.d6a9.cfc0

Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec

Aging Time 15

Interface Port ID Designated Port ID

Name Prio.Nbr Cost Sts Cost Bridge ID Prio.Nbr

—————- ——— ——— — ——— ——————— ———

Fa0/1 128.1 19 BLK 0 24577 0006.d6ac.6840 128.1

Fa0/2 128.2 19 BLK 0 24577 0006.d6ac.6840 128.2

Fa0/3 128.3 10 LRN 0 24577 0006.d6ac.6840 128.3

Добавить комментарий

Закрыть меню