SSTP Server - SSL VPN через порт 443

SSTP Server - SSL VPN через порт 443

SSTP Server - SSL VPN через порт 443

Обзор

SSTP (Secure Socket Tunneling Protocol) - это проприетарный VPN-протокол, разработанный Microsoft, который обеспечивает передачу PPP-трафика через защищенный SSL/TLS-канал. SSTP является отличным выбором для организаций с строгими ограничениями на файрволах, поскольку использует стандартный HTTPS-порт (TCP 443).

Основные преимущества SSTP

  1. Прохождение через файрволы - использует TCP порт 443 (HTTPS), что позволяет проходить практически через любые корпоративные файрволы и NAT
  2. Надежная безопасность - использует SSL/TLS для аутентификации и шифрования, обеспечивая защиту на транспортном уровне
  3. Совместимость с Windows - встроенная поддержка в Windows Vista и выше без необходимости установки дополнительного ПО
  4. Стабильное соединение - использует TCP, обеспечивая надежную доставку пакетов
  5. Простая настройка - относительно простая конфигурация как на сервере, так и на клиенте

Технические характеристики

  • Протокол транспорта: TCP порт 443
  • Туннелирование: PPP поверх SSL/TLS
  • Шифрование: SSL/TLS (обычно TLS 1.2 или выше)
  • Аутентификация: PAP, CHAP, MSCHAP, MSCHAPv2
  • Поддержка IPv6: Да
  • Backend в VyOS: accel-ppp

Архитектура SSTP

┌─────────────────┐                                  ┌─────────────────┐
│  SSTP Client    │                                  │  SSTP Server    │
│                 │                                  │                 │
│  ┌───────────┐  │  SSL/TLS Handshake (TCP 443)   │  ┌───────────┐  │
│  │    PPP    │  │ ────────────────────────────────> │    PPP    │  │
│  │  Session  │  │                                  │  Session  │  │
│  └─────┬─────┘  │  Encrypted PPP over HTTPS       │  └─────┬─────┘  │
│        │        │ <───────────────────────────────> │        │        │
│  ┌─────▼─────┐  │                                  │  ┌─────▼─────┐  │
│  │ SSL/TLS   │  │  Certificate Validation         │  │ SSL/TLS   │  │
│  │ Transport │  │ ────────────────────────────────> │ Transport │  │
│  └─────┬─────┘  │                                  │  └─────┬─────┘  │
│        │        │                                  │        │        │
│  ┌─────▼─────┐  │  TCP Connection (port 443)      │  ┌─────▼─────┐  │
│  │    TCP    │  │ <───────────────────────────────> │    TCP    │  │
│  │   443     │  │                                  │    443     │  │
│  └───────────┘  │                                  │  └───────────┘  │
└─────────────────┘                                  └─────────────────┘

Сценарии использования

SSTP рекомендуется использовать когда:

  • Необходим доступ через строгие корпоративные файрволы, блокирующие все порты кроме 80 и 443
  • Клиенты используют преимущественно Windows
  • Требуется стабильное VPN-соединение без дополнительного ПО на клиентах Windows
  • Нужна интеграция с существующей PKI-инфраструктурой
  • Критична совместимость с RADIUS для централизованной аутентификации

SSTP НЕ рекомендуется когда:

  • Требуется максимальная производительность (UDP-протоколы быстрее)
  • Большинство клиентов на Linux/macOS (лучше использовать OpenVPN или WireGuard)
  • Критична открытость и аудируемость протокола (SSTP - проприетарный)
  • Нужна поддержка мобильных платформ iOS/Android (лучше IKEv2 или OpenVPN)

Системные требования

Требования к серверу VyOS

  • VyOS 1.3 или выше (рекомендуется 1.4 или 1.5)
  • Минимум 512 MB RAM (1 GB рекомендуется для 50+ одновременных подключений)
  • Доступ к порту TCP 443 из внешней сети
  • Настроенная PKI-инфраструктура или возможность генерации самоподписанных сертификатов

Требования к клиентам

  • Windows: Vista SP1 и выше (встроенный клиент)
  • Linux: sstp-client (требует установки)
  • macOS: нет встроенной поддержки (требуется стороннее ПО)
  • Android/iOS: ограниченная поддержка через сторонние приложения

Сетевые требования

  • Разрешен входящий трафик на TCP порт 443
  • NAT-прозрачность (SSTP работает через NAT)
  • Достаточный пул IP-адресов для VPN-клиентов
  • Настроенная маршрутизация для доступа к внутренним ресурсам

Настройка SSL/TLS сертификатов

SSTP требует наличия SSL/TLS сертификата для защиты соединения. VyOS поддерживает как использование собственной PKI-инфраструктуры, так и импорт внешних сертификатов.

Вариант 1: Использование встроенной PKI VyOS

Шаг 1: Создание собственного Certificate Authority (CA)

# Генерация приватного ключа и сертификата CA
generate pki ca install VPN-CA

# Опционально: просмотр созданного CA
show pki ca VPN-CA

Эта команда создаст:

  • Приватный ключ CA (2048-bit RSA по умолчанию)
  • Самоподписанный сертификат CA
  • Установит их в конфигурацию VyOS

Шаг 2: Генерация серверного сертификата

# Генерация сертификата для SSTP-сервера, подписанного нашим CA
generate pki certificate sign VPN-CA install SSTP-Server

# Опционально: просмотр созданного сертификата
show pki certificate SSTP-Server

Эта команда создаст серверный сертификат, подписанный вашим CA.

Шаг 3: Генерация сертификата с дополнительными параметрами

Для продакшн-окружения рекомендуется указать дополнительные параметры:

# Генерация CA с указанием параметров
generate pki ca install VPN-CA \
  common-name "OpenNix VPN CA" \
  country "RU" \
  state "Moscow" \
  locality "Moscow" \
  organization "OpenNix" \
  organizational-unit "IT Security"

# Генерация серверного сертификата с Subject Alternative Names
generate pki certificate sign VPN-CA install SSTP-Server \
  common-name "vpn.example.com" \
  country "RU" \
  state "Moscow" \
  locality "Moscow" \
  organization "OpenNix" \
  organizational-unit "IT Security" \
  subject-alt-name "vpn.example.com" \
  subject-alt-name "sstp.example.com"

Важно: Subject Alternative Names (SAN) критически важны для современных клиентов, которые проверяют соответствие имени сервера сертификату.

Вариант 2: Импорт существующих сертификатов

Если у вас уже есть сертификаты от коммерческого CA (Let’s Encrypt, Sectigo, DigiCert и т.д.):

# Войти в режим конфигурации
configure

# Импортировать CA сертификат
set pki ca Public-CA certificate "-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKL0UG+mRkmUMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
...
-----END CERTIFICATE-----"

# Импортировать серверный сертификат
set pki certificate SSTP-Server certificate "-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKL0UG+mRkmUMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
...
-----END CERTIFICATE-----"

# Импортировать приватный ключ сертификата
set pki certificate SSTP-Server private key "-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDH...
...
-----END PRIVATE KEY-----"

