null

SSLH: Запускаем SSH, OpenVPN, HTTPS, Socks5 и MTProto-proxy на 443 порту

А мы продолжаем нашу, похоже, уже постоянную рубрику "Очередные костыли для запуска всего-чего-только-можно на 443 порту" на волнах блокировок Телеграма. Теперь со вкусом MTProto!

Не так давно Telegram представил общественности официальную версию MTProto-proxy сервера, позволяющего отказаться от Socks5 прокси и начать использовать нативный для клиентов протокол MTProto. В связи с чем возникла необходимость расширить прошлый набор сервисов, уже расположенных на 443 порту.

Было обаружено новое старое решение под названием SSLH, умеющее мультиплексировать множество протоколов. MTProto-proxy в их число не входит, но перенаправлять в него трафик можно методом исключения, если ни один другой протокол не был распознан.

Рассмотрим установку и настройку в Debian 9.4.

Версия SSLH из официального репозитория слишком старая, поэтому соберём его из исходников.

Установим необходимые зависимости для сборки:

apt-get update
apt-get install libwrap0-dev libconfig-dev libpcre3-dev

Склонируем репозиторий:

git clone https://github.com/yrutschle/sslh.git

Выполним сборку и установку SSLH:

cd sslh/
make
make install

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

cat <<@ > /lib/systemd/system/sslh.service
[Unit]
Description=SSL/SSH multiplexer
After=network.target
Documentation=man:sslh(8)

[Service]
EnvironmentFile=/etc/default/sslh
ExecStart=/usr/sbin/sslh --foreground $DAEMON_OPTS
KillMode=process

[Install]
WantedBy=multi-user.target
@

И, наконец, создадим файл конфигурации в /etc/default/:

cat <<@ > /etc/default/sslh
# Default options for sslh initscript
# sourced by /etc/init.d/sslh

# Disabled by default, to force yourself
# to read the configuration:
# - /usr/share/doc/sslh/README.Debian (quick start)
# - /usr/share/doc/sslh/README, at "Configuration" section
# - sslh(8) via "man sslh" for more configuration details.
# Once configuration ready, you *must* set RUN to yes here
# and try to start sslh (standalone mode only)

RUN=yes

# binary to use: forked (sslh) or single-thread (sslh-select) version
# systemd users: don't forget to modify /lib/systemd/system/sslh.service
DAEMON=/usr/sbin/sslh

DAEMON_OPTS="--user sslh --listen 0.0.0.0:443 --socks5 127.0.0.1:1080 --ssh 127.0.0.1:22 --openvpn 127.0.0.1:1195 --ssl 127.0.0.1:4433 --anyprot 127.0.0.1:8888 --pidfile /var/run/sslh.pid"
@

Мультиплексируемые в данном примере сервисы:

  1. Socks5 на 1080 порту
  2. SSH на 22
  3. OpenVPN на 1195
  4. SSL на 4433
  5. MTProto-proxy server на 8888

Осталось только перечитать файлы конфигурации Systemd, включить и запустить демон:

systemctl daemon-reload
systemctl enable sslh
systemctl start sslh