VLAN-сегментация и L3-маршрутизация: как мы защитили сеть больницы на 500 устройств

Исходная ситуация: плоская сеть больницы

Медицинский центр «МедЦентр» обратился к нам после аудита информационной безопасности. Заключение было неутешительным: вся сеть на 500 устройств работала в одном плоском L2-домене — один VLAN, один широковещательный домен, один DHCP-сервер на всех. Медицинские аппараты МРТ, рабочие станции врачей, гостевой Wi-Fi посетителей и IP-камеры видеонаблюдения сидели в одной подсети 10.0.0.0/21.

Проблемы были критическими:

  • Безопасность — любой посетитель, подключившись к гостевому Wi-Fi, мог просканировать всю сеть и обнаружить незащищённые медицинские устройства. Nmap-сканирование из гостевой сети показало 127 открытых устройств.
  • PCI DSS — больница принимала оплату картами, но сегмент платёжных терминалов не был изолирован, что нарушало требование 1.2.1 стандарта.
  • Широковещательный шторм — 500 устройств в одном broadcast-домене генерировали до 15% паразитного трафика. ARP-таблицы переполнялись, периодически вызывая потерю связи у медицинского оборудования.
  • IoT-устройства — 80 датчиков мониторинга пациентов работали на старых прошивках без обновлений и требовали изоляции.

Проектирование VLAN-архитектуры

Мы разработали схему сегментации на 7 VLAN с чётким разделением по функциональным зонам:

VLAN IDНазваниеПодсетьУстройстваКол-во
10Medical10.10.10.0/24Медицинское оборудование (МРТ, УЗИ, мониторы)60
20Staff10.10.20.0/24Рабочие станции врачей и медсестёр180
30Admin10.10.30.0/24Бухгалтерия, HR, руководство50
40Guest10.10.40.0/24Гостевой Wi-Fi для посетителей~100
50IoT10.10.50.0/24Датчики, IP-камеры, умные замки80
60PCI10.10.60.0/28Платёжные терминалы8
99Management10.10.99.0/28Управление коммутаторами и AP22

Ключевые принципы проектирования:

  • PCI-сегмент получил маску /28 (14 хостов) — минимально необходимый размер, чтобы ограничить поверхность атаки.
  • Management VLAN 99 — отдельная подсеть для SSH/HTTPS-управления оборудованием, недоступная из пользовательских VLAN.
  • Гостевой VLAN 40 — полная изоляция: доступ только в интернет, запрет на обращение к любым внутренним подсетям.

802.1Q и access/trunk порты: настройка на Cisco

Стандарт 802.1Q добавляет 4-байтовый тег в Ethernet-фрейм, указывающий принадлежность к VLAN. Порты коммутатора работают в двух режимах:

  • Access — подключение конечных устройств. Порт принадлежит одному VLAN, тег при передаче устройству снимается.
  • Trunk — соединение между коммутаторами и маршрутизатором. Передаёт кадры нескольких VLAN с тегами 802.1Q.

Настройка VLAN и портов на Cisco Catalyst 2960:

! Создаём VLAN
vlan 10
  name Medical
vlan 20
  name Staff
vlan 30
  name Admin
vlan 40
  name Guest
vlan 50
  name IoT
vlan 60
  name PCI
vlan 99
  name Management

! Access-порт для рабочей станции врача (VLAN 20)
interface GigabitEthernet0/1
  description Doctor-Workstation-Room-204
  switchport mode access
  switchport access vlan 20
  switchport port-security
  switchport port-security maximum 2
  switchport port-security violation restrict
  spanning-tree portfast
  spanning-tree bpduguard enable
  no shutdown

! Access-порт для платёжного терминала (VLAN 60)
interface GigabitEthernet0/15
  description PCI-Terminal-Reception
  switchport mode access
  switchport access vlan 60
  switchport port-security
  switchport port-security maximum 1
  switchport port-security violation shutdown
  spanning-tree portfast
  spanning-tree bpduguard enable
  no shutdown

! Trunk-порт к L3-коммутатору
interface GigabitEthernet0/24
  description Uplink-to-Core-L3
  switchport mode trunk
  switchport trunk encapsulation dot1q
  switchport trunk allowed vlan 10,20,30,40,50,60,99
  switchport trunk native vlan 999
  no shutdown

Важные моменты:

  • Port-security на access-портах ограничивает количество MAC-адресов — защита от несанкционированного подключения коммутаторов.
  • BPDU Guard блокирует порт при получении BPDU-пакетов — защита от подключения стороннего коммутатора.
  • Native VLAN 999 на trunk-портах — нетегированный трафик уходит в неиспользуемый VLAN, предотвращая VLAN hopping-атаки.

