SSLH : Multiplexeur de Protocoles sur un Port Unique

SSLH est un logiciel qui permet de multiplexer plusieurs protocoles sur un même port réseau, typiquement le port 443. Cette fonctionnalité est particulièrement utile pour contourner les restrictions de pare-feu, en permettant de faire passer à la fois le trafic HTTPS, SSH, OpenVPN, et d’autres protocoles à travers un seul et même port.

Pourquoi Utiliser SSLH ?

SSLH est idéal dans les situations où le port 443 (utilisé par HTTPS) est le seul port ouvert, et où vous souhaitez également utiliser d’autres services, comme SSH ou OpenVPN, sur ce même port sans modifier la configuration de votre pare-feu ou des règles de sécurité du réseau.

Fonctionnement de SSLH

SSLH agit comme un proxy en écoutant sur le port configuré (généralement 443). Lorsqu’une connexion arrive, SSLH analyse le début de la communication et détermine de quel protocole il s’agit, puis redirige le trafic vers le service approprié.

Schéma de Fonctionnement

Voici un schéma ASCII illustrant le fonctionnement de SSLH avec SSH et HTTPS :

                +------+         22+---------+
                |      |--SSH----->| OPENSSH |
             443|      |           +---------+
-- SSH/HTTPS -->| SSLH |         
                |      |       4443+---------+
                |      |--HTTPS--->| APACHE  |
                +------+           +---------+

Protocoles Supportés

SSLH supporte plusieurs protocoles :

  • HTTPS (HTTP sécurisé)
  • SSH (Secure Shell)
  • OpenVPN
  • XMPP
  • AnyConnect
  • Et bien d’autres via des règles personnalisables.

Installation de SSLH

Sous Debian/Ubuntu

Pour installer SSLH sur un système basé sur Debian ou Ubuntu, il vous suffit d’exécuter la commande suivante :

sudo apt update
sudo apt install sslh

Sous CentOS/RHEL

Sur CentOS ou RHEL, vous pouvez installer SSLH en utilisant EPEL :

sudo yum install epel-release
sudo yum install sslh

Compilation Manuelle

Si vous préférez compiler SSLH à partir des sources, voici les étapes à suivre :

git clone https://github.com/yrutschle/sslh.git
cd sslh
make
sudo make install

Configuration de SSLH

La configuration de SSLH se trouve typiquement dans le fichier /etc/sslh.cfg. Voici un exemple de configuration pour rediriger les connexions en fonction des protocoles :

verbose: true;
foreground: true;
listen:
(
    { host: "0.0.0.0"; port: "443"; }
);
protocols:
(
    { name: "ssh"; host: "127.0.0.1"; port: "22"; },
    { name: "https"; host: "127.0.0.1"; port: "8443"; },
    { name: "openvpn"; host: "127.0.0.1"; port: "1194"; },
    { name: "xmpp"; host: "127.0.0.1"; port: "5222"; }
);

Explications

  • listen : définit l’adresse et le port sur lesquels SSLH écoute les connexions entrantes.
  • protocols : définit les règles de routage en fonction du protocole détecté.

Configuration avec systemd

Pour garantir que SSLH démarre automatiquement avec votre système, vous pouvez utiliser le service systemd fourni avec SSLH. Voici les commandes pour l’activer et le démarrer :

sudo systemctl enable sslh
sudo systemctl start sslh

Debugging et Journalisation

Pour voir les logs et diagnostiquer les problèmes, vous pouvez vérifier le fichier de log associé à SSLH ou exécuter SSLH en mode verbeux :

sudo journalctl -u sslh

SSLH et Sécurité

Bien que SSLH soit un outil puissant, il est essentiel de s’assurer que les services qu’il redirige sont correctement sécurisés. Assurez-vous que votre service SSH est bien configuré avec des clés d’authentification et que votre service HTTPS utilise des certificats SSL/TLS à jour.

Liens et Ressources Utiles

Conclusion

SSLH est une solution élégante pour utiliser plusieurs services sur un port unique. En multipliant les protocoles sur un seul port, vous pouvez contourner certaines restrictions de pare-feu tout en maintenant un haut niveau de sécurité et de flexibilité. Avec sa configuration simple et son support étendu pour de nombreux protocoles, SSLH est un outil incontournable pour les administrateurs réseau.