Некоторые интернет-провайдеры и корпоративные компании могли заблокировать большинство портов и разрешить только несколько определенных портов, таких как порты 80 и 443, для усиления своей безопасности. В таких случаях у нас нет выбора, но мы используем один и тот же порт для нескольких программ, например HTTPS-порт 443, который редко блокируется. Вот где в помощь приходит SSLH, мультиплексор SSL / SSH. Он будет прослушивать входящие соединения через порт 443.
Проще говоря, SSLH позволяет нам запускать несколько программ / служб через порт 443 .
Таким образом, вы можете использовать как SSL, так и SSH, используя один и тот же порт одновременно.
Если вы когда-либо были в ситуации, когда большинство портов заблокированы брандмауэрами, вы можете использовать SSLH для доступа к удаленному серверу.
Этот краткий учебник описывает, как использовать один и тот же порт для https, ssh с использованием SSLH в Unix-подобных операционных системах.
SSLH – общий порт для HTTPS, SSH и OpenVPN
SSLH упакован для большинства дистрибутивов Linux, поэтому вы можете установить его с помощью менеджеров пакетов по умолчанию.
На Debian, Astralinux
apt install sslh
pacman -S sslh
Во время установки SSLH вам будет предложено запустить sslh как службу из inetd или как отдельный сервер.
Каждый выбор имеет свои преимущества.
При ограниченном количестве подключений в день, вероятно, лучше запустить sslh из inetd, чтобы сэкономить ресурсы.
С другой стороны, во многих соединениях sslh должен работать как отдельный сервер, чтобы не создавать новый процесс для каждого входящего соединения.
Настройте веб-серверы Apache или Nginx
Как вы уже знаете, веб-серверы Apache и Nginx будут прослушивать все сетевые интерфейсы (т. е. 0.0.0.0:443) по умолчанию.
Нам нужно изменить этот параметр, чтобы веб-сервер прослушивал только интерфейс localhost (т. е. 127.0.0.1:443 или localhost: 443).
Для этого отредактируйте файл конфигурации веб-сервера (nginx или apache) и найдите следующую строку:
listen 443 ssl;
И измените его на:
listen 127.0.0.1:443 ssl;
VirtualHost 127.0.0.1:443
Сохраните и закройте файлы конфигурации. Не перезапускайте сервисы. Мы еще не закончили.
Настройка SSLH
Сделав веб-серверы прослушивающими только локальный интерфейс, отредактируйте файл конфигурации SSLH:
nano /etc/default/sslh
Найдите следующую строку:
Run=no
И измените ее на:
Run=yes
Затем прокрутите немного вниз и измените следующую строку, чтобы разрешить SSLH прослушивать порт 443 на всех доступных интерфейсах (например, 0.0.0.0:443).
DAEMON_OPTS="--user sslh --listen 0.0.0.0:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --pidfile /var/run/sslh/sslh.pid"
Где:
- –user sslh : требуется для запуска с указанным именем пользователя.
- –listen 0.0.0.0:443 : SSLH прослушивает порт 443 на всех доступных интерфейсах.
- –sshs 127.0.0.1:22 : маршрутизировать трафик SSH на порт 22 на локальном хосте.
- –ssl 127.0.0.1:443 : маршрутизировать трафик HTTPS / SSL на порт 443 на локальном хосте.
Сохраните и закройте файл.
Наконец, включите и запустите службу sslh, чтобы обновить изменения.
systemctl enable sslh
systemctl start sslh
Тестирование
Проверьте, слушает ли демон SSLH 443.
$ ps -ef | grep sslh sslh 00:00:00 /usr/sbin/sslh --foreground --user sslh --listen 0.0.0.0 443 --ssh 127.0.0.1 22 --ssl 127.0.0.1 443 --pidfile /var/run/sslh/sslh.pid sk 00:00:00 grep --color=auto sslh
ssh -p 443 st@192.168.1.208
Теперь мы можем получить доступ к удаленному серверу через SSH, даже если заблокирован стандартный порт SSH 22.