Compilation, Installation et Configuration de SSLH.
Joindre son serveur SSH sur le port 443 peut être utile, en particulier si vous êtes connecté derrière un routeur firewall qui fait du zèle.
Problème votre serveur Web utilise déjà ce port pour les connexions SSL ? SSLH a la solution.
SSLH est multiplexeur SSL/SSH, c'est lui qui va se chargera d'écouter sur votre port 443 (tcp) et de rediriger les requêtes qu'il reçoit vers le service approprié.
Dans notre exemple SSLH va être installé sur une machine CentOS 5.4, et aiguillera nos requêtes vers OpenSSH ou Apache.
Compilation
Pour la compilation c'est du classique, un seul fichier source (sslh.c) et un Makefile. Seul subtilité ici nous désirons installer le binaire généré dans "/srv".
# wget http://www.rutschle.net/tech/sslh-1.7a.tar.gz # tar xvzf sslh-1.7a.tar.gz # cd sslh-1.7a # make PREFIX=/srv # PREFIX à modifier selon votre besoin. (/usr/local par défaut) # make install
Installation du script d'init
Un script d'init pour CentOS est fournit avec l'archive de SSLH (scripts/etc.rc.d.init.d.sslh.centos), cependant se script est un peu buggé c'est pour cela que je vous propose d'installer ma propre modification de ce script.
# wget http://www.system-linux.eu/public/scripts/sslh -O "/etc/init.d/sslh" # chmod 755 /etc/init.d/sslh # chkconfig --add sslh
Configuration
La configuration de SSLH se fait via les arguments qui lui son passé sur ligne de commande. J'ai donc décidé de les conserver dans le script d'init. (même si cela n'est habituellement pas conseillé)
On édite donc le script d'init.
# vi /etc/init.d/sslh
Cette ligne précisément:
... OPTIONS="-p 0.0.0.0:443 -l 127.0.0.1:8443 -s 127.0.0.1:22 -P $PIDFILE" ...
-p 0.0.0.0:443 :SSLH sera en écoute sur le port 443.
-l 127.0.0.1:8443 :SSLH redirigera les requêtes HTTPS en local sur le port 8443.
-s 127.0.0.1:22 :SSLH redirigera les requêtes SSH en local sur le port 22.
Configuration de Apache
Il faut maintenant changer le port d'écoute de Apache pour qu'il utilise désormais le port 8443 pour les connexions HTTPS.
Nous disposons d'un serveur Apache compiler par nos soins. Il utilise le fichier "conf/extra/httpd-ssl.conf" pour définir le port de connexion HTTPS. Si vous ne disposez pas de se fichier il vous faut chercher où ce situe cette configuration. (probablement dans le httpd.conf)
# grep -lr "Listen 443" *
Un fois trouvé on édite ce fichier pour remplacer:
Listen 443
par:
Listen 8443
Enfin nous devons changer la configuration de nos vhosts comme par exemple:
<VirtualHost *:8443> ... SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile "/etc/chose/..." SSLCertificateKeyFile "/etc/truc/..." </VirtualHost *:8443>
Pour que nos modification soit prise en compte on redémarre le service httpd.
# service httpd restart
On démarre aussi tôt SSLH
# service sslh start
Créaction d'un fichier de log pour SSLH
SSLH envoi ses logs de connexion par le protocole syslog. Pour plus de lisibilité nous allons donc configurer notre démon syslog pour qui dirige les logs de sslh dans un fichier dédié.
Nous utilisons rsyslog et voici notre filtre:
# echo "# sslh log file" >> /etc/rsyslog.conf # echo -e ":programname, isequal, "sslh" /var/log/sslh.log" >> /etc/rsyslog.conf
Puis on relance le démon rsyslog:
# service rsyslog restart
Si vous avez un grand nombre de connexion SSL/SSH il peux être intéressent d'effectuer une rotation sur ce fichier:
echo "/var/log/sslh { weekly notifempty missingok }" > /etc/logrotate.d/sslh
Et si tous se passe bien, vous devriez trouver dans vos logs quelque chose comme suit.
# tail /var/log/sslh.log Mar 17 00:38:22 csbjix sslh[21726]: connection from x.x.x.x:42395 forwarded to SSL Mar 17 16:45:27 csbjix sslh[21726]: connection from y.y.y.y:16112 forwarded to SSH
Amusez vous bien !
NB: Cette article fait suite à la découverte de SSLH sur le site de notre ami bloggeur, Billux13. Si vous utilisez Debian et Lighttpd je vous invite a consulter son article.