En este breve tutorial, veremos qué es SSLH, cómo instalar SSLH y cómo configurar SSLH para compartir un mismo puerto para https y ssh en sistemas operativos Linux y similares a Unix.
¿Qué es SSLH?
Es posible que algunos proveedores de servicios de Internet y empresas corporativas hayan bloqueado la mayoría de los puertos y permitido solo algunos puertos específicos, como el puerto 80 y el 443, para reforzar su seguridad.
En tales casos, no tenemos otra opción, pero usamos un mismo puerto para múltiples programas, digamos el puerto HTTPS 443 , que rara vez se bloquea. Aquí es donde SSLH , un multiplexor SSL/SSH, viene como ayuda.
SSLH escuchará las conexiones entrantes en un puerto 443. En pocas palabras, SSLH nos permite ejecutar varios programas o servicios en el puerto 443 en un sistema Linux. Por lo tanto, puede usar SSL y SSH usando el mismo puerto al mismo tiempo.
Si alguna vez ha estado en una situación en la que los cortafuegos bloquean la mayoría de los puertos, puede usar SSLH para acceder a su servidor remoto.
Instalar SSLH en Linux
SSLH está empaquetado para la mayoría de las distribuciones de Linux, por lo que puede instalarlo utilizando los administradores de paquetes predeterminados.
En Debian , Ubuntu , Linux Mint y SO Pop , ejecuta:
$ sudo apt install sslh
Al instalar SSLH, se le preguntará si desea ejecutar sslh como un servicio desde inetd o como un servidor independiente.
Cada elección tiene sus propios beneficios. Con solo unas pocas conexiones por día, probablemente sea mejor ejecutar sslh desde inetd para ahorrar recursos.
Por otro lado, con muchas conexiones, sslh debe ejecutarse como un servidor independiente para evitar generar un nuevo proceso para cada conexión entrante.

En Arch Linux y derivados como Antergos, Manjaro Linux, instálelo usando Pacman como se muestra a continuación.
$ sudo pacman -S sslh
En RHEL , Cent OS , AlmaLinux y Rocky Linux , debe agregar EPEL repositorio y luego instale SSLH como se muestra a continuación.
$ sudo dnf install epel-release
$ sudo dnf install sslh
En Fedora :
$ sudo dnf install sslh
Si no está disponible en los repositorios predeterminados, puede compilar e instalar manualmente SSLH como se describe aquí .
Configurar servidores web Apache o Nginx
Como ya sabe, los servidores web Apache y Nginx escucharán en todas las interfaces de red (es decir, 0.0.0.0:443
) por defecto. Necesitamos cambiar esta configuración para decirle al servidor web que escuche solo en la interfaz localhost (es decir, 127.0.0.1:443
o localhost:443
).
Para hacerlo, edite el archivo de configuración del servidor web (nginx o apache) y busque la siguiente línea:
listen 443 ssl;
Y cámbielo a:
listen 127.0.0.1:443 ssl;
Si está utilizando Virutalhosts en Apache, asegúrese de haberlo cambiado también.
VirtualHost 127.0.0.1:443
Guarde y cierre los archivos de configuración. No reinicie los servicios. Aún no hemos terminado.
Configurar SSLH
Una vez que haya hecho que los servidores web escuchen solo en la interfaz local, edite el archivo de configuración SSLH:
$ sudo vi /etc/default/sslh
Busque la siguiente línea:
Run=no
Y cámbielo a:
Run=yes
Luego, desplácese un poco hacia abajo y modifique la siguiente línea para permitir que SSLH escuche en el puerto 443 en todas las interfaces disponibles (por ejemplo, 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"
donde,
--user sslh
:Requiere ejecutarse bajo este nombre de usuario especificado.--listen 0.0.0.0:443
:SSLH está escuchando en el puerto443
en todas las interfaces disponibles.--sshs 127.0.0.1:22
:enrutar el tráfico SSH al puerto22
en el servidor local.--ssl 127.0.0.1:443
:Dirija el tráfico HTTPS/SSL al puerto443
en el servidor local.
Guarde y cierre el archivo.
Finalmente, habilite e inicie sslh
servicio para actualizar los cambios.
$ sudo systemctl enable sslh
$ sudo systemctl start sslh
Pruebas
Compruebe si el demonio SSLH está escuchando 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
Ahora, puede acceder a su servidor remoto a través de SSH usando el puerto 443
:
$ ssh -p 443 [email protected]
Salida de muestra:
[email protected]'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

¿Ver? Ahora puedo acceder al servidor remoto a través de SSH incluso si el puerto SSH predeterminado 22
está bloqueado. Como ves en el ejemplo anterior, he usado el puerto https 443
para conexión SSH. Además, podemos usar el mismo puerto 443
también para conexiones openVPN.
Probé SSLH en mi servidor Ubuntu 18.04 LTS y funcionó bien como se describe arriba. Probé SSLH en una red de área local protegida, por lo que no estoy al tanto de los problemas de seguridad. Si lo está usando en producción, háganos saber las ventajas y desventajas de usar SSLH en la sección de comentarios a continuación.
Para obtener más detalles, consulte la página oficial de GitHub que figura a continuación.