Inter-VLAN routing: router-on-a-stick vs L3 switch

VLAN изолируют L2-трафик, но устройствам из разных VLAN нужно общаться (врачи должны видеть медицинские системы). Для этого нужен L3-маршрутизатор между VLAN.

Router-on-a-stick — маршрутизатор подключён к коммутатору одним trunk-линком и маршрутизирует через sub-интерфейсы. Подходит для малых сетей (до 100 Мбит суммарного inter-VLAN трафика):

! Cisco Router — router-on-a-stick
interface GigabitEthernet0/0
  no shutdown

interface GigabitEthernet0/0.10
  description Medical-VLAN
  encapsulation dot1Q 10
  ip address 10.10.10.1 255.255.255.0

interface GigabitEthernet0/0.20
  description Staff-VLAN
  encapsulation dot1Q 20
  ip address 10.10.20.1 255.255.255.0

interface GigabitEthernet0/0.40
  description Guest-VLAN
  encapsulation dot1Q 40
  ip address 10.10.40.1 255.255.255.0

Для «МедЦентра» с 500 устройствами router-on-a-stick не подходил — один гигабитный линк стал бы бутылочным горлышком. Мы выбрали L3-коммутатор Cisco Catalyst 3650, который маршрутизирует между VLAN аппаратно, на скорости коммутации (wire-speed):

! L3 Switch — SVI (Switched Virtual Interfaces)
ip routing

interface Vlan10
  description Medical-Gateway
  ip address 10.10.10.1 255.255.255.0
  ip access-group MEDICAL_IN in
  no shutdown

interface Vlan20
  description Staff-Gateway
  ip address 10.10.20.1 255.255.255.0
  no shutdown

interface Vlan30
  description Admin-Gateway
  ip address 10.10.30.1 255.255.255.0
  no shutdown

interface Vlan40
  description Guest-Gateway
  ip address 10.10.40.1 255.255.255.0
  ip access-group GUEST_RESTRICT in
  no shutdown

interface Vlan60
  description PCI-Gateway
  ip address 10.10.60.1 255.255.255.240
  ip access-group PCI_STRICT in
  no shutdown

interface Vlan99
  description Management-Gateway
  ip address 10.10.99.1 255.255.255.240
  no shutdown

L3-коммутатор обрабатывал inter-VLAN трафик без задержек. Пропускная способность между VLAN составила полные 10 Гбит/с по бэкплейну, что критично для передачи медицинских изображений (один снимок МРТ — до 500 МБ).

DHCP relay и ACL между VLAN

DHCP-сервер (Windows Server 2019) находился в VLAN 30 (Admin). Чтобы устройства в других VLAN получали IP-адреса, настроили DHCP relay на каждом SVI L3-коммутатора:

! DHCP relay на L3 Switch
interface Vlan10
  ip helper-address 10.10.30.10

interface Vlan20
  ip helper-address 10.10.30.10

interface Vlan40
  ip helper-address 10.10.30.10

interface Vlan50
  ip helper-address 10.10.30.10

Команда ip helper-address перенаправляет широковещательные DHCP-запросы (DISCOVER/REQUEST) юникастом на указанный сервер. На DHCP-сервере создали отдельные scope для каждой подсети с соответствующими шлюзами и опциями.

ACL — ключевой элемент безопасности. Мы создали строгие правила:

! Гостевой VLAN — только интернет, никакого доступа к внутренним сетям
ip access-list extended GUEST_RESTRICT
  permit udp any host 10.10.30.10 eq bootps
  permit udp any any eq domain
  deny   ip any 10.10.0.0 0.0.255.255
  permit ip any any

! PCI VLAN — только платёжный шлюз, DNS и NTP
ip access-list extended PCI_STRICT
  permit tcp any host 203.0.113.50 eq 443
  permit udp any host 10.10.30.10 eq bootps
  permit udp any any eq domain
  permit udp any any eq ntp
  deny   ip any any log

! Медицинский VLAN — доступ к PACS-серверу и HIS, запрет интернета
ip access-list extended MEDICAL_IN
  permit tcp any host 10.10.30.20 eq 443
  permit tcp any host 10.10.30.21 eq 11112
  permit udp any host 10.10.30.10 eq bootps
  permit udp any any eq domain
  permit icmp any 10.10.10.0 0.0.0.255 echo-reply
  deny   ip any any log

После применения ACL повторное сканирование из гостевой сети показало 0 обнаруженных устройств. PCI-аудитор подтвердил соответствие требованию 1.2.1.

VLAN на Mikrotik: альтернативная реализация