# Сохранить конфигурацию
commit
save

Вариант 3: Использование Let’s Encrypt

Для публичных VPN-серверов можно использовать бесплатные сертификаты Let’s Encrypt:

# На VyOS установить certbot (в operational mode)
sudo apt update
sudo apt install certbot

# Получить сертификат (убедитесь что порт 80 доступен)
sudo certbot certonly --standalone -d vpn.example.com

# Сертификаты будут сохранены в:
# /etc/letsencrypt/live/vpn.example.com/fullchain.pem
# /etc/letsencrypt/live/vpn.example.com/privkey.pem
# /etc/letsencrypt/live/vpn.example.com/chain.pem

# Импортировать в VyOS PKI
configure

# Импорт цепочки CA
set pki ca LetsEncrypt certificate "$(cat /etc/letsencrypt/live/vpn.example.com/chain.pem)"

# Импорт серверного сертификата
set pki certificate SSTP-Server certificate "$(cat /etc/letsencrypt/live/vpn.example.com/cert.pem)"

# Импорт приватного ключа
set pki certificate SSTP-Server private key "$(cat /etc/letsencrypt/live/vpn.example.com/privkey.pem)"

commit
save

Важно: Сертификаты Let’s Encrypt действительны 90 дней и требуют автоматического обновления.

Проверка установленных сертификатов

# Показать все установленные CA
show pki ca

# Показать все установленные сертификаты
show pki certificate

# Показать детали конкретного сертификата
show pki certificate SSTP-Server

# Проверить срок действия сертификата
show pki certificate SSTP-Server | grep "Valid"

Экспорт CA сертификата для клиентов

Клиенты должны доверять вашему CA (если используете собственную PKI):

# Показать CA сертификат в PEM формате
show pki ca VPN-CA certificate pem

# Сохранить в файл (в operational mode)
show pki ca VPN-CA certificate pem | sudo tee /tmp/vpn-ca.crt

Затем распространите файл /tmp/vpn-ca.crt клиентам для импорта в их хранилища доверенных сертификатов.

Базовая конфигурация SSTP сервера

Минимальная рабочая конфигурация

configure

# Настройка SSL сертификатов
set vpn sstp ssl ca-certificate 'VPN-CA'
set vpn sstp ssl certificate 'SSTP-Server'

# Настройка аутентификации
set vpn sstp authentication mode 'local'
set vpn sstp authentication local-users username 'testuser' password 'SecurePass123!'

# Настройка IP-адресации для клиентов
set vpn sstp client-ip-pool SSTP-POOL range '10.100.0.10-10.100.0.100'
set vpn sstp gateway-address '10.100.0.1'

# Настройка DNS серверов для клиентов
set vpn sstp name-server '8.8.8.8'
set vpn sstp name-server '8.8.4.4'

# Применить конфигурацию
commit
save
exit

После применения конфигурации SSTP сервер будет слушать на порту 443 и готов принимать подключения.

Проверка работы сервера

# Проверить что служба запущена
show vpn sstp-server sessions

# Проверить статус системной службы
sudo systemctl status accel-ppp@sstp

# Проверить что порт слушается
sudo netstat -tlnp | grep 443

Методы аутентификации

Локальная аутентификация

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

Базовая настройка с локальными пользователями

configure

# Включить режим локальной аутентификации
set vpn sstp authentication mode 'local'

# Добавить пользователей
set vpn sstp authentication local-users username 'john' password 'JohnPass123!'
set vpn sstp authentication local-users username 'mary' password 'MarySecure456!'
set vpn sstp authentication local-users username 'admin' password 'AdminP@ssw0rd!'

# Опционально: назначить статический IP конкретному пользователю
set vpn sstp authentication local-users username 'admin' static-ip '10.100.0.10'

# Опционально: ограничить скорость для пользователя
set vpn sstp authentication local-users username 'john' rate-limit download '10000'
set vpn sstp authentication local-users username 'john' rate-limit upload '5000'

commit
save

Протоколы аутентификации PPP

SSTP поддерживает несколько протоколов аутентификации PPP:

configure

# Разрешить только MSCHAPv2 (рекомендуется, наиболее безопасный)
set vpn sstp authentication protocols 'mschap-v2'

# Разрешить MSCHAP и MSCHAPv2
set vpn sstp authentication protocols 'mschap'
set vpn sstp authentication protocols 'mschap-v2'

# Разрешить CHAP (менее безопасный)
set vpn sstp authentication protocols 'chap'

# Разрешить PAP (небезопасный, только для тестирования)
set vpn sstp authentication protocols 'pap'

commit
save

Рекомендации по безопасности:

  • Используйте только mschap-v2 для продакшн-окружений
  • Избегайте pap - пароли передаются открытым текстом
  • chap приемлем, но менее безопасен чем mschap-v2

RADIUS аутентификация

RADIUS позволяет централизованно управлять пользователями и политиками доступа.

Базовая настройка RADIUS

configure

# Включить RADIUS аутентификацию
set vpn sstp authentication mode 'radius'

# Настроить первичный RADIUS сервер
set vpn sstp authentication radius server 192.168.1.10 key 'RadiusSecret123'
set vpn sstp authentication radius server 192.168.1.10 port '1812'

# Настроить резервный RADIUS сервер
set vpn sstp authentication radius server 192.168.1.11 key 'RadiusSecret123'
set vpn sstp authentication radius server 192.168.1.11 port '1812'

# Опционально: настроить таймауты
set vpn sstp authentication radius timeout '5'
set vpn sstp authentication radius acct-timeout '3'

# Опционально: настроить количество попыток
set vpn sstp authentication radius max-try '3'

# Опционально: включить RADIUS accounting
set vpn sstp authentication radius acct-port '1813'

commit
save

RADIUS с динамическими атрибутами

RADIUS может передавать дополнительные параметры для пользователей:

configure

# Разрешить RADIUS серверу назначать IP адреса
set vpn sstp authentication radius dynamic-author server '192.168.1.10'
set vpn sstp authentication radius dynamic-author key 'DynAuthSecret'

# Настроить Source IP для RADIUS запросов
set vpn sstp authentication radius source-address '192.168.1.1'

commit
save

RADIUS атрибуты, поддерживаемые accel-ppp:

  • Framed-IP-Address - статический IP для клиента
  • Framed-Route - маршруты для клиента
  • Framed-IP-Netmask - маска подсети
  • Session-Timeout - максимальное время сессии
  • Idle-Timeout - таймаут неактивности
  • Acct-Interim-Interval - интервал учетных обновлений

Пример конфигурации FreeRADIUS

На стороне FreeRADIUS сервера (/etc/freeradius/3.0/clients.conf):

client vyos-sstp {
    ipaddr = 192.168.1.1
    secret = RadiusSecret123
    shortname = vyos-sstp-server
    nas_type = other
}

Файл пользователей (/etc/freeradius/3.0/users):

john Cleartext-Password := "JohnPass123!"
    Framed-IP-Address = 10.100.0.50,
    Session-Timeout = 28800

mary Cleartext-Password := "MarySecure456!"
    Framed-IP-Address = 10.100.0.51,
    Acct-Interim-Interval = 300

