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.
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