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.

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


Installation



Sur Fedora :
Code BASH :
dnf install sslh


Sur Red Hat et dérivées, besoin d'EPEL :
Code 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 :
Code BASH :
emerge -av net-misc/sslh


Debian et Ubuntu :
Code 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
Code 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 :
Code BASH :
systemctl restart httpd


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

Code 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
Code 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:
Code BASH :
/etc/init.d/apache2 restart


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

Code 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 :
Code BASH :
    { host: "0.0.0.0"; port: "443"; }



Changez la ligne :
Code BASH :
     { name: "ssl"; host: "localhost"; port: "443"; log_level: 0; },


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



Ensuite démarrez et activez le service :
Code BASH :
systemctl enable --now sslh


Vérifiez que le port 443 est ouvert :
Code BASH :
ss -unplat | grep :443

Code 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 :
Code 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 :
Code BASH :
rc-update add sslh
/etc/init.d/sslh start


Vérifiez que le port 443 est ouvert :
Code BASH :
ss -unplat | grep :443

Code 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 :

Code BASH :
curl -k https://192.168.21.101


Testez aussi le SSH :

Code BASH :
ssh root@192.168.21.101 -p443
Cette page a été vue 11047 fois