Комбинированная аутентификация

VyOS поддерживает fallback с RADIUS на локальную аутентификацию:

configure

# Первичный метод - RADIUS
set vpn sstp authentication mode 'radius'
set vpn sstp authentication radius server 192.168.1.10 key 'RadiusSecret123'

# Fallback на локальную аутентификацию если RADIUS недоступен
set vpn sstp authentication local-users username 'emergency' password 'EmergencyAccess!'

commit
save

Настройка пулов IP-адресов

IPv4 адресация

Простой диапазон адресов

configure

# Определить пул адресов для клиентов
set vpn sstp client-ip-pool SSTP-POOL range '10.100.0.10-10.100.0.100'

# Указать адрес шлюза (адрес сервера в VPN сети)
set vpn sstp gateway-address '10.100.0.1'

commit
save

Несколько пулов адресов

configure

# Пул для обычных пользователей
set vpn sstp client-ip-pool USERS range '10.100.1.10-10.100.1.100'

# Пул для администраторов
set vpn sstp client-ip-pool ADMINS range '10.100.2.10-10.100.2.20'

# Пул для гостевого доступа
set vpn sstp client-ip-pool GUESTS range '10.100.3.10-10.100.3.50'

# Адрес шлюза
set vpn sstp gateway-address '10.100.0.1'

commit
save

При использовании RADIUS можно назначать пулы динамически через атрибут Framed-Pool.

Использование подсетей вместо диапазонов

configure

# Определить пул через подсеть
set vpn sstp client-ip-pool SUBNET subnet '10.100.10.0/24'

# Адрес шлюза
set vpn sstp gateway-address '10.100.10.1'

commit
save

IPv6 адресация

SSTP полностью поддерживает IPv6 для VPN-клиентов.

Базовая настройка IPv6

configure

# Включить поддержку IPv6
set vpn sstp ppp-options ipv6 'allow'

# Определить IPv6 пул для клиентов
set vpn sstp client-ipv6-pool IPv6-POOL prefix '2001:db8:1000::/48' mask '64'

# Опционально: делегировать префиксы клиентам
set vpn sstp client-ipv6-pool IPv6-POOL delegate '2001:db8:2000::/48' delegation-prefix '56'

commit
save

Эта конфигурация:

  • Назначает каждому клиенту IPv6 адрес из префикса 2001:db8:1000::/48 с маской /64
  • Опционально делегирует клиенту префикс /56 из диапазона 2001:db8:2000::/48

Dual-stack (IPv4 + IPv6)

configure

# IPv4 конфигурация
set vpn sstp client-ip-pool SSTP-V4 range '10.100.0.10-10.100.0.100'
set vpn sstp gateway-address '10.100.0.1'

# IPv6 конфигурация
set vpn sstp ppp-options ipv6 'allow'
set vpn sstp client-ipv6-pool SSTP-V6 prefix '2001:db8:1000::/48' mask '64'

# DNS серверы для обоих протоколов
set vpn sstp name-server '8.8.8.8'
set vpn sstp name-server '2001:4860:4860::8888'

commit
save

Принудительное использование IPv6

configure

# Требовать IPv6 (отклонять клиентов без поддержки IPv6)
set vpn sstp ppp-options ipv6 'require'

# Альтернативно: предпочитать IPv6, но разрешать IPv4
set vpn sstp ppp-options ipv6 'prefer'

commit
save

DNS и WINS серверы

Настройка DNS серверов

configure

# Назначить DNS серверы клиентам
set vpn sstp name-server '8.8.8.8'
set vpn sstp name-server '8.8.4.4'

# Или использовать внутренние DNS серверы
set vpn sstp name-server '192.168.1.10'
set vpn sstp name-server '192.168.1.11'

# IPv6 DNS серверы
set vpn sstp name-server '2001:4860:4860::8888'
set vpn sstp name-server '2001:4860:4860::8844'

commit
save

Настройка WINS серверов

Для сетей с Windows-инфраструктурой:

configure

# Назначить WINS серверы для разрешения NetBIOS имен
set vpn sstp wins-server '192.168.1.100'
set vpn sstp wins-server '192.168.1.101'

commit
save

Дополнительные параметры PPP

MTU и MRU

configure

# Установить MTU для PPP интерфейсов
set vpn sstp ppp-options mtu '1400'

# Установить MRU (Maximum Receive Unit)
set vpn sstp ppp-options mru '1400'

commit
save

Рекомендации:

  • Стандартный MTU для Ethernet: 1500
  • Для SSTP рекомендуется: 1400-1420 (с учетом overhead SSL/TLS и PPP)
  • При проблемах с фрагментацией попробуйте снизить до 1380

LCP параметры

configure

# Настроить интервал LCP echo запросов (секунды)
set vpn sstp ppp-options lcp-echo-interval '30'

# Количество пропущенных echo-ответов до разрыва соединения
set vpn sstp ppp-options lcp-echo-failure '3'

# Таймаут LCP запросов
set vpn sstp ppp-options lcp-echo-timeout '5'

commit
save

LCP (Link Control Protocol) echo используется для обнаружения “мертвых” соединений:

  • lcp-echo-interval: как часто отправлять echo запросы
  • lcp-echo-failure: сколько пропущенных ответов допустимо
  • Соединение будет разорвано через interval × failure секунд без ответов

Disable CCP (Compression Control Protocol)

configure

# Отключить сжатие на PPP уровне (рекомендуется, т.к. SSL/TLS уже сжимает)
set vpn sstp ppp-options disable-ccp

commit
save

IPv6 параметры PPP

configure

# Разрешить IPv6CP (IPv6 Control Protocol)
set vpn sstp ppp-options ipv6 'allow'

# Принудительно требовать IPv6
set vpn sstp ppp-options ipv6 'require'

# Предпочитать IPv6, но разрешать IPv4-only клиентов
set vpn sstp ppp-options ipv6 'prefer'

# Назначить конкретный IPv6 интерфейс-идентификатор серверу
set vpn sstp ppp-options ipv6-intf-id '::1'

# Назначить конкретный IPv6 интерфейс-идентификатор клиентам
set vpn sstp ppp-options ipv6-peer-intf-id '::2'

# Принять любой интерфейс-идентификатор от клиента
set vpn sstp ppp-options ipv6-accept-peer-intf-id

commit
save

Ограничение скорости (Rate Limiting)

Ограничение скорости для конкретных пользователей

configure

# Ограничить скорость для локального пользователя
set vpn sstp authentication local-users username 'john' rate-limit download '20000'
set vpn sstp authentication local-users username 'john' rate-limit upload '10000'

# Значения указываются в Kbps (килобитах в секунду)
# 20000 Kbps = 20 Mbps download
# 10000 Kbps = 10 Mbps upload

commit
save

Ограничение через RADIUS

RADIUS сервер может передавать атрибуты для ограничения скорости. Пример конфигурации на FreeRADIUS:

john Cleartext-Password := "password"
    Filter-Id = "rate-limit=20000/10000"

Где формат: rate-limit=download_kbps/upload_kbps