В филиале «МедЦентра» стояло оборудование Mikrotik — CRS326 в качестве коммутатора и hEX S (RB760iGS) в качестве маршрутизатора. Настройка VLAN на RouterOS принципиально отличается от Cisco:

# === Mikrotik CRS326: Bridge VLAN Filtering ===

# Создаём bridge и включаем VLAN filtering
/interface bridge
add name=bridge1 vlan-filtering=no

# Добавляем порты в bridge
/interface bridge port
add bridge=bridge1 interface=ether1 pvid=20  comment="Staff-PC"
add bridge=bridge1 interface=ether2 pvid=20  comment="Staff-PC"
add bridge=bridge1 interface=ether3 pvid=10  comment="Medical"
add bridge=bridge1 interface=ether4 pvid=50  comment="IoT-sensor"
add bridge=bridge1 interface=sfp-sfpplus1     comment="Uplink-trunk"

# Настраиваем VLAN на bridge
/interface bridge vlan
add bridge=bridge1 tagged=sfp-sfpplus1 untagged=ether1,ether2 vlan-ids=20
add bridge=bridge1 tagged=sfp-sfpplus1 untagged=ether3 vlan-ids=10
add bridge=bridge1 tagged=sfp-sfpplus1 untagged=ether4 vlan-ids=50
add bridge=bridge1 tagged=sfp-sfpplus1,bridge1 vlan-ids=99

# VLAN-интерфейсы для management
/interface vlan
add interface=bridge1 name=vlan99-mgmt vlan-id=99

# IP для management
/ip address
add address=10.10.99.2/28 interface=vlan99-mgmt

# ВАЖНО: включаем filtering последним!
/interface bridge
set bridge1 vlan-filtering=yes

На маршрутизаторе hEX S настроили inter-VLAN routing:

# === Mikrotik hEX S: Inter-VLAN Routing ===

# VLAN-интерфейсы на trunk-порте
/interface vlan
add interface=ether1 name=vlan10-medical vlan-id=10
add interface=ether1 name=vlan20-staff   vlan-id=20
add interface=ether1 name=vlan40-guest   vlan-id=40
add interface=ether1 name=vlan50-iot     vlan-id=50

# IP-адреса (шлюзы для каждого VLAN)
/ip address
add address=10.10.10.1/24 interface=vlan10-medical
add address=10.10.20.1/24 interface=vlan20-staff
add address=10.10.40.1/24 interface=vlan40-guest
add address=10.10.50.1/24 interface=vlan50-iot

# DHCP-сервер для каждого VLAN
/ip pool
add name=pool-staff ranges=10.10.20.100-10.10.20.250
add name=pool-guest ranges=10.10.40.100-10.10.40.250

/ip dhcp-server
add address-pool=pool-staff interface=vlan20-staff name=dhcp-staff
add address-pool=pool-guest interface=vlan40-guest name=dhcp-guest lease-time=2h

/ip dhcp-server network
add address=10.10.20.0/24 gateway=10.10.20.1 dns-server=10.10.30.10
add address=10.10.40.0/24 gateway=10.10.40.1 dns-server=8.8.8.8,8.8.4.4

# Firewall — изоляция гостевого VLAN
/ip firewall filter
add chain=forward src-address=10.10.40.0/24 dst-address=10.10.0.0/16 action=drop \
    comment="Guest: block internal networks"
add chain=forward src-address=10.10.40.0/24 action=accept \
    comment="Guest: allow internet"

# Firewall — изоляция IoT
/ip firewall filter
add chain=forward src-address=10.10.50.0/24 dst-address=10.10.50.0/24 action=accept \
    comment="IoT: allow internal"
add chain=forward src-address=10.10.50.0/24 action=drop \
    comment="IoT: block everything else"

Критическая ошибка Mikrotik: включать vlan-filtering=yes на bridge нужно только после полной настройки VLAN-таблицы. Если включить раньше — потеряете доступ к устройству, так как management-трафик без тега будет отброшен.

Мониторинг и обнаружение аномалий

После внедрения VLAN-сегментации настроили мониторинг для контроля соблюдения политик:

SNMP-мониторинг через Zabbix:

  • Количество MAC-адресов на каждом порту — обнаружение несанкционированных коммутаторов.
  • Счётчики трафика по VLAN — выявление аномалий (всплеск broadcast, нетипичный объём данных).
  • Статус портов и port-security violations — немедленный алерт при срабатывании.

Скрипт проверки VLAN-изоляции — запускался ежедневно из каждого VLAN и проверял, что ACL работают корректно:

