7 minute(s) de lecture

Raspi3NAS Je partage ici la configuration de mon raspiNAS: un serveur NAS (serveur de stockage de données accessible en réseau) à base de Raspberry pi3b+ , totalement sécurisé, sans aucun échange de password, totalement silencieux, capable de démarrer en moins de 15 secondes . J’‘y ai passé du temps car je n’ai pas trouvé un tutoriel qui réponde à tous les critères que je souhaitais mettre en oeuvre: il s’agit de plusieurs tutoriels que je vais citer ici afin de réaliser ce serveur NAS.

Choix de la configuration

Pour le choix du matériel tout d’abord j’ai opté pour un disque dur externe USB3 SSD d’1To: il a l’avantage d’être très performants et surtout silencieux car aucun effet mécanique (SSD). J’ai installé ma configuration sur un Raspberry pi3b+ pour privilégier sa faible consommation (15W max en pleine charge !) et la garantie de pouvoir le faire fonctionner en fanless (sans ventilateur), mais un serveur NAS à base de Rapberry pi4 serait plus performant car équipé de port usb3 et réseau LAN plus rapide. Dans mon cas je n’ai guère plus de 300Go à synchroniser donc je peux encore privilégier la modestie en terme de puissance, donc pas besoin d’un Raspberry pi4 de compétition auquel il aurait fallu rajouter un ventilateur pour le faire refroidir. J’ai disposé mon pi3 dans un boitier mini Pibow type ninja auquel j’ai retiré la dernière couche pour ne pas enfermer les composants dans une bulle de chaleur hermétique. Enfin j’ai ajouté des petits dissipateurs thermiques en alu adaptés au pi3.

Raspi3NAS

Les tutoriels suivis:

Raspbian Lite:

Dans un premier temps, si on veux viser un démarrage rapide sans surcharger son Raspberry de traitements et logiciels inutiles: rien de mieux que Raspbian Lite, sans interface graphique donc. Pour cela voici le tuto que j’ai suivi afin de l’installer sans écran ni clavier, à l’aide d’un autre ordinateur (un autre Raspberry pi dans mon cas) à partir duquel on se connecte en SSH.

Protéger sa carte SD

Le système linux va générer de nombreuses écritures de log et données temporaires dans les fichier /tmp, /var/tmp et /var/log. Ces nombreux cycles de lecture/écriture finissent pas tuer les blocs mémoire de la carte SD qui se corrompt au fil du temps jusqu’à devenir totalement inutilisable. Pour prolonger considérablement la durée de vie de sa carte SD il y cette simple astuce à mettre en oeuvre qui consiste à déplacer l’écriture de ces 3 fichiers directement dans la RAM à la place de la carte SD.

Sécuriser son SSH

la sécurisation du SSH est indispensable, non seulement pour se prémunir d’éventuelles attaques du port 22 par des robots (port par défaut d’un serveur SSH) mais aussi pour éviter de devoir se trimbaler un mot de passe stocké dans un fichier texte planqué, ou pire encore codés “en dur” dans les lignes de commande (si si j’ai vu des tutoriels comme ça …). 3 simples tutoriels m’ont été nécessaires, mais je conseille de n’activer le troisième qu’une fois le serveur NAS totalement opérationnel.

  • mettre en place des clés de cryptage RSA sécurisées en lieu et place d’un password: c’est ce qui va permettre de ne pas avoir à utiliser un mot de passe. Evidemment pour s’éviter d’avoir à utiliser un mot de passe il ne faut pas “surprotéger” sa clé RSA avec un mot de passe … il faut laisser le mot de passe de la clé RSA à vide. Ces clés peuvent être régénérées et modifiées de façon régulière pour les maniaques de la sécurité.
  • installer un service Fail2ban qui va bannir les adresses IP qui font des tentatives de connexion tenues en échec, ce qui anéanti toutes les tentatives d’attaque en force brute par les robots. Je conseille de ne le faire qu’une fois le serveur NAS totalement opérationnel, car vous risquez de vous auto-bannir au début …

Installer un serveur NAS

Une fois les accès SSH bien sécurisés, on peut attaquer dans le vif du sujet en installant un serveur NAS sur son Raspberry pi avec un service Samba. Pour ce qui me concerne j’ai monté mon disque dur d’1To sur: /home/shares/public/backup

Monitoring temps réel

sur une Unicorn HAT HD de 16*16 leds: c’est complètement optionnel et uniquement pour le fun car le serveur NAS fonctionnera très bien sans, mais terriblement sexy à l’utilisation! J’ai installé mon propre système de monitoring de CPU, RAM, espace disque (que j’ai adapté pour monitorer le disque d’1To et non pas la carte SD sur laquelle le système Raspbian est installé) et température du CPU sur mon raspiNAS.

Raspi3NAS

Voilà le serveur NAS est maintenant opérationnel et trop sexy! Maintenant il reste à voir comment s’y connecter depuis un autre ordinateur sur lequel la clé privée RSA a été installée pour matcher avec la clé publique sur le serveur NAS. Attention si le service Fail2Ban est déjà activé: vous pouvez vite vous retrouver banni en cas d’erreur avec les clés …

