Защита OpenVPN сервера: настройка tls-auth и tls-crypt от атак и сканеров
Уязвимость открытого порта OpenVPN
Когда OpenVPN сервер слушает интернет на стандартном порту UDP 1194, автоматические сканеры портов (Shodan, Masscan) непрерывно отправляют TLS-запросы инициации соединения. Сервер тратит ценные ресурсы CPU на генерацию криптографических ответов и валидацию handshake, что делает его уязвимым для атак отказа в обслуживании (DoS/DDoS) и уязвимостей в библиотеке OpenSSL.
Сравнение механизмов защиты tls-auth и tls-crypt
| Функция безопасности | tls-auth (Классический) | tls-crypt (Современный стандарт) |
|---|---|---|
| Защита от сканирования портов | Да (Скрывает порт от чужих пакетов) | Да (Сервер полностью невидим для сканеров) |
| Подпись пакетов рукопожатия (HMAC) | Да (Аутентификация пакетов) | Да |
| Шифрование управляющих заголовков TLS | НЕТ (Заголовки и сертификаты видны DPI) | ДА (Полное шифрование инициации сессии) |
| Маскировка от провайдерских DPI | Низкая | Высокая (DPI видит только случайный мусор) |
Пошаговая настройка современного режима tls-crypt
- Генерация общего статического ключа подписи/шифрования:
На сервере OpenVPN выполните команду создания ключа:
openvpn --genkey secret tls-crypt.key - Настройка конфигурации сервера (server.conf):
Добавьте директиву
tls-cryptв файл конфигурации сервера:# Отключаем устаревший tls-auth, если был включен: ;tls-auth ta.key 0 # Включаем современный режим tls-crypt: tls-crypt /etc/openvpn/server/tls-crypt.key - Настройка клиентского конфигурационного файла (.ovpn):
Вставьте содержимое сгенерированного ключа прямо внутрь клиентского профиля в виде инлайн-блока:
<tls-crypt> -----BEGIN OpenVPN Static key V1----- ЗДЕСЬ_ВАШ_СГЕНЕРИРОВАННЫЙ_ХЭШ_КЛЮЧА_TLS_CRYPT -----END OpenVPN Static key V1----- </tls-crypt> - Перезапуск сервера OpenVPN:
sudo systemctl restart openvpn-server@server
Как работает защита: Если входящий пакет не подписан корректным ключом tls-crypt.key, демон OpenVPN отбрасывает его мгновенно на уровне ядра без вызова функций библиотеки OpenSSL. Сканеры портов считают, что порт полностью закрыт (Closed/Filtered).
Частые вопросы (FAQ)
В чем разница между направлениями ключей (0 и 1) в tls-auth?
В старом режиме tls-auth требовалось явно указывать направление: например, 'tls-auth ta.key 0' на сервере и 'tls-auth ta.key 1' на клиенте. В современном tls-crypt указывать цифры направления не требуется.
Защищает ли tls-crypt от кражи логина и пароля пользователя?
Да, благодаря tls-crypt передаваемые учетные данные и имена сертификатов внутри туннеля шифруются дополнительным слоем еще до начала основного TLS-диалога.
Что такое tls-crypt-v2?
Версия tls-crypt-v2 позволяет использовать индивидуальный клиентский ключ для каждого пользователя вместо одного общего ключа, что упрощает отзыв доступа отдельным клиентам.
Поддерживается ли tls-crypt официальным клиентом OpenVPN Connect на смартфонах?
Да, официальные приложения OpenVPN Connect v3 для iOS и Android полностью поддерживают инлайн-блоки <tls-crypt>.