Глобальное ограничение скорости

Для применения лимитов ко всем пользователям используйте скрипты или настройки на уровне accel-ppp.

Расширенные настройки

Изменение порта прослушивания

По умолчанию SSTP использует порт 443. Для изменения:

configure

# Использовать нестандартный порт (например, 8443)
set vpn sstp port '8443'

commit
save

Примечание: Использование нестандартного порта снижает одно из главных преимуществ SSTP - способность проходить через файрволы.

Максимальное количество клиентов

configure

# Ограничить максимальное количество одновременных подключений
set vpn sstp max-concurrent-sessions '100'

commit
save

Таймауты сессий

configure

# Установить таймаут неактивной сессии (секунды)
set vpn sstp ppp-options session-timeout '3600'

commit
save

Логирование

configure

# Включить детальное логирование
set vpn sstp log level '5'

# Уровни логирования:
# 0 - выключено
# 1 - критические ошибки
# 2 - ошибки
# 3 - предупреждения
# 4 - информация
# 5 - debug (максимальная детализация)

commit
save

Логи доступны через journalctl:

sudo journalctl -u accel-ppp@sstp -f

Extended Scripts (Расширенные скрипты)

VyOS позволяет выполнять пользовательские скрипты при различных событиях:

configure

# Скрипт при установке соединения
set vpn sstp extended-scripts on-up '/config/scripts/sstp-up.sh'

# Скрипт при разрыве соединения
set vpn sstp extended-scripts on-down '/config/scripts/sstp-down.sh'

# Скрипт при изменении сессии
set vpn sstp extended-scripts on-change '/config/scripts/sstp-change.sh'

# Скрипт при аутентификации
set vpn sstp extended-scripts on-pre-up '/config/scripts/sstp-pre-up.sh'

commit
save

Пример скрипта on-up

Создайте файл /config/scripts/sstp-up.sh:

#!/bin/bash
# SSTP on-up script
# Доступные переменные:
# PEERNAME - имя пользователя
# CALLING_SID - IP адрес клиента
# CALLED_SID - IP адрес сервера
# IFNAME - PPP интерфейс (например, ppp0)
# IPLOCAL - локальный IP адрес VPN
# IPREMOTE - удаленный IP адрес VPN

logger "SSTP: User $PEERNAME connected from $CALLING_SID via $IFNAME ($IPREMOTE)"

# Пример: добавить статический маршрут для конкретного пользователя
if [ "$PEERNAME" = "admin" ]; then
    ip route add 192.168.100.0/24 via $IPREMOTE dev $IFNAME
fi

# Пример: отправить уведомление
curl -X POST https://monitoring.example.com/vpn-connect \
    -d "user=$PEERNAME&ip=$CALLING_SID&vpn_ip=$IPREMOTE"

Не забудьте сделать скрипт исполняемым:

sudo chmod +x /config/scripts/sstp-up.sh

SNMP мониторинг

configure

# Включить SNMP для мониторинга SSTP
set vpn sstp snmp master-agent

commit
save

После включения SNMP можно мониторить:

  • Количество активных сессий
  • Статистику трафика
  • Информацию о подключенных пользователях

Примеры конфигураций для облачных провайдеров

Пример 1: SSTP VPN на Yandex Cloud для обхода строгих файрволов

Сценарий: Компания имеет удаленных сотрудников, работающих из локаций с очень строгими корпоративными файрволами, которые блокируют все порты кроме 80 и 443. SSTP - идеальное решение, так как использует стандартный HTTPS порт.

Топология

┌────────────────────────────────────────────────────────────────┐
│                      Yandex Cloud                              │
│  ┌──────────────────────────────────────────────────────────┐  │
│  │ VPC: 10.128.0.0/16                                       │  │
│  │                                                          │  │
│  │  ┌─────────────────────┐      ┌──────────────────────┐  │  │
│  │  │  VyOS SSTP Server   │      │  Internal Resources  │  │  │
│  │  │  eth0: 51.250.X.X   │──────│  Web: 10.128.1.10    │  │  │
│  │  │  eth1: 10.128.0.10  │      │  DB:  10.128.1.20    │  │  │
│  │  │  SSTP: 10.100.0.1   │      │  App: 10.128.1.30    │  │  │
│  │  └─────────────────────┘      └──────────────────────┘  │  │
│  └──────────────────────────────────────────────────────────┘  │
└────────────────────────────────────────────────────────────────┘
                         ▲
                         │ SSTP (TCP 443)
                         │
              ┌──────────┴──────────┐
              │                     │
         ┌────▼──────┐      ┌──────▼────┐
         │  Windows  │      │  Windows  │
         │  Client 1 │      │  Client 2 │
         │  (Office) │      │  (Home)   │
         └───────────┘      └───────────┘

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

configure

# Интерфейсы
set interfaces ethernet eth0 address 'dhcp'
set interfaces ethernet eth0 description 'WAN - Yandex Cloud'

set interfaces ethernet eth1 address '10.128.0.10/24'
set interfaces ethernet eth1 description 'LAN - Internal Network'

# NAT для VPN клиентов
set nat source rule 100 outbound-interface 'eth1'
set nat source rule 100 source address '10.100.0.0/24'
set nat source rule 100 translation address 'masquerade'

# PKI - генерация сертификатов
# (выполнить перед configure)
# generate pki ca install SSTP-CA common-name "Yandex Cloud VPN CA"
# generate pki certificate sign SSTP-CA install SSTP-Server common-name "vpn.company.ru"

# SSTP конфигурация
set vpn sstp ssl ca-certificate 'SSTP-CA'
set vpn sstp ssl certificate 'SSTP-Server'

# Аутентификация через RADIUS (интеграция с Active Directory)
set vpn sstp authentication mode 'radius'
set vpn sstp authentication radius server 10.128.1.50 key 'YandexCloudRadiusSecret2025'
set vpn sstp authentication radius server 10.128.1.50 port '1812'
set vpn sstp authentication radius server 10.128.1.51 key 'YandexCloudRadiusSecret2025'
set vpn sstp authentication radius timeout '10'

# Backup локальная аутентификация
set vpn sstp authentication local-users username 'admin' password 'EmergencyAccess2025!'
set vpn sstp authentication local-users username 'admin' static-ip '10.100.0.5'

# IP пулы
set vpn sstp client-ip-pool VPN-USERS range '10.100.0.10-10.100.0.100'
set vpn sstp gateway-address '10.100.0.1'

# DNS серверы (внутренние корпоративные DNS)
set vpn sstp name-server '10.128.1.10'
set vpn sstp name-server '10.128.1.11'

# WINS для доступа к внутренним Windows ресурсам
set vpn sstp wins-server '10.128.1.50'

# PPP параметры оптимизированные для SSTP
set vpn sstp ppp-options mtu '1400'
set vpn sstp ppp-options lcp-echo-interval '30'
set vpn sstp ppp-options lcp-echo-failure '3'
set vpn sstp ppp-options disable-ccp

# Протоколы аутентификации (только безопасные)
set vpn sstp authentication protocols 'mschap-v2'

