SSLH : SSH et HTTPS sur port 443
Table des matières
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.
Sur Fedora :
Sur Red Hat et dérivées, besoin d'EPEL :
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 :
Debian et Ubuntu :
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.
Vous pouvez repérer facilement les mentions 443 via
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 :
Et on vérifie que le port 443 n'est plus utilisé :
A partir de là, notez que le serveur web n'est plus accessible en HTTPS.
Vous pouvez repérer facilement les mentions 443 via
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:
Et on vérifie que le port 443 n'est plus utilisé :
A partir de là, notez que le serveur web n'est plus accessible en HTTPS.
La config de l'outil se fait via le fichier /etc/default/sslh ou /etc/sysconfig/sslh.
Modifiez la ligne host pour écouter partout :
Changez la ligne :
Par ceci (ssl est déprécié pour tls et mettez le bon nom) :
Ensuite démarrez et activez le service :
Vérifiez que le port 443 est ouvert :
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 :
Ensuite démarrez et activez le service :
Vérifiez que le port 443 est ouvert :
Accédez en https sur votre serveur et vérifiez que ça fonctionne :
Testez aussi le SSH :
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