Dans ce bref tutoriel, nous verrons ce qu'est SSLH, comment installer SSLH et comment configurer SSLH pour partager un même port pour https et ssh dans les systèmes d'exploitation Linux et Unix.
Qu'est-ce que SSLH ?
Certains fournisseurs de services Internet et certaines entreprises peuvent avoir bloqué la plupart des ports et n'autoriser que quelques ports spécifiques, tels que les ports 80 et 443, à renforcer leur sécurité.
Dans de tels cas, nous n'avons pas le choix, mais utilisons un 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 un 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 SSL et SSH en utilisant le même port en même temps.
Si vous vous êtes déjà trouvé 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 sous Linux
SSLH est fourni pour la plupart des distributions Linux, vous pouvez donc l'installer à l'aide des gestionnaires de packages par défaut.
Sur Debian , Ubuntu , Linux Mint et Pop OS , exécutez :
$ sudo apt install sslh
Lors de l'installation de SSLH, vous serez invité à indiquer si vous souhaitez exécuter sslh en tant que service d'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 les ressources.
D'un autre côté, avec de nombreuses connexions, sslh doit fonctionner comme un serveur autonome pour éviter de générer un nouveau processus pour chaque connexion entrante.
Sur Arch Linux et des dérivés comme Antergos, Manjaro Linux, installez-le en utilisant Pacman comme indiqué ci-dessous.
$ sudo pacman -S sslh
Sur RHEL , CentOS , AlmaLinux et Rocky Linux , vous devez ajouter EPEL référentiel, puis installez 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 sur les référentiels par défaut, vous pouvez compiler et installer manuellement SSLH 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 de l'hôte local (c'est-à-dire 127.0.0.1:443
ou localhost:443
).
Pour ce faire, modifiez le fichier de configuration du serveur Web (nginx ou apache) et recherchez la ligne suivante :
listen 443 ssl;
Et changez-le en :
listen 127.0.0.1:443 ssl;
Si vous utilisez Virtualhosts dans Apache, assurez-vous de l'avoir également modifié.
VirtualHost 127.0.0.1:443
Enregistrez et fermez les fichiers de configuration. Ne redémarrez pas les services. Nous n'avons pas encore fini.
Configurer SSLH
Une fois que vous avez fait en sorte que les serveurs Web n'écoutent que sur l'interface locale, modifiez le fichier de configuration SSLH :
$ sudo vi /etc/default/sslh
Recherchez 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 (Ex. 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 port443
sur toutes les interfaces disponibles.--sshs 127.0.0.1:22
:Achemine le trafic SSH vers le port22
sur l'hôte local.--ssl 127.0.0.1:443
:Achemine le trafic HTTPS/SSL vers le port443
sur l'hôte local.
Enregistrez et fermez le fichier.
Enfin, activez et démarrez sslh
service pour mettre à jour les modifications.
$ sudo systemctl enable sslh
$ sudo systemctl start sslh
Test
Vérifiez si le démon SSLH écoute 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 [email protected]
Exemple de résultat :
Mot de passe de[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
Voir? 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. Aussi, nous pouvons utiliser le même port 443
également pour les connexions openVPN.
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 suis pas au courant des problèmes de sécurité. Si vous l'utilisez en production, indiquez-nous 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.