Installation d'un serveur dédie

sur une installation fraiche de Debian 9

  1. changez le password :
    passwd root
  2. installer sudo Par défaut sudo n'est pas installé sur Debian. Pour l'installer
    apt-get install sudo -y

    Ensuite il faut ajouter l'utilisateur au groupe sudo

    usermod -aG sudo yourusername

    Pour créer un utilisateur

    adduser username
  3. mise à jour :
    apt-get update
    apt-get upgrade
  4. Serveur synchro horloge atomique :
    apt-get install ntp ntpdate

    éditez /etc/ntp.conf pour ajouter les serveurs de temps

    # nano /etc/ntp.conf
    
    server ntp.midway.ovh
    server ntp.unice.fr

    et /etc/default/ntpdate pour vérifier la configuration.
    redémarrez les services :

    /etc/init.d/ntp restart
  5. pour un prompt en couleur, éditez
    nano .bashrc

    et mettre la ligne :

    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\](\033[01;32m\]\u@\h\033[01;31m\])\[\033[01;36m\] (\w) \$ \[\033[00m\]'

    enregistrez et :

    source .bashrc

    pour prendre en compte les modif.

  6. configuration de base réseau
    nano /etc/hostname

    et inscrire : gondor.me

    nano /etc/hosts

    et inscrire l'ip suivi de

    gondor.me gondor

    redémarrer le service :

    /etc/init.d/networking restart
  7. Installation de Webmin
    wget http://prdownloads.sourceforge.net/webadmin/webmin_1.881_all.deb  ( http://www.webmin.com/download.html pour les futures update )

    et

    dpkg --install webmin_1.881_all.deb

    Si il y a des erreurs, installer les librairies suivantes :

    apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl libmd5-perl
    apt-get install libnet-ssleay-perl libauthen-pam-perl libio-pty-perl apt-show-versions
    apt-get install -f
  8. Installation de Nginx, PHP, rtorrent et rutorrent avec un script automatisé.
    On commence par mettre à jour le serveur et installer Git:
    apt-get update && apt-get upgrade -y
    apt-get install git-core -y

    Pour configurer git :

    git config --global user.name "user_name"
    git config --global user.email "user_name@domaine.tld"

    On lance l'installation proprement dite:

    cd /tmp
    git clone https://github.com/exrat/rutorrent-bonobox
    cd rutorrent-bonobox
    chmod a+x bonobox.sh && ./bonobox.sh

    Juste à donner un nom d'utilisateur (+ de 3 lettres et en minuscule), un mot de passe et un email (pour Seedbox-Manager).
    ( Le script peut aussi vous en générer un automatiquement)
    (https://mondedie.fr/d/5399-Script-Installation-automatique-ruTorrent-nginx)

    Suite à l'installation de nginx, il y a une modification à faire. Editer le fichier /etc/nginx/sites-enabled/rutorrent.conf

    # nano /etc/nginx/sites-enabled/rutorrent.conf

    et modifié la ligne

    server_name _;

    par

    server_name gondor.me;


    suite à l'installation de PHP, pour configurer la timezone, éditez le fichier

    # nano /etc/php/7.2/fpm/php.ini

    et modifié la ligne

    ;date.timezone = 
    par
    date.timezone = Europe/Paris

    Puis redemarrez php-fpm par

    /etc/init.d/php7.2-fpm restart
  9. Installer MariaDB ( https://downloads.mariadb.org/mariadb/repositories/#mirror=ovh )
    sudo apt-get install software-properties-common dirmngr
    sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
    sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mariadb.mirrors.ovh.net/MariaDB/repo/10.2/debian stretch main'

    Quand les clés sont importées, on peux installer mariaDB avec:

    sudo apt-get update
    sudo apt-get install mariadb-server mariadb-client

    On peut également créer un fichier source.list pour mariaDB. Pour cela copier/coller les lignes suivantes dans un fichier dans /etc/apt/sources.list.d/(nommer le fichier MariaDB.list, c'est plus simple), ou ajouter les à la fin de votre fichier /etc/apt/sources.list

    # MariaDB 10.2 repository list - created 2018-03-31 19:20 UTC
    # http://downloads.mariadb.org/mariadb/repositories/
    deb [arch=amd64,i386,ppc64el] http://mariadb.mirrors.ovh.net/MariaDB/repo/10.2/debian stretch main
    deb-src http://mariadb.mirrors.ovh.net/MariaDB/repo/10.2/debian stretch main

    puis pour demarrer/vérifier que mariadb est en marche

    systemctl start mariadb
    systemctl status mariadb

    Par défaut l'utilisateur root ne peut se connecter que depuis localhost pour changer cela, et se connecter avec HeidiSQL depuis mon ordi:
    éditer le fichier /etc/mysql/my.cnf et changer la ligne

    bind-address = 127.0.0.1

    par

    bind-address = 0.0.0.0

    Puis se connecter à mariadb avec HeidiSQL en mode tunnel SSH

    Essayer aussi:

    mysql_secure_installation

    et

    - Set root password? [Y/n] y
    - Remove anonymous users? [Y/n] y
    - Disallow root login remotely? [Y/n] n // on autorise les connections autres que localhost
    - Remove test database and access to it? [Y/n] y
    - Reload privilege tables now? [Y/n] y
  10. Ajout de quelques extensions php qui pourraient manquer :
    apt-get install php7.2-mysql php7.2-gd php7.2-intl php7.2-sqlite3 php7.2-zip
  11. Installer un certificat SSL gratuit avec Let's Encrypt
    suivre ce tuto : https://mondedie.fr/d/7414-Tuto-Certificat-SSL-signe-gratuit-avec-Let-s-Encrypt-et-nginx
    On va commencer par stopper nginx le temps de l'installation car Let's Encrypt a besoin du port 80 pour fonctionner.
    service nginx stop

    On va mettre à jour le serveur

    apt-get update && apt-get upgrade

    Ensuite on va cloner le repo et se placer dans le répertoire :

    cd /tmp
    wget https://dl.eff.org/certbot-auto
    chmod a+x ./certbot-auto
    ./certbot-auto --help all

    Après cette étape il faut générer le certificat via let's encrypt, avec une clé RSA de 4096bits pour les plus parano.
    Vous pouvez retirer le paramètre “–rsa-key-size 4096” la clé rsa sera de 2048bits (paramètre par défaut)
    –standalone fait appel au serveur web de letsencrypt pour générer le certificat.

    ./certbot-auto --help
    ./certbot-auto certonly --standalone --rsa-key-size 4096

    Différentes choses vont vous être demandées :
    Une adresse e-mail pour pouvoir vous transmettre et vous prévenir de l'expiration de vos certificats.
    Les domaines pour lesquels vous souhaitez générer le certificat (en général www.votresite.fr et votresite.fr)
    L'acceptation des conditions.

    Configuration de nginx avec le certificat

    En premier lieu on va améliorer la configuration par défaut de nginx en suivant les recommandations de Mozilla.

    Création du fichier params.conf

    # nano /etc/nginx/ssl/params.conf
    
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_session_tickets off;
    
        ssl_ecdh_curve secp384r1;
    
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers "ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA";
    
        ssl_prefer_server_ciphers on;
    
        add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
    
        ssl_stapling on;
        ssl_stapling_verify on;
    
        ssl_trusted_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem;
    
        resolver 8.8.8.8;

    Note : la directive max age de Strict-Transport-Security correspond à 6 mois.
    On n'oublie pas d'inclure le fichier params.conf entre les balises http {} dans le fichier nginx.conf

    # nano /etc/nginx/nginx.conf
    
    http {
        include /etc/nginx/ssl/params.conf;
    }

    Les fichiers générés par Let's Encrypt sont placés dans le répertoire /etc/letsencrypt.
    Si tout s'est bien passé, le certificat et la clé que vous venez de générer se trouvent donc dans /etc/letsencrypt/live/votresite.fr.
    Exemple :

    root@server:/etc/letsencrypt/live/www.votresite.fr# ls -l                                                                                                              
    total 0                                                                                                                                                                         
    lrwxrwxrwx 1 root root 45 Nov  4 08:34 cert.pem -> ../../archive/www.votresite.fr/cert1.pem                                                                                
    lrwxrwxrwx 1 root root 46 Nov  4 08:34 chain.pem -> ../../archive/www.votresite.fr/chain1.pem                                                                              
    lrwxrwxrwx 1 root root 50 Nov  4 08:34 fullchain.pem -> ../../archive/www.votresite.fr/fullchain1.pem                                                                      
    lrwxrwxrwx 1 root root 48 Nov  4 08:34 privkey.pem -> ../../archive/www.votresite.fr/privkey1.pem

    Ce qui nous intéresse ici ce sont ces deux fichiers : fullchain.pem et privkey.pem.

    Dans votre fichier de configuration du vhost nginx (/etc/nginx/sites-enabled/rutorrent.conf si vous utilisez celui-ci), il suffit donc de renseigner l'emplacement de la chaine de certificat et de la clé.

    Exemple

    server {
        listen 443 ssl;
        server_name www.votresite.fr;
        ssl_certificate /etc/letsencrypt/live/www.votresite.fr/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.votresite.fr/privkey.pem;
    
        ## etc
    }

    On redémarre nginx :

    service nginx restart

    Votre domaine est maintenant doté d'un certificat SSL signé par Let's Encrypt.

    Comment vérifier la configuration de nos certificats

    Il y a quelques sites pour cela, en voici 2. Le but étant d'avoir un A+

    CryptCheck
    SSL Labs

    Renouveler un certificat

    service nginx stop
    ./certbot-auto renew
    service nginx start
  12. Installation de Plex Media Server
    basé sur ce tuto : https://mondedie.fr/d/5732-Tuto-Installer-Plex-Media-Server mais avec le dépôt officiel de Plex
    On ajoute le dépôt
    echo deb https://downloads.plex.tv/repo/deb ./public main | tee /etc/apt/sources.list.d/plexmediaserver.list
    curl https://downloads.plex.tv/plex-keys/PlexSign.key | apt-key add -

    On met à jour la liste des paquets et on installe PlexMediaServer :

    apt-get update
    apt-get install plexmediaserver

    On s'assure que PMS est bien en route :

    service plexmediaserver start

    AJOUT DU SERVEUR A VOTRE COMPTE PLEX
    On va maintenant attaquer la partie délicate. Il faut savoir que par défaut, votre serveur Plex est uniquement accessible depuis le réseau local de votre machine. Afin de pouvoir y accéder depuis l'extérieur, il faut ajouter celui-ci à votre compte Plex.
    Mais comment faire si on ne peut pas y accéder depuis l'extérieur ?
    On va ruser en utilisant un tunnel SSH. En gros, on va passer par notre serveur pour se connecter à notre serveur.

    • Lancez Putty ou Kitty et mettez l'adresse de votre serveur dans le champs IP (SSH)
    • Rendez-vous dans Connection>SSH>Tunnels dans le menu de gauche
    • Configurez le tunnel comme sur la capture suivante :

    • Retournez dans le menu “session” et sauvegardez la configuration
    • vous pouvez lancer la connexion et entrer vos identifiants

      Maintenant on va se connecter à notre serveur via l'adresse : http://localhost:8888/web/
      Si tout c'est bien passé, on devrait se connecter sur le serveur Plex, il devrait avoir trouver le serveur, et demander de se connecter à son compte Plex, ajouter les librairies, ….
      Quand tout est OK, on peut fermer la fenêtre et se connecter à Plex avec son compte https://app.plex.tv/
      Ne pas oublier de fermer Kitty, et d'enlever le tunnel dans Connection>SSH>Tunnel

  13. Firewall IPTABLES
    cd /root/
    git clone git://github.com/bmaeser/iptables-boilerplate.git
    cd iptables-boilerplate
    make

    Pour désinstaller

    cd /root/iptables-boilerplate/
    make uninstall

    Pour configurer

    nano /etc/firewall/services.conf

    et modifier/ajouter les règles, example:
    ouvre les ports pour SSH pour IP 192.168.0.1:

    22/tcp 192.168.0.1
    22/udp 192.168.0.1

    ouvre les ports pour HTTP pour toutes les IP

    80/tcp 0.0.0.0/0

    ouvre les ports pour HTTPS pour toutes les IP

    443/tcp

    Pour l'utiliser

    /etc/init.d/firewall (start|stop|restart|reload|force-reload|status)

    start: démarre le firewall
    stop: stoppe le firewall
    restart, reload, force-reload: redémarre le firewall
    status: affiche le status du firewall, affiche toutes les règles d'iptables
    version: affiche la version d'iptables-boilerplate

    Pour voir quels ports sont ouverts/utilisés

    netstat -paunt
  14. Installer Shaarli
    On commence par installer les dépendances
    curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
    echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list


    puis

    apt-get update && apt-get install yarn


    et ensuite

    apt-get install python3-venv


    Ensuite on installe shaarli

    mkdir -p /path/to/shaarli && cd /path/to/shaarli/
    git clone -b latest https://github.com/shaarli/Shaarli.git .
    composer install --no-dev --prefer-dist
    make build_frontend
    make translate
    make htmldoc
  15. Installation grabber xmltv

Pour installer WebGrabber++ il faut commencer par installer mono. Vérifier si il n'est pas déjà installé avec

mono -V

Si on a un message d'erreur, il n'est pas installé.
Pour l'installer, on commence par ajouter le repo

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/ubuntu stable-bionic main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update

et on installe par

sudo apt install mono-complet

(source pour installer mono https://www.mono-project.com/download/stable/#download-lin )
Ensuite on télécharge WebGrabber++ avec

cd ~
wget http://webgrabplus.com/sites/default/files/download/SW/V2.1.0/WebGrabPlus_V2.1_install.tar.gz

pour les autres versions beta http://webgrabplus.com/download/sw
Ensuite

tar -zxvf WebGrabPlus_V2.0.tar.gz
cd ~/.wg++
./install.sh

Et voilà!
Pour configurer voir le site : http://webgrabplus.com/