Logiciel de sauvegarde de données

Sous Linux ou windows, je n’ai rien trouvé de mieux que FreeFileSync pour synchroniser ses données sur un serveur NAS accessible en SSH. C’est très facile à utiliser.

Avec un Rapsberry pi j’ai finalement opté pour une synchronisation de mes données avec rsync en ligne de commande. J’ai trop galéré avec d’autres logiciels graphiques qui sont souvent une surcouche de rsync (Grsync, Luckybackup par exemple) qui ne m’ont pas paru fiables et incompréhensibles à configurer. Mon utlisation de rsync est très simple: je synchronise tout mon disque dur externe sur le NAS et je synchronise aussi le répertoire /home/pi/Documents de mon Raspberry pi sur mon serveur NAS: ce sont 2 lignes de commande que j’exécute de temps en temps (à peu près une fois par semaine).

L’avantage de passer par une ligne de commande c’est qu’elle peut être intégrée dans la cron table afin qu’elle soit exécutée régulièrement (toutes les 5mn, toutes les heures, etc …). Personnellement pas besoin: je me contente de synchroniser une fois par semaine.

Dans mon cas, voici ma source et ma cible (192.168.xx.xx correspond à l’adresse IP de mon serveur NAS sur mon réseau local). J’ai configuré ma BOX internet pour figer l’adresse IP qu’elle attribue à ce serveur NAS .

  • source: /media/pi/OlivDD/
  • Cible réseau sur le NAS: pi@192.168.xx.xx:/home/shares/public/backup/OlivDD/
rsync -av --progress --delete --stats --human-readable --exclude-from '/home/pi/Sync/exclude.txt' -e "ssh -pxxxxx" /media/pi/OlivDD/ pi@192.168.xx.xx:/home/shares/public/backup/OlivDD
  • -av: permet de dire à rsync d’être en mode archivage de données (a) et d’activer le “verbose” (v) pour voir les messages informatifs défiler.
  • –progress affiche la progression des sauvegardes
  • –delete va supprimer les fichiers en cible qui ont disparus à la source
  • –stats affiche des statistiques à la fin de la sauvegarde
  • –human-readable va afficher des informations converties pour être mieux lisibles (ko, Mo, Go …)
  • -exclude-from ‘/home/pi/Sync/exclude.txt’ va m’exclure tout ce que j’indique à ne pas sauvegarder dans un fichier texte: les répertoires planqués (.*/), les répertoires lots+found/, les fichiers zipés *.zip etc … on peut ici indiquer toutes les exceptions à ne pas sauvegarder.
  • -e “ssh -pxxxxx” permet d’indiquer une connexion ssh via le port xxxxx que vous aurez configuré au début. Si les clés RSA publiques/privées sont en place, la connexion ne nécessite aucun password. Si Fail2Ban est déjà actif, attention aux premiers essais …
  • enfin les deux paramètre finaux sont la source et la cible.

Lors de la première exécution, ça pique un peu en terme de temps: dans mon cas 6h30 pour synchroniser 265Go de données, plus de 88 000 fichiers. La température du pi3 avec son Unicorn HAT HD passe de 47°C (au repos) à environ 58°C en pleine synchronisation: pas de quoi utiliser un ventilateur à ce stade. Ensuite lors des synchronisations suivantes c’est extrêmement rapide: en quelques secondes à peine rsync identifie les nouveaux fichiers ou fichiers qui ont été modifiés parmi mes 88 000 fichiers, et la synchro vers le NAS est très rapide.

Ce tutoriel est parfaitement utilisable avec d’autres configurations et modèles de Raspberry pi:

  • Raspberry pi2: la seule limitation concerne l’alimentation 3,5W incapable de piloter un disque dur à travers le port USB d’un pi2. Il faut dans ce cas prendre un disque dur externe avec sa propre alimentation.
  • Raspberry pi3: tous les modèles sont compatibles avec cette configuration de NAS en fanless.
  • Raspberry pi4: aucun problème et il y aura plus de performance car il dispose de ports USB3 (contrairement aux PI2 et 3 qui n’ont que des ports USB2), et le réseau LAN est plus rapide. En revanche il va prendre +15°C par rapport à un pi3 donc il faut lui ajouter un ventilateur à la place de la matrice de leds. Le ventilapi4 de Garatronic semble parfait en terme d’efficacité et de silence, en plus c’est du made in France.
  • Configurer un NAS avec plusieurs DD? je n’ai pas essayé mais je pense que les alimentations ne vont pas suivre, il faudra envisager une alimentation externe pour les DD

Voilà ce serveur NAS me ravi à tous points de vue: totalement silencieux 0db, sobre (15W maxi), minuscule, sécurisé, un coût minimaliste (un pi3b+ coûte 35€, une carte SD16Go 7€ et un DD SSD de 1To on peut les trouver en promo à 150€) et un démarrage en moins de 15 secondes: c’est exactement ce que je voulais.