Services et serveurs

SSLH : SSH et HTTPS sur port 443

Table des matières

Introduction



Si vous utilisez un serveur SSH comme proxy SOCKS, pour vous connecter de manière sécurisée depuis un point d'accès non fiables ou filtrés (Wi-Fi publics comme dans les hôtels), vous avez probablement changé le port de SSH (le 22 est souvent bloqué ou les ports custom).

Seulement, si vous avez un serveur Web sur cette même machine, vous ne pouvez pas utiliser le port 443 pour SSH et votre serveur web en HTTPS.
La seule solution pour faire cohabiter SSH et HTTPS sur le port 443 est l'utilitaire SSLH.

Nous allons voir ensemble comment l'installer et paramétrer notre système.

C'est SSLH qui redirigera le flux HTTPS ou SSH vers apache/ngnix ou openssh-server.

Copier vers le presse-papierCode TEXT :
                +------+         22+---------+
                |      |--SSH----->| OPENSSH |
             443|      |           +---------+
-- SSH/HTTPS -->| SSLH |         
                |      |       4443+---------+
                |      |--HTTPS--->| APACHE  |
                +------+           +---------+


Installation



Sur Fedora :
Copier vers le presse-papierCode BASH :
dnf install sslh


Sur Red Hat et dérivées, besoin d'EPEL :
Copier vers le presse-papierCode BASH :
dnf install sslh


Pour Red Hat 9 et dérivées dans mon dépôt COPR en attendant :
https://copr.fedorainfracloud.org/coprs/adriend/el-apps/

Gentoo :
Copier vers le presse-papierCode BASH :
emerge -av net-misc/sslh


Debian et Ubuntu :
Copier vers le presse-papierCode BASH :
apt install sslh


Prérequis



Avant de configurer SSLH, il va être nécessaire de modifier la configuration du serveur web.
Nous allons déplacer le port HTTPS de 443 à 4443.

Exemple avec Red Hat et dérivées



Vous pouvez repérer facilement les mentions 443 via
Copier vers le presse-papierCode BASH :
grep -r 443 /etc/httpd


Dans le fichier /etc/httpd/conf.d/ssl.conf je remplace :
- L'écoute globale : Listen 443 https par Listen 4443
- L'écoute des Vhosts <VirtualHost _default_:443> par <VirtualHost _default_:4443>

Et on relance httpd :
Copier vers le presse-papierCode BASH :
systemctl restart httpd


Et on vérifie que le port 443 n'est plus utilisé :
Copier vers le presse-papierCode BASH :
ss -unplat | grep 443

Copier vers le presse-papierCode TEXT :
tcp   LISTEN 0      511                *:4443            *:*    users:(("httpd",pid=3339,fd=6),("httpd",pid=3338,fd=6),("httpd",pid=3337,fd=6),("httpd",pid=3335,fd=6))


A partir de là, notez que le serveur web n'est plus accessible en HTTPS.

Exemple avec Gentoo



Vous pouvez repérer facilement les mentions 443 via
Copier vers le presse-papierCode BASH :
grep -r 443 /etc/apache2/


Dans le fichier /etc/apache2/vhosts.d/00_default_ssl_vhost.conf je remplace :
- L'écoute globale : Listen 443 https par Listen 4443
- L'écoute des Vhosts <VirtualHost _default_:443> par <VirtualHost _default_:4443>

Et on relance apache2:
Copier vers le presse-papierCode BASH :
/etc/init.d/apache2 restart


Et on vérifie que le port 443 n'est plus utilisé :
Copier vers le presse-papierCode BASH :
ss -unplat | grep 443

Copier vers le presse-papierCode TEXT :
tcp   LISTEN 0      511                                   *:4443              *:*     users:(("apache2",pid=252893,fd=4),("apache2",pid=252892,fd=4),("apache2",pid=252891,fd=4),("apache2",pid=252890,fd=4),("apache2",pid=252889,fd=4),("apache2",pid=252886,fd=4))


A partir de là, notez que le serveur web n'est plus accessible en HTTPS.

Configuration de SSLH



Red Hat et dérivées



La config de l'outil se fait via le fichier /etc/default/sslh ou /etc/sysconfig/sslh.

Modifiez la ligne host pour écouter partout :
Copier vers le presse-papierCode BASH :
    { host: "0.0.0.0"; port: "443"; }



Changez la ligne :
Copier vers le presse-papierCode BASH :
     { name: "ssl"; host: "localhost"; port: "443"; log_level: 0; },


Par ceci (ssl est déprécié pour tls et mettez le bon nom) :
Copier vers le presse-papierCode BASH :
     { name: "tls"; host: "localhost"; port: "4443"; log_level: 0; },



Ensuite démarrez et activez le service :
Copier vers le presse-papierCode BASH :
systemctl enable --now sslh


Vérifiez que le port 443 est ouvert :
Copier vers le presse-papierCode BASH :
ss -unplat | grep :443

Copier vers le presse-papierCode TEXT :
tcp   LISTEN 0      50           0.0.0.0:443       0.0.0.0:*    users:(("sslh",pid=3696,fd=3),("sslh",pid=3695,fd=3))


Gentoo



La config de l'outil se fait via le fichier /etc/conf.d/sslh .

Placer cette ligne dans le fichier de conf pour écouter partout sur le port 443 et rediriger SSH sur le 22 ou HTTPS sur le port 4443 :
Copier vers le presse-papierCode BASH :
DAEMON_OPTS="-p 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:4443"



Ensuite démarrez et activez le service :
Copier vers le presse-papierCode BASH :
rc-update add sslh
/etc/init.d/sslh start


Vérifiez que le port 443 est ouvert :
Copier vers le presse-papierCode BASH :
ss -unplat | grep :443

Copier vers le presse-papierCode TEXT :
tcp   LISTEN 0      50                              0.0.0.0:443         0.0.0.0:*     users:(("sslh",pid=253100,fd=3),("sslh",pid=253099,fd=3))



Vérifiez



Accédez en https sur votre serveur et vérifiez que ça fonctionne :

Copier vers le presse-papierCode BASH :
curl -k https://192.168.21.101


Testez aussi le SSH :

Copier vers le presse-papierCode BASH :
ssh root@192.168.21.101 -p443
Cette page a été vue 12027 fois