# Логирование
set vpn sstp log level '4'

# Файрвол для SSTP
set firewall name WAN_LOCAL rule 100 action 'accept'
set firewall name WAN_LOCAL rule 100 protocol 'tcp'
set firewall name WAN_LOCAL rule 100 destination port '443'
set firewall name WAN_LOCAL rule 100 description 'Allow SSTP VPN'

set firewall interface eth0 local name 'WAN_LOCAL'

# Маршрутизация для VPN клиентов
set protocols static route 10.128.1.0/24 next-hop 10.128.0.1

# SNMP для мониторинга
set vpn sstp snmp master-agent

commit
save
exit

Настройка Windows клиента

На компьютере пользователя (Windows 10/11):

  1. Импорт CA сертификата:

    • Скопировать файл vpn-ca.crt на компьютер
    • Двойной клик → “Установить сертификат”
    • “Локальный компьютер” → “Поместить все сертификаты в следующее хранилище”
    • “Доверенные корневые центры сертификации”
  2. Создание VPN подключения:

    • Параметры → Сеть и Интернет → VPN → “Добавить VPN-подключение”
    • Поставщик VPN: Windows (встроенный)
    • Название подключения: “Yandex Cloud Office VPN”
    • Имя или адрес сервера: vpn.company.ru (или 51.250.X.X)
    • Тип VPN: “Secure Socket Tunneling Protocol (SSTP)”
    • Тип данных для входа: “Имя пользователя и пароль”
    • Сохранить
  3. Подключение:

    • Кликнуть на созданное VPN подключение
    • Ввести учетные данные RADIUS (AD username/password)
    • Нажать “Подключиться”

Скрипт автоматического мониторинга

Создать /config/scripts/sstp-monitor.sh:

#!/bin/bash
# SSTP monitoring script for Yandex Cloud

WEBHOOK_URL="https://monitoring.company.ru/api/vpn/events"

# Функция отправки метрик
send_metric() {
    local metric_name=$1
    local metric_value=$2

    curl -s -X POST "$WEBHOOK_URL" \
        -H "Content-Type: application/json" \
        -d "{\"metric\":\"$metric_name\",\"value\":$metric_value,\"timestamp\":$(date +%s)}"
}

# Получить количество активных сессий
active_sessions=$(cli-shell-api showCfg | grep -c "ppp")

# Отправить метрику
send_metric "sstp_active_sessions" "$active_sessions"

Добавить в cron:

set system task-scheduler task monitor-sstp executable path '/config/scripts/sstp-monitor.sh'
set system task-scheduler task monitor-sstp interval '5m'

Пример 2: SSTP VPN на VK Cloud для корпоративного доступа

Сценарий: Средний бизнес размещает инфраструктуру в VK Cloud и нуждается в безопасном удаленном доступе для сотрудников. Используется интеграция с корпоративным FreeRADIUS и динамическое назначение ресурсов.

Топология

┌─────────────────────────────────────────────────────────────────┐
│                         VK Cloud                                │
│  ┌───────────────────────────────────────────────────────────┐  │
│  │ Private Network: 192.168.0.0/16                           │  │
│  │                                                           │  │
│  │  ┌──────────────────┐    ┌──────────────────────────┐    │  │
│  │  │  VyOS Gateway    │    │   FreeRADIUS Server      │    │  │
│  │  │  Ext: 95.X.X.X   │────│   192.168.0.50           │    │  │
│  │  │  Int: 192.168.0.1│    │   (AD integration)       │    │  │
│  │  │  VPN: 10.50.0.1  │    └──────────────────────────┘    │  │
│  │  └──────────────────┘                                     │  │
│  │         │                                                 │  │
│  │         │                                                 │  │
│  │  ┌──────▼───────────────────────────────────────────┐    │  │
│  │  │        Corporate Network Segments                │    │  │
│  │  │  - Management:   192.168.10.0/24                 │    │  │
│  │  │  - Servers:      192.168.20.0/24                 │    │  │
│  │  │  - Workstations: 192.168.30.0/24                 │    │  │
│  │  │  - DMZ:          192.168.100.0/24                │    │  │
│  │  └──────────────────────────────────────────────────┘    │  │
│  └───────────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────────┘

Конфигурация VyOS на VK Cloud

configure

# Интерфейсы
set interfaces ethernet eth0 address 'dhcp'
set interfaces ethernet eth0 description 'WAN - VK Cloud External'

set interfaces ethernet eth1 address '192.168.0.1/16'
set interfaces ethernet eth1 description 'LAN - Corporate Network'

