Как стать автором
Поиск
Написать публикацию
Обновить

S3-WG: Сегментированная Архитектура Site-to-Site VPN на WireGuard: Контроль и Изоляция

Уровень сложностиСредний

Введение

WireGuard представляет собой мощный инструмент для организации виртуальных частных сетей (VPN), отличающийся своей простотой, скоростью и современными криптографическими алгоритмами. Однако, интеграция WireGuard в корпоративную среду требует особого подхода, учитывающего строгий контроль над сетевым трафиком и высокий уровень изоляции различных сегментов инфраструктуры. Настоящий документ описывает архитектуру реализации WireGuard site-to-site VPN, ориентированную на следующие ключевые принципы:

  • Строгая изоляция транспортных и пользовательских сетей друг от друга.

  • Централизованная проверка всего трафика, проходящего через файрволлы.

  • Высокая гибкость масштабирования и прозрачное управление инфраструктурой.

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

Сценарий и требования

Рассмотрим типичный сценарий интеграции двух офисов корпорации, расположенных удаленно друг от друга:

  • Головной офис: сеть пользователей — 10.0.0.0/16.

  • Удаленный офис: сеть пользователей — 192.168.0.0/24.

Основные задачи:

  • Обеспечение безопасной коммуникации между двумя офисами.

  • Весь межофисный трафик должен проходить исключительно через центральные файрволлы (FW1 и FW2), обеспечивающие дополнительный уровень защиты.

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

Требования:

  1. Безопасная связь между офисами.

  2. Весь трафик проходит через центральные фаерволы (FW1, FW2).

  3. Пользовательские сети не имеют доступа к транспортному уровню.


Архитектура: сегментация и изоляция
Трехуровневая модель на P2P-сетях /31:

Сегмент

Назначение

Участники

IP-адреса

Транспорт 1

FW1 ↔ WG1

Головной офис

10.10.1.2/31

Транспорт 2

WG1 ↔ WG2 (туннель)

Защищённый канал

172.16.1.2/31

Транспорт 3

WG2 ↔ FW2

Удалённый офис

192.168.1.2/31

Принцип работы:

  1. Трафик от пользователей проверяется фаерволом FW1.

  2. Шлюз WG1 шифрует данные и передаёт через туннель WG1 ↔ WG2.

  3. В удалённом офисе WG2 расшифровывает трафик.

  4. Фаервол FW2 повторно проверяет данные перед подачей в сеть.

⚠️ Устройства в пользовательских подсетях не имеют прямого доступа к транспортным интерфейсам.


Пример маршрутизации

# FW1 (головной офис)
ip route add 192.168.0.0/24 via 10.10.1.3  # Весь трафик в удалённый офис → WG1

# WG1
ip route add 192.168.0.0/24 via 172.16.1.3  # Трафик в удалённый офис → туннель

# WG2
ip route add 10.0.0.0/16 via 172.16.1.2    # Трафик в головной офис → туннель

# FW2 (удалённый офис)
ip route add 10.0.0.0/16 via 192.168.1.3   # Весь трафик в головной офис → WG2

Преимущества архитектуры

  1. 🔒 Двойная инспекция трафика
    Политики безопасности применяются до и после прохождения туннеля.

  2. 🚧 Полная изоляция сетей
    Пользовательские устройства отделены от транспортной инфраструктуры.

  3. 💡 Меньшая площадь атаки
    Для межузловых соединений используется маска /31, позволяющая минимизировать площадь атаки - исключая широковещание и ограничивая количество доступных IP на интерфейсе ровно до необходимого минимума.

  4. 📋 Чёткое разделение ролей

    • Фаерволы: политики доступа

    • WireGuard: шифрование

    • P2P-сети: связность сегментов

  5. ⚙️ Упрощённая диагностика
    Изолированные компоненты упрощают поиск проблем.

  6. 📈 Масштабируемость
    Поддержка новых офисов и резервных узлов.


Конфигурация WireGuard


wg0.conf для WG1 (головной офис):

[Interface]
PrivateKey = <ключ_WG1>
Address = 172.16.1.2/31
ListenPort = 51820

[Peer]
PublicKey = <ключ_WG2>
AllowedIPs = 172.16.1.3/32   # Только P2P-адрес WG2!
Endpoint = <public_IP_WG2>:51820

wg0.conf для WG2 (удалённый офис):

[Interface]
PrivateKey = <ключ_WG2>
Address = 172.16.1.3/31
ListenPort = 51820

[Peer]
PublicKey = <ключ_WG1>
AllowedIPs = 172.16.1.2/32   # Только P2P-адрес WG1!
Endpoint = <public_IP_WG1>:51820

