Recherche de site Web

SSLH - Partager le même port pour HTTPS et SSH


Dans ce bref tutoriel, nous verrons ce qu'est SSLH, comment installer SSLH et comment configurer SSLH pour partager le même port pour https et ssh sur les systèmes d'exploitation Linux et de type Unix.

Qu'est-ce que SSLH ?

Certains fournisseurs de services Internet et entreprises pourraient avoir bloqué la plupart des ports, et n'avoir autorisé que quelques ports spécifiques tels que le port 80 et le 443 pour renforcer leur sécurité.

Dans de tels cas, nous n'avons pas d'autre choix que d'utiliser le même port pour plusieurs programmes, disons le port HTTPS 443, qui est rarement bloqué. C'est ici que SSLH, un multiplexeur SSL/SSH, vient en aide.

SSLH écoutera les connexions entrantes sur le port 443. Pour le dire plus simplement, SSLH nous permet d'exécuter plusieurs programmes ou services sur le port 443 sur un système Linux. Ainsi, vous pouvez utiliser à la fois SSL et SSH en utilisant le même port en même temps.

Si vous avez déjà été dans une situation où la plupart des ports sont bloqués par les pare-feu, vous pouvez utiliser SSLH pour accéder à votre serveur distant.

Installer SSLH sur Linux

SSLH est empaqueté pour la plupart des distributions Linux, vous pouvez donc l'installer en utilisant les gestionnaires de paquets par défaut.

Sur Debian, Ubuntu, Linux Mint et Pop OS, exécutez :

$ sudo apt install sslh

Lors de l'installation de SSLH, il vous sera demandé si vous souhaitez exécuter sslh en tant que service depuis inetd, ou en tant que serveur autonome.

Chaque choix a ses propres avantages. Avec seulement quelques connexions par jour, il est probablement préférable d'exécuter sslh depuis inetd afin d'économiser des ressources.

D'un autre côté, avec de nombreuses connexions, sslh devrait fonctionner en tant que serveur autonome afin d'éviter de créer un nouveau processus pour chaque connexion entrante.

Installer sslh

Sur Arch Linux et ses dérivés comme Antergos, Manjaro Linux, installez-le en utilisant Pacman comme montré ci-dessous.

$ sudo pacman -S sslh

Sur RHEL, CentOS, AlmaLinux et Rocky Linux, vous devez ajouter le dépôt EPEL puis installer SSLH comme indiqué ci-dessous.

$ sudo dnf install epel-release
$ sudo dnf install sslh

Sur Fedora :

$ sudo dnf install sslh

S'il n'est pas disponible dans les dépôts par défaut, vous pouvez compiler et installer SSLH manuellement comme décrit ici.

Configurer les serveurs web Apache ou Nginx

Comme vous le savez déjà, les serveurs web Apache et Nginx écouteront sur toutes les interfaces réseau (c'est-à-dire 0.0.0.0:443) par défaut. Nous devons modifier ce paramètre pour indiquer au serveur web d'écouter uniquement sur l'interface localhost (c'est-à-dire 127.0.0.1:443 ou localhost:443).

Pour ce faire, éditez le fichier de configuration du serveur web (nginx ou apache) et trouvez la ligne suivante :

listen 443 ssl;

Et, changez-le en :

listen 127.0.0.1:443 ssl;

Si vous utilisez des Virtualhosts dans Apache, assurez-vous d'avoir également modifié cela.

VirtualHost 127.0.0.1:443

Enregistrez et fermez les fichiers de configuration. Ne redémarrez pas les services. Nous n'avons pas encore terminé.

Configurer SSLH

Une fois que vous avez configuré les serveurs web pour qu'ils écoutent uniquement sur l'interface locale, modifiez le fichier de configuration SSLH :

$ sudo vi /etc/default/sslh

Trouvez la ligne suivante :

Run=no

Et, changez-le en :

Run=yes

Ensuite, faites défiler un peu vers le bas et modifiez la ligne suivante pour permettre à SSLH d'écouter sur le port 443 sur toutes les interfaces disponibles (par exemple, 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"

Où,

  • --user sslh : Nécessite de s'exécuter sous ce nom d'utilisateur spécifié.
  • --listen 0.0.0.0:443 : SSLH écoute sur le port 443 sur toutes les interfaces disponibles.
  • --sshs 127.0.0.1:22 : Diriger le trafic SSH vers le port 22 sur l'hôte local.
  • --ssl 127.0.0.1:443 : Dirige le trafic HTTPS/SSL vers le port 443 sur l'hôte local.

Enregistrez et fermez le fichier.

Enfin, activez et démarrez le service sslh pour appliquer les modifications.

$ sudo systemctl enable sslh
$ sudo systemctl start sslh

Test

Vérifiez si le démon SSLH écoute sur 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

Maintenant, vous pouvez accéder à votre serveur distant via SSH en utilisant le port 443 :

$ ssh -p 443 sk@192.168.225.50

Exemple de sortie :

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
Accéder aux systèmes distants via SSH en utilisant le port 443

Vous voyez ? Je peux maintenant accéder au serveur distant via SSH même si le port SSH par défaut 22 est bloqué. Comme vous le voyez dans l'exemple ci-dessus, j'ai utilisé le port https 443 pour la connexion SSH. De plus, nous pouvons également utiliser le même port 443 pour les connexions openVPN.

Conclusion

J'ai testé SSLH sur mon serveur Ubuntu 18.04 LTS et cela a très bien fonctionné comme décrit ci-dessus. J'ai testé SSLH dans un réseau local protégé, donc je ne connais pas encore les problèmes de sécurité. Si vous l'utilisez en production, faites-nous savoir les avantages et les inconvénients de l'utilisation de SSLH dans la section des commentaires ci-dessous.

Pour plus de détails, consultez la page officielle GitHub indiquée ci-dessous.

Ressource :

  • Répertoire GitHub SSLH

Lecture suggérée :

  • Comment se connecter en SSH à un répertoire particulier sur Linux
  • Comment créer un alias SSH sous Linux
  • Comment configurer l'authentification par clé SSH sous Linux
  • Comment empêcher une session SSH de se déconnecter sous Linux
  • Autoriser ou refuser l'accès SSH à un utilisateur ou groupe particulier sous Linux
  • 4 façons de maintenir une commande en cours d'exécution après vous être déconnecté de la session SSH
  • ScanSSH – Serveur SSH Rapide et Scanner de Proxy Ouvert