Как стать автором
Обновить

SSLH: Прячем SSH/HTTPS/OpenVPN/Telegram за единым портом 443

Время на прочтение 3 мин
Количество просмотров 117K
image

SSH/HTTPS/OpenVPN/Telegram и всё на одном порту?! Что?!
— Да!
  • Хотите скрыть наличее у вас некоторых сервисов?
  • В публичной wi-fi сети блокируется всё кроме 443 (https) порта?
  • Настроили Telegram Proxy/OpenVPN и не хотите его «светить» ?
  • SSH подключение к своему серверу из стран с цензурой?

На все эти вопросы ответ один — Мультиплексирование SSL/TLS соединений, или SSLH.

В посте мы рассмотрим как в 1 команду спрятать кучу сервисов за 1 портом.

Почему?


С недавним выходом Telegram Proxy который почти полностью выглядит как SSL трафик появился интересный вопрос в комментариях к посту:
Newton:
У меня довольно нубский вопрос — а завести это вместе с sslh не реально?
После беглой проверки возможностей приложения sslh мне показалось, что «завести» не удастся, но меня очень заинтересовало это приложение, и, как оказалось, скрестить ужа с ежом «завести» все-таки можно.

Как?


Приложение SSLH — мултиплексор, другими словами, оно анализируя трафик (фактически выполняя работу mini-DPI) и в зависимости от типа трафика, направляет его в локальный порт 8443/999/991 или любой другой…

Что позволяет нам впервые использовать технологию DPI во благо.

Задача


Для примера использования SSLH поставим задачу:

На сервере установлены следующие приложения — Telegram Proxy, Apache, SSH и все эти сервисы мы хотим пускать в мир через 443 порт.

Сервер в нашем примере — Ubuntu 16.04.4 LTS, Apache2 + LetsEncrypt,SSH,Telegram Proxy в Docker.

На данный момент, на нем работает, как и положено, Apache.

Установка & Настройка


Установим SSLH:

sudo apt-get install --no-install-recommends sslh

При установке будет задан вопрос о режиме использования, их два:

  • стабильный но более ресурсозатратный
  • быстрый, но с потерей соединений при падении процесса

Я за второй вариант, вы, конечно же, можете выбрать другой.

Проверим, работает ли наше чудо следующей командой:


sudo sslh-select -f --listen IP:8443 --tls 127.0.0.1:443  --ssh 127.0.0.1:22 --anyprot 127.0.0.1:9443

IP — внешний IP сервера
8443 — порт на котором будет запущен наш мултиплексор
443 — там где живет Apache
Обратите внимание на опцию anyprot — именно там будет жить наш Telegram Proxy, другими словами, если трафик не подошел ни под какой тип — отправить туда.

Внимание! Если в вашей конфигурации отсутствует Telegram или SSH — уберите лишние ключи запуска.

Проверим?


Откройте браузер по адресу вашего сервера с портом 8443 — вы должны увидеть ответ от Apache, далее попробуйте подключить по SSH или через Telegram Proxy.

Перенос Apache на другой порт


Для переноса Apache со стандартного порта (443) на другой, например на 7443, посетите следующие файлы:


sudo nano /etc/apache2/ports.conf
sudo nano /etc/apache2/sites-enabled/000-default-le-ssl.conf

В примере Apache+SSL/HTTPS был установлен с использованием LetsEncrypt при другом сертификате конфигурационные файлы могут быть по другим путям.

Автозапуск


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

Отредактируем файл:


sudo nano /etc/default/sslh

В поле DAEMON_OPTS= добавьте атрибуты при запуске команды sslh-select, установите RUN в =yes.

Запустим:


sudo systemctl start sslh

Убедимся, что всё хорошо:


sudo systemctl status sslh

Что в итоге?


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

А как дела с OpenVPN? какие протоколы еще умеет приложение?


На момент написания поста, sslh умеет определять и мультиплексировать следующие протоколы:

	[--ssh <addr>]
	[--openvpn <addr>]
	[--tinc <addr>]
	[--xmpp <addr>]
	[--http <addr>]
	[--ssl <addr>]
	[--tls <addr>]
	[--anyprot <addr>]

Перед использованием, лучше убедиться, какие протоколы поддерживает ваша версия, (вдруг она новее) используя:

sslh-select -h


Ссылки


Разработка SSLH происходит на github, вот в этом репозитории: github.com/yrutschle/sslh

Docker


Собрать рабочий вариант sslh в докере вместе со всеми другими службами у меня не получилось, на мой взгляд будет интересен docker-compose файл который сможет поднять на 443 порту:
  • Apache + LetsEncrypt
  • Telegram Proxy
  • OpenVPN (опционально)
  • Использовать локальный SSH


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

Вам также может быть интересно


Теги:
Хабы:
+75
Комментарии 100
Комментарии Комментарии 100

Публикации

Истории

Работа

Ближайшие события

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн