Présentation

Ces derniers temps je me dis qu’il serait enfin temps de remplir ce blog, le shaarli set un bon suivi de veille technologique, mais une procédure pas à pas partagé par un passionné pour la communauté, c’est quand même mieux ! Surtout qu’au fil des ans, mon dépôt git privée de documentation technique devient conséquent !

Voici une guide sur l’installation d’une seedbox basé sur Transmission, avec son interface web, et avec le serveur web de votre choix. En bonus, nous configurerons une connexion HTTPS vers votre seedbox. (pensez à let’s encrypt)

Un peu d’histoire

transmission-logoTransmission est un client BitTorrent (qui permet de télécharger des fichiers torrent). Il est disponible sur un grand nombre de plateformes sous la forme d’un client « lourd », un outil en ligne de commande, ou encore un service en arrière plan (pour un serveur), ce dernier nous intéresse pour notre seedbox.

Transmission existe depuis le 17 septembre 2005, il est léger, simple, et surtout stable. Il remplit la majeure partie des fonctionnalités nécessaire pour un serveur torrent, on regrettera quelque lacunes, mais sa légèreté lui pardonnera facilement cela. 🙂

 

Qu’est-ce qu’une seedbox ?

Une seedbox est un serveur dédié au téléchargement et au partage de fichiers torrents. Transmission dispose d’une interface web qui nous permet de télécharger ces fichiers.

 

Pourquoi avoir une seedbox ?

Le fait que ce soit un serveur signifie que  :

  • vous disposez de beaucoup de stockage
  • vous disposez de pas mal de bande passante (montante comme descendante)
  • vous êtes protégé de mesure anticonstitutionnelle telle que l’HADOPI
  • vous pouvez regarder vos films ou séries en streaming depuis votre serveur
  • vous pouvez partager à la communauté, en continu et autant que vous le souhaitez

 

Procédure

 

Installation

C’est probablement le client qui s’installe le plus facilement, puisqu’il est disponible sous forme de paquet dans les dépôts.

aptitude install transmission-deamon

 

Configuration

Ensuite, on va pouvoir modifier le fichier de configuration ici :

vi /etc/transmission-daemon/settings.json

Attention : une fois les modifications effectuées, il faudra redémarrer le démon transmission avec la commande, un restart n’est en aucune façon nécessaire. :

service transmission-daemon reload

Transmission est maintenant accessible à cette adresse : http://IP_SERVEUR:9091/transmission/web/

Si vous tentez d’y accéder, vous aurez une erreur vous indiquant que vous n’avez pas les droits nécessaire pour y accéder. En effet la page est protégé par une whitelist d’IPs et une authentification par utilisateur et mot de passe.

Il va falloir aller chercher ici dans la conf :

« rpc-authentication-required »: true, // Activation de l’auth par mot de passe
« rpc-bind-address »: « 0.0.0.0 », // 127.0.0.1 pour écouter en local
« rpc-enabled »: true, // Activation de l’interface web
« rpc-password »: « MOT_DE_PASSE », // Tapez votre mot de passe, il sera salé au reload
« rpc-port »: 9091, // Port d’écoute
« rpc-url »: « /transmission/ », // Correspond à l’URL d’accès
« rpc-username »: « UTILISATEUR », // Nom d’utilisateur pour l’auth
« rpc-whitelist »: « 127.0.0.1 », // IPs à whitelist
« rpc-whitelist-enabled »: true, // Activation de la whitelist

