forcer la connexion SSL + auth apache

Posted on July 29, 2014

Je souhaite faire une connexion sécurisée vers mon serveur de torrents. En effet, pas envie de voir quelqu’un qui sache ce que je fais sur ma connexion à la maison, ou que sur mon lieu de travail je lance des téléchargements de torrent comme video-de-mes-vacances.1080p.VO.multi.x264.mkv.

Pour ça, il faut forcer la connexion SSL à notre site, qui sera un proxy vers le serveur de torrents qui écoute en local. Peu importe le client torrent, j’utilise actuellement le démon deluged couplé à deluge-web, mais transmission marche bien aussi. À partir d’ici on suppose que l’URL du site à sécuriser est « torrent.example.com ».

Donc pour ça, on va commencer par créer un fichier contenant les mots de passe des utilisateurs que l’on souhaite laisser passer :

fichier de mot de passe des utilisateurs

htpasswd -c /path/to/passwords/passwdfile USER

Pour la suite, tout se fait dans un fichier d’hôte virtuel (nom arbitraire) comme /etc/apache2/sites-available/torrent.example.com-ssl. On force la connexion SSL au site torrent.example.com :

<VirtualHost *:80>
   ServerName torrent.example.com
   Redirect permanent / https://torrent.example.com/
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>

        SSLEngine On
        SSLCertificateFile /path/to/ssl/ca.cert
        SSLCertificateKeyFile /path/to/ssl/ca.key

        ServerAdmin moi@example.com
        ServerName torrent.example.com

        ProxyPass / http://IPLOCALE:PORT/
        ProxyPassReverse / http://IPLOCALE:PORT/
        <Proxy *>
                AuthType Basic
                AuthName intranet
                AuthUserFile /path/to/passwords/passwdfile
                Require user USER # ne laisse passer QUE USER
                # Require user USER1 USER2 USER3
        </Proxy>

        ErrorLog ${APACHE_LOG_DIR}/torrent.example.com-ssl.err

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/torrent.example.com-ssl.log combined

</VirtualHost>
</IfModule>

Je ne réexplique pas la génération des certificats auto-signés, expliquée dans un précédent billet. À partir d’ici, a2ensite torrent.example.com-ssl puis service apache2 reload devraient suffire pour ne laisser passer qu’un seul utilisateur, et redirige la connexion SSL vers une adresse IP locale, sur un certain port, où écoute votre serveur de torrents. Si on rajoute à cela l’authentification supplémentaire de votre client bittorrent, il va être difficile de faire mieux au niveau de la sécurité.

J’ai réussi à faire ça en lisant la documentation suivante :