# PKI - используем Let's Encrypt для публичного домена
# (предварительно получен сертификат через certbot)
set pki ca LetsEncrypt certificate "-----BEGIN CERTIFICATE-----
[Let's Encrypt Chain Certificate]
-----END CERTIFICATE-----"

set pki certificate SSTP-VKCloud certificate "-----BEGIN CERTIFICATE-----
[Server Certificate for vpn.company.cloud]
-----END CERTIFICATE-----"

set pki certificate SSTP-VKCloud private key "-----BEGIN PRIVATE KEY-----
[Private Key]
-----END PRIVATE KEY-----"

# SSTP сервер
set vpn sstp ssl ca-certificate 'LetsEncrypt'
set vpn sstp ssl certificate 'SSTP-VKCloud'

# RADIUS аутентификация с FreeRADIUS
set vpn sstp authentication mode 'radius'
set vpn sstp authentication radius server 192.168.0.50 key 'VKCloudRadius2025Secret'
set vpn sstp authentication radius server 192.168.0.50 port '1812'
set vpn sstp authentication radius server 192.168.0.50 acct-port '1813'
set vpn sstp authentication radius timeout '5'
set vpn sstp authentication radius acct-timeout '3'
set vpn sstp authentication radius max-try '3'

# Динамическая авторизация для изменения параметров сессии
set vpn sstp authentication radius dynamic-author server '192.168.0.50'
set vpn sstp authentication radius dynamic-author key 'DynamicAuthKey2025'

# IP пулы для разных групп пользователей
set vpn sstp client-ip-pool ADMINS range '10.50.1.10-10.50.1.30'
set vpn sstp client-ip-pool EMPLOYEES range '10.50.2.10-10.50.2.100'
set vpn sstp client-ip-pool CONTRACTORS range '10.50.3.10-10.50.3.50'

set vpn sstp gateway-address '10.50.0.1'

# DNS серверы (внутренние)
set vpn sstp name-server '192.168.0.10'
set vpn sstp name-server '192.168.0.11'

# PPP параметры
set vpn sstp ppp-options mtu '1420'
set vpn sstp ppp-options lcp-echo-interval '30'
set vpn sstp ppp-options lcp-echo-failure '4'
set vpn sstp ppp-options disable-ccp

# Безопасная аутентификация
set vpn sstp authentication protocols 'mschap-v2'

# Расширенные скрипты для логирования и интеграции
set vpn sstp extended-scripts on-up '/config/scripts/sstp-on-up.sh'
set vpn sstp extended-scripts on-down '/config/scripts/sstp-on-down.sh'

# Файрвол
set firewall name WAN_LOCAL rule 110 action 'accept'
set firewall name WAN_LOCAL rule 110 protocol 'tcp'
set firewall name WAN_LOCAL rule 110 destination port '443'
set firewall name WAN_LOCAL rule 110 description 'SSTP VPN'
set firewall name WAN_LOCAL rule 110 recent count '4'
set firewall name WAN_LOCAL rule 110 recent time 'minute'
set firewall name WAN_LOCAL rule 110 state new 'enable'

set firewall interface eth0 local name 'WAN_LOCAL'

# NAT для VPN клиентов
set nat source rule 200 outbound-interface 'eth1'
set nat source rule 200 source address '10.50.0.0/16'
set nat source rule 200 translation address 'masquerade'

# Маршрутизация
set protocols static route 192.168.0.0/16 next-hop 192.168.0.1

# SNMP
set vpn sstp snmp master-agent

# Системное логирование
set system syslog global facility all level 'info'
set system syslog host 192.168.0.60 facility all level 'info'
set system syslog host 192.168.0.60 port '514'

commit
save
exit

Конфигурация FreeRADIUS для групповой политики

Файл /etc/freeradius/3.0/mods-config/files/authorize:

# Администраторы - полный доступ, высокая скорость
DEFAULT Group == "VPN-Admins", Auth-Type := LDAP
    Framed-Pool = "ADMINS",
    Framed-IP-Netmask = 255.255.255.0,
    Framed-Route = "192.168.0.0/16 192.168.0.1",
    Session-Timeout = 43200,
    Idle-Timeout = 1800

# Сотрудники - стандартный доступ, средняя скорость
DEFAULT Group == "VPN-Employees", Auth-Type := LDAP
    Framed-Pool = "EMPLOYEES",
    Framed-IP-Netmask = 255.255.255.0,
    Framed-Route = "192.168.20.0/24 192.168.0.1",
    Framed-Route = "192.168.30.0/24 192.168.0.1",
    Session-Timeout = 28800,
    Idle-Timeout = 900,
    Filter-Id = "rate-limit=50000/25000"

# Подрядчики - ограниченный доступ, низкая скорость
DEFAULT Group == "VPN-Contractors", Auth-Type := LDAP
    Framed-Pool = "CONTRACTORS",
    Framed-IP-Netmask = 255.255.255.0,
    Framed-Route = "192.168.100.0/24 192.168.0.1",
    Session-Timeout = 14400,
    Idle-Timeout = 600,
    Filter-Id = "rate-limit=10000/5000"

Скрипт on-up для интеграции с системами мониторинга

Создать /config/scripts/sstp-on-up.sh:

#!/bin/bash
# SSTP on-up integration script for VK Cloud

# Переменные окружения от accel-ppp:
# PEERNAME, CALLING_SID, IFNAME, IPLOCAL, IPREMOTE

# Логирование в syslog
logger -t sstp-auth "User $PEERNAME connected from $CALLING_SID, assigned IP $IPREMOTE via $IFNAME"

# Отправка события в систему мониторинга
curl -s -X POST "http://192.168.0.60:9200/vpn-events/_doc" \
    -H "Content-Type: application/json" \
    -d "{
        \"timestamp\": \"$(date -Iseconds)\",
        \"event_type\": \"vpn_connect\",
        \"username\": \"$PEERNAME\",
        \"source_ip\": \"$CALLING_SID\",
        \"vpn_ip\": \"$IPREMOTE\",
        \"interface\": \"$IFNAME\"
    }"

# Обновление таблицы активных VPN сессий в БД
psql -h 192.168.0.70 -U vpnmonitor -d monitoring -c \
    "INSERT INTO active_vpn_sessions (username, source_ip, vpn_ip, interface, connected_at)
     VALUES ('$PEERNAME', '$CALLING_SID', '$IPREMOTE', '$IFNAME', NOW())"

# Проверка пользователя в whitelist и применение дополнительных политик
if grep -q "^$PEERNAME$" /config/scripts/vpn-privileged-users.txt; then
    # Добавить доступ к management подсети для привилегированных пользователей
    ip route add 192.168.10.0/24 via $IPREMOTE dev $IFNAME
    logger -t sstp-auth "Privileged access granted to $PEERNAME"
fi

Скрипт on-down для очистки

Создать /config/scripts/sstp-on-down.sh:

#!/bin/bash
# SSTP on-down cleanup script

logger -t sstp-auth "User $PEERNAME disconnected from $CALLING_SID, IP $IPREMOTE"

# Удаление из БД активных сессий
psql -h 192.168.0.70 -U vpnmonitor -d monitoring -c \
    "DELETE FROM active_vpn_sessions WHERE username='$PEERNAME' AND vpn_ip='$IPREMOTE'"

# Отправка события в мониторинг
curl -s -X POST "http://192.168.0.60:9200/vpn-events/_doc" \
    -H "Content-Type: application/json" \
    -d "{
        \"timestamp\": \"$(date -Iseconds)\",
        \"event_type\": \"vpn_disconnect\",
        \"username\": \"$PEERNAME\",
        \"source_ip\": \"$CALLING_SID\",
        \"vpn_ip\": \"$IPREMOTE\"
    }"

Сделать скрипты исполняемыми:

sudo chmod +x /config/scripts/sstp-on-up.sh
sudo chmod +x /config/scripts/sstp-on-down.sh

Мониторинг и управление

Просмотр активных сессий

# Показать все активные SSTP сессии
show vpn sstp-server sessions

# Пример вывода:
# ifname | username | ip            | calling-sid     | rate-limit | type | comp | state    | uptime
# -------+----------+---------------+-----------------+------------+------+------+----------+----------
# ppp0   | john     | 10.100.0.10   | 203.0.113.45    |            | sstp |      | active   | 00:15:32
# ppp1   | mary     | 10.100.0.11   | 198.51.100.22   | 20000/10000| sstp |      | active   | 01:05:18
# ppp2   | admin    | 10.100.0.5    | 192.0.2.100     |            | sstp |      | active   | 02:30:45

Статистика сервера

# Показать общую статистику SSTP сервера
show vpn sstp-server statistics

# Пример вывода:
# uptime: 5d 12h 30m
# cpu: 2%
# mem(rss/virt): 45M/120M
# core:
#   mempool_allocated: 512Kb
#   mempool_available: 256Kb
#   thread_count: 4
#   thread_active: 1
#   context_count: 3
#   context_sleeping: 0
#   context_pending: 0
#   md_handler_count: 3
#   md_handler_pending: 0
# sessions:
#   starting: 0
#   active: 3
#   finishing: 0

Принудительное отключение пользователя

# Отключить конкретную сессию по интерфейсу
sudo pkill -f "ppp0"

# Или использовать accel-cmd (если доступен)
sudo accel-cmd terminate if ppp0

# Отключить по имени пользователя
sudo accel-cmd terminate username john

Просмотр детальной информации о сессии

# Информация о PPP интерфейсах
show interfaces ppp

# Детали конкретного интерфейса
show interfaces ppp ppp0

