SSLH — используйте один и тот же порт для HTTPS и SSH
В этом кратком руководстве мы увидим, что такое SSLH, как установить SSLH и как настроить SSLH для использования одного и того же порта для https и ssh в Linux и Unix-подобных системах. операционные системы.
Что такое SSLH?
Некоторые интернет-провайдеры и корпоративные компании могли заблокировать большинство портов и разрешить только некоторым конкретным портам, таким как порт 80 и 443, для повышения безопасности.
В таких случаях у нас нет выбора, кроме как использовать один и тот же порт для нескольких программ, скажем, порт HTTPS 443, который редко блокируется. Здесь на помощь приходит SSLH, мультиплексор SSL/SSH.
SSLH будет прослушивать входящие соединения через порт 443. Проще говоря, SSLH позволяет нам запускать несколько программ или служб через порт 443 в системе Linux. Таким образом, вы можете одновременно использовать SSL и SSH, используя один и тот же порт.
Если вы когда-либо оказывались в ситуации, когда большинство портов блокируются брандмауэрами, вы можете использовать SSLH для доступа к удаленному серверу.
Установите SSLH в Linux
SSLH входит в состав большинства дистрибутивов Linux, поэтому вы можете установить его с помощью менеджеров пакетов по умолчанию.
В Debian, Ubuntu, Linux Mint и Pop OS запустите:
sudo apt install sslh
При установке SSLH вам будет предложено запустить sslh как службу inetd или как автономный сервер.
Каждый выбор имеет свои преимущества. При небольшом количестве подключений в день, вероятно, лучше запустить sslh из inetd, чтобы сэкономить ресурсы.
С другой стороны, при большом количестве соединений sslh должен работать как автономный сервер, чтобы избежать создания нового процесса для каждого входящего соединения.
Установить SSLH
В Arch Linux и его производных, таких как Antergos, Manjaro Linux, установите его с помощью Pacman, как показано ниже.
sudo pacman -S sslh
В RHEL, CentOS, AlmaLinux и Rocky Linux необходимо добавить EPEL репозиторий, а затем установите SSLH, как показано ниже.
sudo dnf install epel-release
sudo dnf install sslh
В Fedora:
sudo dnf install sslh
Если он недоступен в репозиториях по умолчанию, вы можете вручную скомпилировать и установить 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;
Если вы используете Virutalhosts в Apache, убедитесь, что вы его тоже изменили.
VirtualHost 127.0.0.1:443
Сохраните и закройте файлы конфигурации. Не перезапускайте службы. Мы еще не закончили.
Настроить SSLH
После того, как вы настроили веб-серверы для прослушивания только локального интерфейса, отредактируйте файл конфигурации SSLH:
sudo vi /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
, чтобы обновить изменения.
sudo systemctl enable sslh
sudo systemctl start sslh
Тестирование
Проверьте, прослушивает ли демон SSLH 443
.
$ ps -ef | grep sslh
sslh 2746 1 0 15:51 ? 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
sslh 2747 2746 0 15:51 ? 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 2754 1432 0 15:51 pts/0 00:00:00 grep --color=auto sslh
Теперь вы можете получить доступ к своему удаленному серверу через SSH, используя порт 443
:
ssh -p 443 sk@192.168.225.50
Пример вывода:
sk@192.168.225.50's password:
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-55-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Wed Aug 14 13:11:04 IST 2019
System load: 0.23 Processes: 101
Usage of /: 53.5% of 19.56GB Users logged in: 0
Memory usage: 9% IP address for enp0s3: 192.168.225.50
Swap usage: 0% IP address for enp0s8: 192.168.225.51
* Keen to learn Istio? It's included in the single-package MicroK8s.
https://snapcraft.io/microk8s
61 packages can be updated.
22 updates are security updates.
Last login: Wed Aug 14 13:10:33 2019 from 127.0.0.1
Доступ к удаленным системам через SSH, используя порт 443.
Видеть? Теперь я могу получить доступ к удаленному серверу через SSH, даже если порт SSH по умолчанию 22
заблокирован. Как вы видите в приведенном выше примере, я использовал порт https 443
для SSH-соединения. Кроме того, мы можем использовать тот же порт 443
для соединений openVPN.
Заключение
Я протестировал SSLH на своем сервере Ubuntu 18.04 LTS, и он работал нормально, как описано выше. Я тестировал SSLH в защищенной локальной сети, поэтому мне пока не известны проблемы безопасности. Если вы используете его в производстве, сообщите нам о преимуществах и недостатках использования SSLH в разделе комментариев ниже.
Для получения более подробной информации посетите официальную страницу GitHub, приведенную ниже.
Ресурс:
- Репозиторий SSLH на GitHub
Рекомендуем прочитать:
- Как подключиться по SSH к определенному каталогу в Linux
- Как создать псевдоним SSH в Linux
- Как настроить аутентификацию на основе ключей SSH в Linux
- Как предотвратить разрыв сеанса SSH в Linux
- Разрешить или запретить доступ по SSH определенному пользователю или группе в Linux
- 4 способа сохранить выполнение команды после выхода из сеанса SSH
- ScanSSH — быстрый SSH-сервер и открытый прокси-сканер