Creation seedbox

De wiki mdd
Aller à la navigation Aller à la recherche

Ce tutoriel a pour but d'expliquer comment installer une seedbox de zéro. Il fait volontairement le choix de certains outils et pas d'autres. Le but est de comprendre comment on installe certaines choses, de façon à pouvoir les appliquer à d'autres.
Il existe de nombreux scripts qui peuvent tout faire à votre place. Je ne décourage pas l'utilisation de ces scripts, mais je conseille de comprendre pourquoi et comment il font les choses. Voyez donc ce tutoriel un peu comme un linux from scratch, c'est bien d'installer une ditrib toute prête, mais c'est bien aussi de connaître un peu le moteur qu'il y a derrière ;)
Toutes les parties ne sont pas obligatoires, mais si vous les passez, soyez sur de savoir pourquoi, ou comment contourner cette partie.

Ce tutoriel va aussi reprendre beaucoup de documentation déjà existante, inutile de réinventer la roue.

Prérequis[modifier]

  • un serveur linux avec des accès root. Dans mon cas ce sera un serveur en Ubuntu 18.04, avec un user "steph" qui a le droit d'utiliser la commande sudo
  • des connaissances de base en administration linux (comment éditer un fichier, voir les logs, etc...
  • Un nom de domaine sur lequel vous avez la main. Il faudra créer une entrée dans votre nom de domaine pour votre serveur. Dans mon cas, mon serveur a l'adresse IP 1.2.3.4 et son nom sera seedbox.mondomaine.com. A terme, il faudra créer plusieurs autres enregistrements dns

Première sécurisation du système[modifier]

ssh[modifier]

Il est conseillé d'utiliser une clé ssh pour se connecter au lieu d'un password. Vous trouverez une documentation ici : https://doc.ubuntu-fr.org/ssh#authentification_par_un_systeme_de_cles_publiqueprivee

fail2ban[modifier]

Fail2ban est un outil qui scrute les logs de sécurité, et qui va automatiquement bloquer les IP qui font des tentatives d'intrusion. La documentation pour l'installation et l'utilisation se trouve ici : https://mondedie.fr/d/5318-%5BTuto%5D-Securisation-&-Logs-V.3-%7Bnginx%7D/2
A ce niveau, ne mettez pas en place toute la sécurisation qui se trouve sur cette page, vous risqueriez de vous retrouver bloqués par la suite !

Création d'un utilisateur dédié[modifier]

Afin de ne pas polluer ni le système ni le user principal, nous allons créer un utilisateur dédié (appelé "seed"). steph@op:~$ sudo adduser seed Adding user `seed' ... Adding new group `seed' (1001) ... Adding new user `seed' (1001) with group `seed' ... Creating home directory `/home/seed' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for seed Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] yCe user n'a pas besoin d'avoir les droits sudo/root.

Installation des premiers outils[modifier]

docker[modifier]

Docker va servir de base pour certains outils. Même si on pourrait lancer la plupart des outils via docker, on ne va le garder que pour quelques utilisations.
Pour ubuntu : $ sudo apt-get remove docker docker-engine docker.io containerd runc $ sudo apt-get update $ sudo apt-get install \   apt-transport-https \   ca-certificates \   curl \   gnupg-agent \   software-properties-common $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - $ sudo add-apt-repository \   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \   $(lsb_release -cs) \   stable" $ sudo apt-get install docker-ce docker-ce-cli containerd.io

(la doc debian se trouve ici : https://docs.docker.com/install/linux/docker-ce/debian/)
On va ajouter notre user (steph) et seed au groupe docker : $ sudo usermod -aG docker steph $ sudo usermod -aG docker seed

docker-compose[modifier]

docker-compose est une surcouche de docker, qui permet de lancer des "groupes" de container plus facilement. Pour l'installer : sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Premier pas sur la seedbox[modifier]

rtorrent[modifier]

Le premier outil d'une seedbox est le client torrent, avec son frontend. Dans notre cas, nous allons utiliser rtorrent (client torrent en ligne de commande), et rutorrent (frontend web)
$ sudo apt install rtorrent screen psmisc A partir de maintenant, nous allons passer sur le user seed $ sudo su - seed Nous allons créer le premier fichier de configuration de rtorrent : /home/seed/.rtorrent.rc <syntaxhighlight langauge="console"># Where rTorrent saves the downloaded files directory = /home/seed/torrent/downloads

  1. Where rTorrent saves the session

session = /home/seed/torrent/.session

  1. Which ports rTorrent can use (Make sure to open them in your router)

port_range = 50000-50000 port_random = no

  1. Check the hash after the end of the download

check_hash = yes

  1. Enable DHT (for torrents without trackers)

dht = off

  1. Enable encryption when possible

encryption = allow_incoming,try_outgoing,enable_retry

  1. SCGI port, used to communicate with Flood

scgi_port = 127.0.0.1:5000</syntaxhighlight>

Attention ! Pensez à changer les chemins (/home/seed) si vous avez choisi un autre utilisateur !

Il faut créer les répertoires $ mkdir -p /home/seed/torrent/downloads $ mkdir -p /home/seed/torrent/.session On repasse sur notre user "steph" en tapant exit, puis on crée un fichier de démarrage : $ sudo vi /etc/systemd/system/rtorrent.service

[Unit]
Description=rTorrent
After=network.target

[Service]
User=seed
Group=seed
Type=forking
KillMode=none
ExecStart=/usr/bin/screen -d -m -fa -S rtorrent /usr/bin/rtorrent
ExecStop=/usr/bin/killall -w -s 2 /usr/bin/rtorrent
WorkingDirectory=%h

[Install]
WantedBy=default.target

Puis on active et on lance le service $ sudo systemctl enable rtorrent $ sudo systemctl start rtorrent Pour vérifier qu'il tourne bien : $ sudo systemctl |grep rtorrent rtorrent.service loaded active running rTorrent

rutorrent[modifier]

Rutorrent est le client web qui permet de monitorer rtorrent. Pour l'installer, nous avons besoin d'un serveur web (nginx), mais que nous n'allons pas exposer sur le port habituel (qui est le 80). En effet, nous allons vouloir diffuser plusieurs "sites" depuis ce serveur, et nous utiliserons plus tard un reverse proxy, qui va nous simplifier la tâche.
$ sudo apt install git nginx php php-fpm Une fois installé, nous allons changer la configuration de nginx, en éditant le fichier /etc/nginx/sites-available/default
Remplacez leslignes

listen 80 default_server;
listen [::]:80 default_server;

par

listen 8082 default_server;
listen [::]:8082 default_server;

Décommentez la section php comme suit :

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;

                # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }
    • attention ** La version de php peut changer. Pour trouver la bonne pour vous, faites un ls /var/run/php/*sock et mettez le retour dans le fichier de conf nginx.

Puis redémarrez nginx $ sudo systemctl restart nginx Nous allons maintenant télécharger ruTorrent. Par défaut, nginx diffuse le contenu du répertoire /var/www/html. Nous allons donc mettre ruTorrent à cet endroit. $ cd /tmp $ git clone https://github.com/Novik/ruTorrent.git $ sudo cp -r ruTorrent/* /var/www/html $ sudo chown -R www-data: /var/www/html Allez maintenant sur http://monserveur.mondomaine.com:8082, et vous devriez voir la première interface de rutorrent :)

Quelques menus réglages[modifier]

Rutorrent va utiliser de nombreux plugins, qui nécessitent des installations complémentaires : $ sudo apt install unrar unzip python python-pip ffmpeg mediainfo sox $ sudo pip install cloudscraper Si vous rechargez la page, il y a beaucoup de messages d'erreur à ce niveau là. C'est presque normal. Nginx ne trouve pas les chemins par défaut des différents outils système. Il faut les renseigner à la main dans le fichier /var/www/html/conf/config.php, dans la section $pathToExternals
Pour trouver un chemin sous linux, vous pouvez utiliser la commande which : $ which php /usr/bin/php Remplissez tous les champs de cette section. Si certains outils n'y sont pas, n'hésitez pas à les installer avec la commande apt.
La configuration pour l'outil pgrep se trouve dans le fichier /var/www/html/plugins/_tasks/conf.php
La configuration pour l'outil python se trouve dans le fichier /var/www/html/plugins/_cloudflare/conf.php

Conclusion de la première partie[modifier]

Vous avez maintenant une seedbox fonctionnelle. Vous pouvez ajouter des fichier torrents, et ils vont se télécharger dans le répertoire /home/seed/torrents/downloads.
Reste à ajouter un peu d'automatisation :)