Дополнение: Защита WireGuard от несанкционированного доступа

Рекомендации по усилению безопасности

Для защиты от сканирования портов и атак типа DDoS критически важно:

  1. Смена стандартного порта WireGuard (51820/UDP)

  2. Ограничение доступа к порту только доверенным IP-адресам


Настройка фаервола (nftables на FW1)

table inet filter {
  chain forward {
    type filter hook forward priority 0;
    
    # Разрешить RELATED/ESTABLISHED
    ct state established,related accept
    
    # Разрешить транзит: головной → удалённый
    ip daddr 192.168.0.0/24 oif "p2p-wg" accept
    
    # Разрешить транзит: удалённый → головной
    ip saddr 192.168.0.0/24 iif "p2p-wg" accept
    
    # Логировать и отбрасывать остальное
    counter log prefix "FW1 DROP: " drop
  }
  
  chain input {
    type filter hook input priority 0;
    
    # Разрешить только служебный трафик
    ip saddr 10.10.1.3 accept    # WG1
    tcp dport {22, 80, 443} accept  # Управление
    
    # Блокировать доступ из пользовательских сетей
    ip saddr 10.0.0.0/16 drop
  }
}

Критические правила безопасности

  1. ✖️ Доступ к сегментам 10.10.0.0/16172.16.0.0/16192.168.1.0/24 из пользовательских сетей запрещён.

  2. ✅ Транзитный трафик разрешён только между 10.0.0.0/16 ↔ 192.168.0.0/24.

  3. ⚠️ IP-форвардинг включён на узлах WireGuard, но:

    • На WG-нодах настроен фаервол, запрещающий любой трафик, кроме транзитного между p2p-wg ↔ wg0.

    • Управляющие порты WireGuard (51820/udp) закрыты для пользовательских сетей.


Поэтапная настройка

  1. Сетевые интерфейсы

    # FW1 (10.10.1.2)
    ip link add p2p-fw type veth peer name p2p-wg
    ip addr add 10.10.1.2/31 dev p2p-fw
    ip link set p2p-fw up
  2. Установка WireGuard

    apt install wireguard
    wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey
    wg-quick up wg0
  3. Создание P2P-сетей

    • FW1 ↔ WG1: 10.10.1.2/31

    • WG1 ↔ WG2: 172.16.1.2/31

    • WG2 ↔ FW2: 192.168.1.2/31

  4. Маршрутизация
    Используйте команды из раздела Пример маршрутизации.

  5. Безопасность

    • Включите строгий фаервол на всех узлах.

    • На WG-нодах:

      sysctl -w net.ipv4.ip_forward=1         # Включить форвардинг
      sysctl -w net.ipv4.conf.all.rp_filter=2  # Защита от спуфинга
  6. Проверка

    # Диагностика туннеля
    wg show
    
    # Проверка связности
    ping -c 4 192.168.0.1 -I 10.0.0.100
    
    # Анализ маршрута
    traceroute -n 192.168.0.100

Сценарии отказа

Событие

Последствия

Восстановление

Сбой WG1

Обрыв связи

VRRP + Keepalived для резервирования

Сбой FW1

Блокировка трафика

Кластер фаерволов в active/passive

Обрыв P2P-линка

Потеря сегмента

BFD + динамическая маршрутизация (BGP)

Отказ WG2

Изоляция удалённого офиса

Резервный канал через 4G/LTE


Заключение: инженерные выводы

Представленная архитектура обеспечивает высочайший уровень безопасности и контроля в корпоративных инфраструктурах, придерживаясь следующих принципов:

  • Безопасность превыше всего. Сегментация и изоляция снижают потенциальные угрозы атакам.

  • Минимальная зона доверия. Применение маленьких сегментов типа /31 сокращает возможные атаки.

  • Упростить диагностику. Благодаря разделению задач на компоненты диагностика становится значительно проще.

  • Масштабируемость. Система поддерживает расширение и интеграцию новых решений, таких как IDS/IPS, централизованное ведение журналов, автоматизацию деплоймента.

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

  • централизованной аутентификации (PKI),

  • автоматизации развертывания (Ansible/Terraform),

  • сбора логов (Loki/Grafana).

Для удобства дальнейших ссылок предлагаю назвать данную архитектуру S3-WGSegmented Secure Site-to-Site на WireGuard. Метод ориентирован на строгую сегментацию сетей, централизованную фильтрацию трафика и эффективное использование IP-пространства.

Лицензия: CC BY 4.0

Автор: iTamako

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.