# Статистика трафика
show interfaces ppp ppp0 statistics

Диагностика и устранение проблем

Проверка состояния службы

# Проверить статус accel-ppp SSTP
sudo systemctl status accel-ppp@sstp

# Рестарт службы
sudo systemctl restart accel-ppp@sstp

# Остановка/запуск
sudo systemctl stop accel-ppp@sstp
sudo systemctl start accel-ppp@sstp

Просмотр логов

# Логи SSTP сервера в реальном времени
sudo journalctl -u accel-ppp@sstp -f

# Логи за последние 100 строк
sudo journalctl -u accel-ppp@sstp -n 100

# Логи за текущую загрузку
sudo journalctl -u accel-ppp@sstp -b 0

# Логи с конкретного времени
sudo journalctl -u accel-ppp@sstp --since "2025-01-15 10:00:00"

# Логи за конкретный период
sudo journalctl -u accel-ppp@sstp --since "2025-01-15 10:00:00" --until "2025-01-15 12:00:00"

# Фильтрация по уровню важности
sudo journalctl -u accel-ppp@sstp -p err

# Экспорт логов в файл
sudo journalctl -u accel-ppp@sstp > /tmp/sstp-logs.txt

Типичные проблемы и решения

Проблема 1: Клиент не может подключиться - ошибка сертификата

Симптомы:

  • Windows клиент выдает ошибку “The remote connection was not made because the attempted VPN tunnels failed”
  • В логах: “SSL handshake failed”

Решение:

# 1. Проверить что сертификат корректно установлен
show pki certificate SSTP-Server

# 2. Убедиться что Common Name или SAN соответствует адресу сервера
# 3. Проверить срок действия сертификата
show pki certificate SSTP-Server | grep Valid

# 4. Экспортировать CA сертификат для клиента
show pki ca VPN-CA certificate pem

# 5. Клиент должен установить CA сертификат в доверенные

Проблема 2: Подключение устанавливается, но нет доступа к внутренним ресурсам

Симптомы:

  • VPN подключение показывает “Connected”
  • Ping до gateway (10.100.0.1) работает
  • Ping до внутренних ресурсов не работает

Решение:

# 1. Проверить NAT правила
show nat source rules

# 2. Проверить маршрутизацию
show ip route

# 3. Проверить файрвол правила
show firewall

# 4. Убедиться что IP forwarding включен (должен быть включен по умолчанию)
sysctl net.ipv4.ip_forward
# Должно быть: net.ipv4.ip_forward = 1

# 5. Проверить что клиенту назначены правильные маршруты
# На клиенте Windows: route print

Проблема 3: RADIUS аутентификация не работает

Симптомы:

  • В логах: “RADIUS server not responding” или “RADIUS authentication failed”
  • Локальные пользователи подключаются нормально

Решение:

# 1. Проверить доступность RADIUS сервера
ping 192.168.1.10

# 2. Проверить порты RADIUS
sudo nmap -p 1812,1813 192.168.1.10

# 3. Тест RADIUS через radtest (установить freeradius-utils)
sudo apt install freeradius-utils
radtest john password123 192.168.1.10 1812 RadiusSecret123

# 4. Проверить конфигурацию RADIUS в VyOS
show vpn sstp authentication radius

# 5. Проверить логи RADIUS сервера
# На FreeRADIUS сервере:
sudo journalctl -u freeradius -f

# 6. Включить debug режим на RADIUS (временно)
# На FreeRADIUS: sudo freeradius -X

Проблема 4: Низкая производительность VPN

Симптомы:

  • Медленная скорость передачи данных
  • Высокая задержка (latency)

Решение:

# 1. Проверить MTU настройки
show vpn sstp ppp-options

# 2. Попробовать разные значения MTU
configure
set vpn sstp ppp-options mtu 1380
commit
save

# 3. Отключить compression (если включен)
set vpn sstp ppp-options disable-ccp
commit

# 4. Проверить нагрузку на сервер
show system resources

# 5. Проверить bandwidth ограничения
show vpn sstp authentication local-users

# 6. Проверить сетевые интерфейсы
show interfaces ethernet
show interfaces ethernet eth0 statistics

# 7. Тест пропускной способности (на клиенте)
# Windows: Test-NetConnection -ComputerName 10.100.0.1 -DiagnoseRouting

Проблема 5: Сессии зависают (stale sessions)

Симптомы:

  • Пользователь показывается как подключенный, но не может передавать данные
  • Переподключение невозможно из-за существующей сессии

Решение:

# 1. Проверить LCP echo параметры
show vpn sstp ppp-options

# 2. Настроить более агрессивное определение мертвых сессий
configure
set vpn sstp ppp-options lcp-echo-interval 15
set vpn sstp ppp-options lcp-echo-failure 3
commit
save

# 3. Принудительно завершить зависшие сессии
sudo accel-cmd terminate username john

# 4. Перезапустить службу (крайняя мера)
sudo systemctl restart accel-ppp@sstp

Проблема 6: Порт 443 уже используется

Симптомы:

  • Служба accel-ppp@sstp не запускается
  • В логах: “bind: Address already in use”

Решение:

# 1. Проверить что слушает на порту 443
sudo netstat -tlnp | grep :443
# или
sudo lsof -i :443

# 2. Если это веб-сервер (nginx, apache), переместить HTTPS на другой порт
# Или настроить SSTP на другой порт
configure
set vpn sstp port 8443
commit
save

# 3. Обновить файрвол для нового порта
set firewall name WAN_LOCAL rule 110 destination port '8443'
commit

# ВАЖНО: Клиенты должны будут указывать vpn.example.com:8443

Инструменты диагностики

Проверка SSL/TLS соединения

# Тест SSL соединения с сервера
openssl s_client -connect localhost:443 -showcerts

# Тест SSL соединения извне
openssl s_client -connect vpn.example.com:443 -showcerts

# Проверка сертификата
echo | openssl s_client -connect vpn.example.com:443 2>/dev/null | openssl x509 -noout -text

Захват трафика для анализа

# Захват SSTP трафика на WAN интерфейсе
sudo tcpdump -i eth0 -w /tmp/sstp-traffic.pcap port 443

# Захват PPP трафика
sudo tcpdump -i ppp0 -w /tmp/ppp-traffic.pcap

# Анализ в реальном времени
sudo tcpdump -i eth0 -n port 443 -v

Мониторинг системных ресурсов

# Использование CPU и памяти accel-ppp
ps aux | grep accel-ppp

# Детальная статистика процесса
top -p $(pидof accel-ppp)

# Системные ресурсы VyOS
show system resources

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

1. Использование надежных сертификатов

# Всегда используйте сертификаты от доверенных CA для продакшн
# Избегайте самоподписанных сертификатов для публичных VPN
# Регулярно обновляйте сертификаты (Let's Encrypt - каждые 60 дней)

# Используйте сильные ключи (минимум 2048-bit RSA или ECC)
generate pki ca install VPN-CA key-size 4096

# Добавляйте Subject Alternative Names
generate pki certificate sign VPN-CA install SSTP-Server \
    subject-alt-name "vpn.example.com" \
    subject-alt-name "sstp.example.com"