(Attention à ne pas mettre les commentaires suivant les « // » dans votre configuration)

Le reste des options dans la configuration concerne les dossiers de téléchargement, le ratio de partage, la vitesse, les slots, les peers, etc.. Vous trouverez une explication complète du fichier ici.

Une fois la configuration achevée, vous pouvez commencer à télécharger/partager !

 

Serveur web

L’installation et la configuration de Transmission étant terminé, il ne reste plus qu’a configurer votre serveur web favoris pour accéder à la seedbox en HTTPS via un nom de domaine

 

Pré-requis

Voici les quelques pré-requis avant la configuration du serveur web de votre choix :

  • Faire pointer son sous-domaine (ou domaine) en A(avec NAT)(ou AAAA) sur l’IP de la seedbox
  • Faire pointer son sous-domaine (ou domaine) en AAAA sur l’IP de la seedbox
  • Installer Apache ou Nginx
  • Générer un certificat pour son domaine avec Let’s Encrypt (ou acme-tiny)

Il nous faut modifier la configuration de Transmission pour que le démon n’écoute qu’en local :

« rpc-bind-address »: « 127.0.0.1 »,

 

Reverse proxy HTTPS avec Nginx

Dans cet exemple nous prenons en compte que vous utilisez Nginx et que votre domaine est subdomain.domain.fr

La configuration sera à placer dans /etc/nginx/conf.d/seedbox/conf (ou /etc/nginx/sites-enabled/seedbox.conf, selon votre version de Nginx) :

upstream transmission  {
    server 127.0.0.1:9091;
}
server {
    listen 80;
    server_name subdomain.domain.fr;
    return 301 https://subdomain.domain.fr$request_uri;

    access_log /dev/null;
    error_log /dev/null;
}
server {
    listen 443 ssl http2;
    server_name subdomain.domain.fr;

    access_log /var/log/nginx/seedbox-access.log;
    error_log /var/log/nginx/seedbox-error.log;

    location / {
    return 301 https://$server_name/transmission/;

location ^~ /transmission {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header Connection «  »;
    proxy_pass_header X-Transmission-Session-Id;
       
location /transmission/rpc {
    proxy_pass http://transmission;
 }
       
  location /transmission/web/ {
    proxy_pass http://transmission;
  }
       
  location /transmission/upload {
    proxy_pass http://transmission;
  }
       
  location /transmission/web/style/ {
    alias /usr/share/transmission/web/style/;
  }
       
  location /transmission/web/javascript/ {
    alias /usr/share/transmission/web/javascript/;
  }
       
  location /transmission/web/images/ {
    alias /usr/share/transmission/web/images/;
  }
           
  location /transmission/ {
    return 301 http://$server_name/transmission/web;
  }
 }

    ssl_certificate /etc/letsencrypt/live/subdomain.domain.fr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/subdomain.domain.fr/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/subdomain.domain.fr/chain.pem;

    ssl_protocols TLSv1.2;
    ssl_ecdh_curve secp384r1;
    ssl_ciphers EECDH+AESGCM:EECDH+AES;
    ssl_prefer_server_ciphers on;
    resolver 80.67.169.12 80.67.169.40 valid=300s;
    resolver_timeout 5s;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 5m;
    ssl_session_tickets off;
}

 

Reverse proxy HTTPS avec Apache

Dans cet exemple nous prenons en compte que vous utilisez Apache et que votre domaine est subdomain.domain.fr

La configuration sera à placer dans /etc/apache2/sites-available/subdomain.domain.fr.conf (ou /etc/httpd/sites-available/subdomain.domain.fr.conf, si vous êtes sur CentOS) :

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
ServerAdmin admin@admin.admin
ServerName subdomain.domain.fr
ErrorLog logs/subdomain.domain.fr-error_log
CustomLog logs/subdomain.domain.fr-access_log common

RewriteEngine On
RewriteCond %{SERVER_PORT} =80
RewriteRule ^/(.*)$ https://%{SERVER_NAME}:443/$1 [R,L]
</VirtualHost>

<VirtualHost *:443>
ServerAdmin admin@admin.admin
ServerName subdomain.domain.fr
ErrorLog logs/subdomain.domain.fr-ssl_error_log
CustomLog logs/subdomain.domain.fr-ssl_access_log common

SSLEngine On
SSLCertificateFile « /etc/pki/tls/certs/mon_certificat.crt »
SSLCertificateKeyFile « /etc/pki/tls/private/mon_certificat.key »

ProxyPass / http://IP_SERVER:9091/
ProxyPassReverse / http://IP_SERVER:9091/
</VirtualHost>

Activons ensuite les modules mod_ssl, proxy et proxy_http :

sudo a2enmod mod_ssl
sudo a2enmod proxy

sudo a2enmod proxy_http
sudo systemctl restart apache2.service

 

Accès à l’interface web

Il ne vous reste plus qu’à joindre votre seedbox avec le lien https://subdomain.domain.fr

Puis d’entrée les identifiants du compte

transmission_connexionEt c’est parti pour le partage 🙂

transmission_interfaceweb