Installer SSLH sur Debian
SSLH est un multiplexeur SSH / HTTPS / OpenVPN / Tinc / XMPP permettant d'utiliser tous ces protocoles simultanément sur le port 443 d'un serveur. Le port 443 (HTTPS) est historiquement non restreint sur des réseaux fortement sécurisés. L'utilisation de SSLH permet de contourner les limitations de nombreux réseaux d'entreprise.
Ce guide est testé sur:
- Debian 7.0 Wheezy
Prérequis
Ce guide nécessite:
- Un serveur Apache 2 disposant du protocole HTTPS, comme décrit par Activer le protocole HTTPS avec Apache 2 sur Debian.
Ce guide recommande:
- Un serveur SSH sans port knocking, sécurisé comme décrit par Sécuriser l'accès SSH sur Debian.
- Un serveur OpenVPN sur un port TCP, comme décrit par Installer et configurer OpenVPN sur Debian.
Avertissement
Une fois SSLH installé, toutes les connexions HTTPS à Apache 2 apparaitront provenir de l'adresse IP locale 127.0.0.1. Il n'y a aucun moyen d'éviter cela. C'est l'inconvénient majeur de cet outil.
Paramètres
Renseignez l'interface réseau ou écoutera le multiplexeur:
SSLH_DEV="eth0"
Renseignez l'adresse IP et port du serveur SSH:
SSH_SERVER="127.0.0.1:22"
Renseignez l'adresse IP et port du serveur OpenVPN (laissez vide si aucun):
# OPENVPN_SERVER="127.0.0.1:1194"
Installation
Détectez l'adresse IP d'écoute du multiplexeur:
SSLH_IP="$(command ifconfig "${SSLH_DEV}" \
| command grep 'inet ' \
| command sed -e 's/^.*inet [^:]*:\([^ ]*\) .*$/\1/')"
Préparation de l'environnement
Installez les logiciels nécessaires:
DEBIAN_FRONTEND='noninteractive' command apt-get install sslh
Configuration d'Apache 2
Désactivez les ports HTTPS par défaut d'Apache 2:
command sed -i \
-e 's/\([^#]\)\(NameVirtualHost .*:443\)/\1#\2/g' \
'/etc/apache2/ports.conf'
Configurez Apache 2 pour écouter le port 443 de l'IP locale (127.0.0.1):
SSL_IP="127.0.0.1"
if [ -z "$(command grep "NameVirtualHost.*${SSL_IP}:443" '/etc/apache2/ports.conf')" ]; then command sed -i -e "/Listen[\t ]*443/a\\ NameVirtualHost ${SSL_IP}:443" '/etc/apache2/ports.conf' fi
Mettez à jours les hôtes virtuels concernés:
command sed -i \
-e 's/^<VirtualHost.*:443/#&/g' \
-e "/#<VirtualHost.*:443/a\\
<VirtualHost ${SSL_IP}:443>" \
'/etc/apache2/sites-available/'*
Vérifiez que la nouvelle configuration est valide:
command apache2ctl -t
Configuration
Configurez l'adresse IP d'écoute du multiplexeur:
command sed -i \
-e "s/--listen[ \t][^ \t]*[ \t]/--listen ${SSLH_IP}:443 /" \
'/etc/default/sslh'
Si nécessaire, configurez l'adresse IP du serveur SSH:
if [ -n "${SSH_SERVER}" ]; then
command sed -i \
-e "s/--ssh[ \t][^ \t]*[ \t]/--ssh ${SSH_SERVER} /" \
'/etc/default/sslh'
fi
Si nécessaire, configurez l'adresse IP du serveur OpenVPN:
if [ -n "${OPENVPN_SERVER}" ]; then
command sed -i \
-e "s/--openvpn[ \t][^ \t]*[ \t]//" \
-e "s/\(--ssh[ \t][^ \t]*[ \t]\)/\1--openvpn ${OPENVPN_SERVER} /" \
'/etc/default/sslh'
fi
Activez le multiplexeur:
command sed -i \
-e 's/RUN=.*$/RUN=yes/' \
'/etc/default/sslh'
Initialisation
Rechargez la configuration d'Apache 2:
service apache2 force-reload
Démarrez le multiplexeur:
service sslh start
Utilisation
SSLH permet de se connecter en SSH sur le port 443. Utilisez l'option -p de la commande ssh:
command ssh -p 443 "www.domain.com"
Pour OpenVPN, modifiez le fichier de configuration du client pour se connecter sur le port TCP 443:
proto tcp
remote vpn.domain.com 443
Remarque: Sur Mac OS X, les fichiers de configuration de Tunnelblick se trouvent dans "/Library/Application Support/Tunnelblick/Shared"
Remerciements
- Merci aux développeurs de SSLH (en).
- Merci à memo-linux.com (fr) pour SSLH: HTTPS et SSH sur le même port! (fr).
- Merci à Bernarerts family site (en) pour Debian - Share same port for HTTPS, SSH and OpenVPN (en).