GNU/Linux >> Tutoriales Linux >  >> Linux

SSLH:comparta un mismo puerto para HTTPS y SSH

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 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 puerto 443 en todas las interfaces disponibles.
  • --sshs 127.0.0.1:22 :enrutar el tráfico SSH al puerto 22 en el servidor local.
  • --ssl 127.0.0.1:443 :Dirija el tráfico HTTPS/SSL al puerto 443 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.


Linux
  1. Cómo configurar un puerto separado para SSH y SFTP en CentOS/RHEL

  2. herramienta similar a teamviewer para ssh?

  3. rastrear una IP y un puerto en particular

  4. No se pudo determinar el puerto https para la redirección en Docker

  5. Túnel HTTPS SSH

Cómo conectar y compartir datos entre dos sistemas Linux

Tunelización y proxy SSH

Cómo cambiar el puerto SSH predeterminado en Linux [de forma adecuada y segura]

Cambia tu puerto SSH en Ubuntu y Debian

¿Cómo cambiar el puerto SSH en Centos 7.x?

¿Cómo cambiar el puerto SSH en Ubuntu?