#!/bin/bash
# vlan_isolation_check.sh — ежедневная проверка изоляции VLAN
# Запускается из Guest VLAN (10.10.40.0/24)

INTERNAL_HOSTS=(
    "10.10.10.1"   # Medical gateway
    "10.10.20.1"   # Staff gateway
    "10.10.30.10"  # DHCP server
    "10.10.60.1"   # PCI gateway
    "10.10.99.1"   # Management gateway
)

ALERT_SENT=0

for host in "${INTERNAL_HOSTS[@]}"; do
    if ping -c 1 -W 1 "$host" &>/dev/null; then
        echo "[ALERT] Guest VLAN can reach $host — ACL BREACH!"
        ALERT_SENT=1
        curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
            -d chat_id="${CHAT_ID}" \
            -d text="🚨 VLAN BREACH: Guest network reached $host"
    fi
done

if [ $ALERT_SENT -eq 0 ]; then
    echo "[OK] All VLAN isolation checks passed"
fi

За три месяца эксплуатации скрипт дважды обнаружил нарушения — оба раза после обновления прошивки коммутаторов, когда ACL сбрасывались. Благодаря мониторингу мы восстанавливали политики в течение 5 минут.

Результаты и выводы

Внедрение VLAN-сегментации в «МедЦентре» заняло 3 недели и принесло измеримые результаты:

МетрикаДоПосле
Broadcast-трафик15% от общего0.8% в каждом VLAN
Устройства, видимые из гостевой сети1270
Время простоя сети (в месяц)4.5 часа12 минут
Соответствие PCI DSS 1.2.1Не пройденоПройдено
Инцидентов ИБ (за квартал)70

Ключевые рекомендации:

  • Начинайте проектирование VLAN с определения зон безопасности, а не с количества портов. Думайте категориями trust level.
  • Используйте L3-коммутатор вместо router-on-a-stick при количестве устройств более 100 — разница в производительности колоссальная.
  • Native VLAN на trunk-портах должен быть неиспользуемым — это базовая защита от VLAN hopping.
  • Всегда настраивайте port-security и BPDU Guard на access-портах — это предотвращает 90% атак на L2-уровне.
  • Автоматизируйте проверку изоляции — ACL могут сброситься при обновлении прошивки или ошибке администратора.

Часто задаваемые вопросы

Стандарт 802.1Q поддерживает до 4094 VLAN (ID от 1 до 4094). На практике большинство enterprise-коммутаторов поддерживают от 1000 до 4094 активных VLAN. Для типичной организации 10-30 VLAN более чем достаточно. Не создавайте VLAN «про запас» — каждый VLAN добавляет SVI-интерфейс и строчки в ACL.
Router-on-a-stick подходит для малых сетей (до 50-100 устройств) с небольшим inter-VLAN трафиком. L3-коммутатор маршрутизирует аппаратно на скорости коммутации (wire-speed) и не имеет бутылочного горлышка в виде одного trunk-линка. Для сетей свыше 100 устройств или с интенсивным обменом между VLAN (например, доступ к файловому серверу) L3-коммутатор — единственный правильный выбор.
Точка доступа подключается к trunk-порту коммутатора. Каждый SSID маппится на свой VLAN: корпоративный Wi-Fi — VLAN 20 (Staff), гостевой — VLAN 40 (Guest). На точке доступа настраивается тегирование: Corporate SSID → VLAN 20, Guest SSID → VLAN 40. Trunk-порт на коммутаторе разрешает только нужные VLAN: switchport trunk allowed vlan 20,40.
Три меры: 1) Native VLAN на trunk-портах установите в неиспользуемый VLAN (например, 999) — это предотвращает double-tagging атаку. 2) Все неиспользуемые порты переведите в shutdown и в изолированный VLAN. 3) Включите BPDU Guard на access-портах — это блокирует попытки превратить access-порт в trunk через DTP-пакеты. Дополнительно отключите DTP: switchport nonegotiate.
Если в сети есть хотя бы гостевой Wi-Fi или IoT-устройства — да, VLAN необходим для изоляции. Минимальная схема: VLAN 10 — рабочие устройства, VLAN 40 — гости, VLAN 99 — управление. Даже в маленькой сети гостевой трафик должен быть изолирован от корпоративного. Настройка занимает 30 минут, а уровень безопасности возрастает кратно.

Нужна помощь с проектом?

Специалисты АйТи Фреш помогут с архитектурой, DevOps, безопасностью и разработкой — 15+ лет опыта

📞 Связаться с нами
#vlan#802.1q#inter-vlan routing#l3 switch#router-on-a-stick#acl#dhcp relay#mikrotik vlan
Комментарии 0

Оставить комментарий

загрузка...