Иногда может возникнуть ситуация, когда на сервере необходимо развернуть несколько сервисов, которые должны работать на одному порту, например 443. Здесь на помощь приходит SSLH – мультиплексор SSL / SSH. Он будет прослушивать входящие соединения через порт 443 и на основе первого полученного от клиента сетевого пакета, будет перенаправлять запрос на нужный сервис.
Проще говоря, SSLH позволяет нам запускать несколько программ / служб через порт 443 в системе Linux.
Для начала установим сам пакет SSLH:
sudo apt install --no-install-recommends sslh
Обратите внимание, мы указали аргумент – no-install-recommends. Если дать команду без доп. аргументов, то вместе с установкой SSLH потянется куча других ненужных пакетов.
В процессе установки будет задан вопрос:
Отвечаем – “standalone” (или “самостоятельно”, в русской версии).
После установки смотрим поддерживаемые службы:
sudo sslh-select -h
Вывод будет таким:
sslh-select: option '-http' requires an argument
sslh 1.20-1
usage:
sslh [-v] [-i] [-V] [-f] [-n] [--transparent] [-F]
[-t ] [-P ] [-u ] [-C ] -p [-p ...]
[--ssh ]
[--openvpn ]
[--tinc ]
[--xmpp ]
[--http ]
[--tls ]
[--adb ]
[--socks5 ]
[--anyprot ]
Запустим sslh в тестовом режиме:
sudo sslh-select -f --listen 0.0.0.0:8443 --tls 127.0.0.1:443 --ssh 127.0.0.1:22 --openvpn 127.0.0.1:1194 --anyprot 127.0.0.1:9443
–listen 0.0.0.0:8443 — адрес и порт (потом поменяем его на 443), который слушает sslh.
–tls 127.0.0.1:443 — ваш сайт.
–ssh 127.0.0.1:22 — ssh-сервер.
–openvpn 127.0.0.1:1194 — openvpn-сервер.
–anyprot 127.0.0.1:9443 — на этот порт можно повесить любую службу, например proxy-telegram. Входящий пакет сначала проверяется на соответствие указанным службам, и если нет, то отправляется на –anyprot. Если не указывать –anyprot, неизвестный пакет будет просто дропаться.
Пробуем подключиться по SSH используя порт: 8443. Если всё работает, то переходим к настройке:
sudo nano /etc/default/sslh
Меняем строку:
DAEMON_OPTS="--listen 0.0.0.0:443 --tls 127.0.0.1:445 --ssh 127.0.0.1:22 --openvpn 127.0.0.1:1194 --anyprot 127.0.0.1:9443 --pidfile /var/run/sslh/sslh.pid"
Если каких-то служб нет, то их указывать не нужно. Если есть сайт, тогда в конфигурации web-сервера нужно поменять 443-й порт на 445-й (80-й трогать не нужно).
Сохраняем конфигурацию и запускаем sslh:
sudo systemctl start sslh
Проверяем работу:
sudo systemctl status sslh
Пробуем подключиться по SSH через 443 порт.
Осталось только перечитать файлы конфигурации systemd, включить и запустить демон. Выполняем команды по очереди:
sudo systemctl daemon-reload
sudo systemctl enable sslh
sudo systemctl start sslh