2. Безопасная аутентификация

configure

# Используйте только MSCHAPv2
set vpn sstp authentication protocols 'mschap-v2'

# Избегайте PAP и CHAP
delete vpn sstp authentication protocols 'pap'
delete vpn sstp authentication protocols 'chap'

# Интегрируйтесь с RADIUS/AD для централизованного управления
set vpn sstp authentication mode 'radius'

# Включите accounting для аудита
set vpn sstp authentication radius acct-port '1813'

commit
save

3. Ограничение доступа

configure

# Ограничьте количество одновременных подключений
set vpn sstp max-concurrent-sessions '50'

# Используйте таймауты сессий
set vpn sstp ppp-options session-timeout '28800'  # 8 часов

# Файрвол с rate limiting против brute-force
set firewall name WAN_LOCAL rule 110 recent count '5'
set firewall name WAN_LOCAL rule 110 recent time 'minute'

# Географическая фильтрация (если применимо)
# set firewall name WAN_LOCAL rule 110 source geoip country-code 'RU'

commit
save

4. Сегментация сети

configure

# Используйте отдельные IP подсети для VPN
set vpn sstp client-ip-pool VPN range '10.100.0.0-10.100.255.254'

# Применяйте файрвол правила для VPN трафика
set firewall name VPN_TO_LAN default-action 'drop'
set firewall name VPN_TO_LAN rule 10 action 'accept'
set firewall name VPN_TO_LAN rule 10 state established 'enable'
set firewall name VPN_TO_LAN rule 10 state related 'enable'

set firewall name VPN_TO_LAN rule 20 action 'accept'
set firewall name VPN_TO_LAN rule 20 destination address '192.168.1.0/24'
set firewall name VPN_TO_LAN rule 20 protocol 'tcp'
set firewall name VPN_TO_LAN rule 20 destination port '80,443'

# Запретить доступ к management подсети
set firewall name VPN_TO_LAN rule 100 action 'drop'
set firewall name VPN_TO_LAN rule 100 destination address '192.168.0.0/24'
set firewall name VPN_TO_LAN rule 100 log 'enable'

commit
save

5. Мониторинг и логирование

configure

# Включите подробное логирование
set vpn sstp log level '4'

# Отправляйте логи на централизованный syslog сервер
set system syslog host 192.168.1.100 facility all level 'info'
set system syslog host 192.168.1.100 port '514'

# Включите SNMP для мониторинга
set vpn sstp snmp master-agent

# Используйте extended scripts для аудита
set vpn sstp extended-scripts on-up '/config/scripts/sstp-audit.sh'

commit
save

6. Регулярное обновление

# Регулярно обновляйте VyOS
add system image <new-version-url>
show system image
set system image default-boot <new-version>
reboot

# Мониторьте уязвимости accel-ppp
# https://github.com/accel-ppp/accel-ppp/security/advisories

# Автоматически обновляйте сертификаты Let's Encrypt
# Создайте cron задачу для certbot renew

7. Disaster Recovery

# Регулярно создавайте бэкапы конфигурации
save /config/backup-$(date +%Y%m%d).config

# Экспортируйте PKI сертификаты
show pki ca VPN-CA certificate pem > /tmp/ca-backup.pem
show pki certificate SSTP-Server certificate pem > /tmp/cert-backup.pem

# Документируйте конфигурацию
show configuration commands > /tmp/vyos-config-backup.txt

8. Защита от DDoS

configure

# SYN flood защита на уровне системы
set firewall syn-flood protection enable

# Ограничение новых соединений
set firewall name WAN_LOCAL rule 110 protocol 'tcp'
set firewall name WAN_LOCAL rule 110 destination port '443'
set firewall name WAN_LOCAL rule 110 connection-limit limit '20'
set firewall name WAN_LOCAL rule 110 connection-limit rate 'minute'

# Connection tracking
set system conntrack expect-table-size '2048'
set system conntrack hash-size '32768'
set system conntrack table-size '262144'

commit
save

Best Practices

Планирование емкости

  1. Расчет необходимых ресурсов:

    • RAM: 100-200 MB на 100 одновременных подключений
    • CPU: 1 core на 50-100 подключений (зависит от трафика)
    • Bandwidth: планируйте с запасом 30-50%
    • IP адреса: количество пользователей + 20% резерв
  2. Масштабирование:

    • До 100 пользователей: одна VyOS VM (2 vCPU, 2GB RAM)
    • 100-500 пользователей: VyOS VM (4 vCPU, 4-8GB RAM)
    • 500+ пользователей: рассмотрите load balancing

Документирование

# Всегда добавляйте описания к конфигурации
configure
set vpn sstp description 'SSTP VPN Server for remote employees'
set vpn sstp client-ip-pool EMPLOYEES description 'IP pool for regular employees'
set firewall name WAN_LOCAL rule 110 description 'Allow SSTP VPN from Internet'
commit

Тестирование

  1. Перед деплоем в продакшн:

    • Протестируйте с разных типов клиентов (Windows 10, 11, Server)
    • Проверьте работу через различные файрволы
    • Нагрузочное тестирование с ожидаемым количеством пользователей
    • Failover сценарии (отказ RADIUS, переполнение IP пула)
  2. Регулярные проверки:

    • Еженедельно проверяйте логи на ошибки
    • Ежемесячно тестируйте процедуры восстановления
    • Ежеквартально обновляйте сертификаты и патчи

Change Management

# Всегда создавайте бэкап перед изменениями
configure
save /config/backup-before-change-$(date +%Y%m%d-%H%M).config

# Вносите изменения
# ... ваши изменения ...

commit
# Проверьте что все работает
# Если есть проблемы:
rollback 1

# Если все в порядке:
save

Заключение

SSTP VPN на VyOS предоставляет надежное и безопасное решение для удаленного доступа, особенно в средах с ограничительными файрволами. Использование стандартного HTTPS порта (443) обеспечивает максимальную совместимость и проходимость через NAT и файрволы.

Ключевые преимущества

  • Простота развертывания и управления
  • Встроенная поддержка в Windows без дополнительного ПО
  • Надежная безопасность через SSL/TLS
  • Гибкая интеграция с RADIUS и Active Directory
  • Подходит для корпоративных и облачных развертываний

Когда использовать SSTP

  • Удаленные сотрудники за строгими корпоративными файрволами
  • Windows-ориентированные организации
  • Необходима простая настройка на стороне клиента
  • Требуется совместимость с существующей PKI инфраструктурой

Альтернативы

Рассмотрите другие VPN протоколы если:

  • WireGuard: нужна максимальная производительность и современный протокол
  • OpenVPN: требуется поддержка всех платформ и открытый протокол
  • IKEv2/IPsec: нужна встроенная поддержка мобильных устройств (iOS/Android)
  • L2TP/IPsec: требуется совместимость с legacy системами

Дополнительные ресурсы


Документ подготовлен: 2025-01-15 Версия: 1.0 Совместимость: VyOS 1.3.x, 1.4.x, 1.5.x Автор: OpenNix Team