Vous en avez marre de vous sentir sous l’emprise des multiples services et du monopole du géant d’Internet qu’est Google ? Vous souhaitez maîtriser de très près les contenus que vous mettez en ligne ? Alors devenez votre propre hébergeur en vous auto-hébergeant avec un Raspberry Pi !
Grâce à ce tutoriel, vous découvrirez qu’est-ce que l’auto-hébergement, vous apprendrez à maîtriser votre Raspberry Pi, à installer la distribution GNU/Linux Raspbian, un serveur http et tous les autres outils nécessaires pour vous libérer de vos doutes quant à la maîtrise de vos données mises en ligne.
Qu’est-ce donc, l’auto-hébergement ?
Très bonne question. L’auto-hébergement est une pratique consistant à se fournir à soi-même des services Internet que l’on utilise. L’auto-hébergement s’oppose en fait à l’utilisation de services chez un prestataire, consistant à héberger ces services sur son propre serveur. Concrètement, ces différents services fournis en auto-hébergement peuvent être un serveur web, un serveur de messagerie électronique ou instantanée, etc. Cette pratique est aujourd’hui assez répandue dans les entreprises mais séduit également de plus en plus de particuliers comme vous et moi.
Si l’auto-hébergement séduit aujourd’hui, c’est parce qu’il présente plusieurs intérêts à ses pratiquants :
- il permet la maîtrise et la responsabilité totales de ses contenus et de ses données.
- il représente également une participation à la construction d’Internet dans le cas d’une mise en ligne.
- il contribue à la décentralisation des services sur Internet, décentralisation qui à grande échelle permettrait d’éviter la formation de monopoles comme on en voit sur Internet aujourd’hui, tel Google pour ne citer que lui.
- il est aussi une belle source d’amusement, de bricole et d’apprentissage pour les technophiles et autres passionnés d’informatique.
Cependant, pratiquer l’auto-hébergement impose quelques contraintes :
- bien entendu, cela demande d’avoir un accès à Internet.
- il nécessite de disposer d’un ordinateur allumé 24h/24 pour fournir les services hébergés.
- il nécessite l’achat d’un nom de domaine pour pouvoir ouvrir ses services à Internet (on peut néanmoins en trouver des gratuits).
- il demande de consacrer un peu de son temps pour maintenir le bon fonctionnement du ou des serveurs et de leurs services, ce qui pour un passionné n’est pas la plus grosse des contraintes.
On peut voir que comme tout chose en ce bas monde, l’auto-hébergement se partage entre ses avantages et ses inconvénients, mais nous pouvons voir aussi que certaines contraintes peuvent être adoucies. En effet prenons tout d’abord la première contrainte : la plupart des foyers aujourd’hui sont équipés d’une connexion Internet, cela ne devrait pas vous poser de problèmes. Ensuite, pour ce qui est de l’allumage permanent d’un ordinateur, sachez qu’il existe plusieurs matériels principalement utilisés pour l’auto-hébergement :
- les vieux ordinateurs mis à contribution en tant que recyclage de la machine.
- les mini-pc réputés pour avoir une basse consommation d’énergie et pour être peu bruyants.
- les nano-ordinateurs, tel le Raspberry Pi, également très peu consommateurs et silencieux.
Après avoir découvert son concept dans cette première partie, j’espère vous avoir familiarisé un tant soit peu avec l’auto-hébergement. Dans la partie suivante, nous allons nous concentrer sur le matériel que nous utiliserons pour nous lancer dans l’auto-hébergement : le Raspberry Pi.
Présentation du Raspberry Pi
Attaquons-nous maintenant à la partie matérielle de ce tutoriel, et découvrons ensemble sur quel support nous allons commencer notre aventure dans l’auto-hébergement : le Raspberry Pi.
Description et historique du Raspberry Pi
Le Raspberry Pi appartient à la famille des nano-ordinateurs, dont la taille est comparable à celle d’une carte de crédit. C’est David Braben, un créateur de jeux vidéos britannique, qui en 2006 créa le Raspberry Pi. Celui-ci était à l’origine destiné à encourager l’apprentissage de la programmation chez les jeunes à moindre coût. En effet, les deux premiers modèles de la carte ont été commercialisés pour la première fois à des prix de lancement de 25 et 35 $ US, c’est-à-dire à ce jour environ 20 et 28 €.
Les premiers prototypes du Raspberry Pi sont construits en 2006. Les premiers exemplaires sont mis en vente à partir de février 2012, avec le Raspberry Pi modèle B. En février 2013 viendra le modèle A, moins cher et moins performant. Depuis les premiers modèles A et B, d’autres ont fait leur apparition : le A+, le B+ et dernièrement le Raspberry Pi 2, appelé également 2 B.
Spécifications matérielles
Comme nous l’avons vu précédemment, le Raspberry Pi se décline en plusieurs modèles aux spécifications différentes. Leur point commun est leur architecture ARM, relativement plus simple que d’autres familles de processeurs et moins consommatrice en énergie. Pour aller plus vite, je vous ai concocté un petit tableau comparatif des différents modèles :
Modèle A | Modèle A + | Modèle B | Modèle B + | Modèle 2 B | |
Date de lancement | février 2013 | novembre 2014 | février 2012 | juillet 2014 | février 2015 |
Soc | Broadcom BCM2835 | Broadcom BCM2836 | |||
CPU | 700 MHz ARM1176JZF-S core (ARM11) | 900MHz quadricoeur ARM Cortex-A7 | |||
GPU | Broadcom VideoCore IV | ||||
RAM | 256 Mo | 512 Mo | 1 Go | ||
Ports USB (2.0) | 1 | 2 | 4 | ||
Sortie vidéo | Composite et HDMI | HDMI et Jack | Composite et HDMI | HDMI et Jack | |
Connectique réseau | Non | Ethernet | |||
Puissance | 300 mA (1,5 W) | 200 mA (1 W) | 700 mA (3,5 W) | 600 mA (3 W) | |
Dimensions | 85,60mm × 53,98mm × 17mm | 65mm × 56.50mm × 17mm | 85,60mm × 53,98mm × 17mm | ||
Poids | 45 g | 23 g | 45 g |
Revenons en à nos moutons…
Dans notre cas de figure et dans le cadre du tutoriel, nous allons utiliser un Raspberry Pi modèle B (le B+ et le 2 B peuvent également convenir), car nous aurons besoin d’un port Ethernet, ce que les modèles A et A+ ne proposent pas. Voici sa bouille :
Mais, me direz-vous, pourquoi utiliser un Raspberry Pi pour ce tutoriel, et pas un vieil ordinateur ou un mini-pc ? Laissez-moi vous lister les avantages de ce petit bijou de technologie.
Tout d’abord, comme il a été dit plus haut, le Raspberry Pi est un nano-ordinateur, ce qui lui permet de prendre peu de place, d’être totalement silencieux, de peu chauffer et de peu consommer. Ces quatre avantages sont de gros arguments dans le cas d’un auto-hébergement chez un particulier. Qui voudrait laisser constamment allumé une grosse tour d’ordinateur équipée de ventilateurs bruyants, ou encore un mini-pc tellement concentré qu’il ne tiendra pas sous le moindre petit excès de chaleur ? Bien sûr, toutes les tours ne sont pas bruyantes, et tous les mini-pc ne chauffent pas comme des fours, mais cette exagération me permet de vous illustrer mon propos.
On peut également parler d’un autre avantage sur l’aspect idéologique de la chose : le Raspberry Pi est open-source, ainsi les schémas et les plans du circuit imprimé ont été rendu publics par son créateur. Cela fait un petit plus pour nos amis libristes.
Cependant, ce type de matériel a un désavantage : il n’est pas très puissant. Avec son processeur cadencé à 700 Mhz (on peut néanmoins l’overclocker jusqu’à 1Ghz) et ses 512 Mo de mémoire vive, le Raspberry Pi nous permettra d’auto-héberger quelques services peu gourmands en ressources. Cela convient pour un auto-hébergement particulier, plus axé sur l’amusement et la bricole, mais ne conviendra pas pour une entreprise souhaitant un auto-hébergement de haute qualité et de haute stabilité pour garder ses données les plus secrètes.
On peut noter cependant que depuis février 2015, le Raspberry Pi 2 B vous met à disposition 1 Go de mémoire vive ainsi qu’un processeur cadencé à 900 Mhz, ce qui commence à faire une bonne configuration pour ce type de matériel.
Liste du matériel requis
Voici pour finir la liste exhaustive du matériel minimum requis pour nous lancer dans l’auto-hébergement :
- Bien évidemment, un Raspberry Pi modèle B, B+ ou 2 B.
- Une alimentation pour brancher notre Raspberry Pi.
- Une carte Micro SD et son adaptateur SD.
- Un câble Ethernet.
Certains éléments n’étant pas indispensables peuvent être un plus pour votre Raspberry Pi, comme une coque de protection, un dongle Wi-fi en cas de nécessité, etc.
Vous pourrez trouver tout ceci sur les sites des fournisseurs de Raspberry Pi, et aussi sur certaines plate-formes de vente spécialisées en informatique et multimédia.
Bien, je pense avoir fait le tour de la question concernant le Raspberry Pi et le matériel nécessaire pour continuer ce tutoriel. Passons alors à la partie suivante : la préparation de la carte Micro SD.
Raspbian, la distribution GNU/Linux à la sauce framboise
Tout ordinateur qui se respecte (et tout ordinateur conçu pour fonctionner) a besoin d’un logiciel très très important : le système d’exploitation. Ce système d’exploitation est en fait un ensemble de programmes ayant la lourde tâche de réguler et diriger l’utilisation des capacités de l’ordinateur, comme le stockage de mémoire, la communication vers des réseaux ou des périphériques, etc.
GNU/Linux
Le Raspberry Pi a été conçu pour fonctionner avec le système d’exploitation GNU/Linux. GNU/Linux est un système d’exploitation libre, qui a une structure particulière mais importante à saisir. Pour faire simple, nous retrouvons à l’origine les programmes du projet GNU, créés par Richard M. Stallman et son équipe en 1983 qui souhaitaient écrire un système d’exploitation totalement libre inspiré de UNIX. Près du but, Stallman et son équipe prennent du temps pour réaliser le noyau, qui constitue le cœur du système. C’est là qu’entre en jeu le noyau Linux, créé par Linus Torvalds en 1991. Depuis, c’est sur ce savoureux mélange que sont créées les distributions GNU/Linux, telles Debian, Slackware, Ubuntu, etc.
Raspbian, un souci de FPU
Pour ce tutoriel, nous nous intéresserons plus particulièrement à une distribution créée spécialement pour le Raspberry Pi, basée sur la distribution Debian : Raspbian. Le mot « Raspbian » est en fait un mot-valise, provenant de la fusion des mots « Raspberry Pi » et « Debian ». Il s’agit d’une Debian optimisée pour les architectures ARMv6, tel le processeur du Raspberry Pi (ARM11). Pour comprendre pourquoi cette distribution a été conçue, plongeons-nous dans le contexte des architectures ARM.
ARM est une architecture matérielle : son rôle est de décrire l’agencement des composants électroniques et leur interaction. On peut citer parmi les architectures les plus répandues l’Intel x86, l’ARM, l’ancien PowerPC de Macintosh, etc. Les architectures ARM sont beaucoup utilisées sur des SoC, intégrant sur une seule puce des éléments tels le micro-processeur et le processeur graphique.
Aujourd’hui, on retrouve principalement trois versions de l’architecture ARM : l’ARMv5, l’ARMv6 et l’ARMv7. Ces trois versions différentes sont utilisées respectivement sur des vielles puces d’entrée de gamme comme l’ARM9, sur des puces de moyenne gamme comme l’ARM11 (dont est doté le Raspberry Pi) et sur des puces plus actuelles, comme les Snapdragon. Les architectures ARM peuvent proposer en option la possibilité d’intégrer une FPU, élément permettant d’effectuer des calculs sur les nombres flottants. On retrouvera ses FPU parfois sur des ARMv6 et sur la majorité des ARMv7.
Le Raspberry Pi embarque un système sur puce Broadcom, intégrant un ARM11 (ARMv6) comprenant une FPU. Or, avant l’arrivée de Raspbian, les versions ARM de Debian ne supportaient pas les puces ARMv6. Ainsi, les puces ARMv6 devaient se contenter d’une Debian ARMv5, ne supportant pas la FPU, exécutant de façon logicielle se que la puce aurait pu faire de façon matérielle. Cette pratique entraînait une importante perte de performances.
Puis vint la libération : en 2012, la distribution Raspbian voit le jour. Elle est optimisée pour les ARMv6 avec FPU, la rendant beaucoup plus rapide que la version Debian ARM de base.
Autres distributions pour le Raspberry Pi
Il existe cependant d’autres distributions pouvant être installées sur le Raspberry Pi. On peut citer parmi elles Pidora, une version optimisée de Fedora pour Raspberry Pi, OpenElec et RaspBMC, conçues pour fonctionner avec le media center XBMC, ou encore Arch Linux avec sa version ARM.
Nous utiliserons tout de même Raspbian dans ce tutoriel. Étant basée sur Debian, réputée très stable et très utilisée pour des serveurs, elle est idéale pour les débutants et m’a ainsi semblé la plus indiquée pour nous.
Préparer le système, installer et configurer Raspbian
Cette partie va nous amener à construire la base de notre projet. Nous allons installer Raspbian, la distribution GNU/Linux sur laquelle nous installerons nos différents services tels que le serveur http, le serveur ftp, etc. Cette partie du tutoriel se composera donc principalement d’une série d’opérations et de commandes à effectuer, dont je vous expliquerai le sens au fur et à mesure.
Installation de Raspbian
Nous commençons donc par installer Raspbian sur notre carte Micro SD. L’installation d’une distribution sur un Raspberry Pi ne s’effectue pas de la même façon que sur un ordinateur. Nous n’aurons pas besoin de faire un live-cd de la distribution et n’aurons pas d’installateur graphique. En effet, l’installation consiste à écrire l’image de la distribution sur la carte Micro SD, et simplement de booter dessus avec le Raspberry Pi. Une fois cela fait, notre Raspbian n’a plus qu’à être configurée !
Tout d’abord, nous aurons besoin de récupérer l’image .img de la distribution. Pour cela, rendez-vous à cette adresse et téléchargez la dernière version de Raspbian.
Nous allons maintenant écrire cette image sur notre carte Micro SD. Il existe deux méthodes selon le système d’exploitation sur lequel vous allez effectuer l’écriture.
Votre carte Micro SD doit être formatée avec le système de fichiers FAT32 pour effectuer l’écriture de l’image.
Sous Windows
L’outil d’écriture d’image que nous allons utiliser sur un système Windows s’appelle Win32 Disk Imager.
- Insérez votre carte SD dans le port approprié sur votre ordinateur.
- Téléchargez le logiciel à cette adresse et décompressez l’archive .zip.
- Lancez l’exécutable Win32DiskImager. Voici comment se présente l’interface du logiciel : Sélectionnez l’image de Raspbian dans le premier champ, et la lettre de la carte SD dans le second. Veillez à sélectionner la bonne lettre (type G:, F:) représentant la carte SD. Si vous vous trompez, l’opération effacera tout le contenu de votre disque. Pour vérifier quelle lettre a été assignée à votre carte SD, allez dans le Poste de travail.
- Lancer l’écriture avec le bouton « Write » et laissez l’opération se terminer.
- Une fois l’écriture terminée, vous pouvez éjecter votre carte SD et passer à la suite de l’installation.
Sous GNU/Linux et Mac OS X
L’outil d’écriture d’image est le même concernant les systèmes d’exploitation Mac OS X et basés sur GNU/Linux. Cet outil s’appelle dd
et s’effectue en ligne de commande.
- Commençons par lister les différentes partitions et différents périphériques actuellement montés sur notre système avec la commande
df -h
. - Insérez votre carte SD dans le port approprié sur votre ordinateur et relancez la commande
df -h
pour afficher votre périphérique. Dans mon cas, la carte SD s’appelle/dev/mmcblk0p1
. Ce nom représente la partition montée de la carte SD. Or, nous souhaitons installer Raspbian sur la totalité de la carte, aussi faut-il enlever l’identifiant de la partition, qui ici estp1
. Nous devons donc seulement garder/dev/mmcblk0
. Il se peut que le nom de la carte soit/dev/sdc1
ou/dev/sdd1
, etc. Dans ce cas, vous aurez besoin d’enlever le1
et de conserver/dev/sdc
ou/dev/sdd
. Pour la cohérence du tutoriel, je me baserai sur/dev/mmcblk0
. - Nous allons maintenant démonter la carte SD, pour éviter que des fichiers ne soient lus ou écrits sur la carte pendant l’écriture de l’image. Pour cela, effectuez la commande
umount /dev/mmcblk0
. - Placez-vous dans le dossier où se situe l’image de Raspbian que vous avez téléchargé précédemment et ouvrez-y un terminal. Pour écrire l’image sur la carte, effectuez la commande
dd bs=4M if=2014-12-24-wheezy-raspbian.img of=/dev/mmcblk0
. Ici, vous donnez trois paramètres à la commande :bs=4M
indique à l’outil de laisser 4 Mo de libre au début de la carte,if=2014-12-24-wheezy-raspbian.img of=/dev/mmcblk0
indique le chemin où se trouve l’image de Raspbian, etof=/dev/mmcblk0
indique l’emplacement où écrire l’image. Veillez à bien renseigner les chemins correspondants pour ces deux derniers paramètres. N’essayez pas d’interrompre le processus d’écriture même si vous ne voyez rien dans votre console témoignant de son activité. L’outil ne rend seulement qu’un compte-rendu de l’opération à la fin de l’écriture. Celle-ci peut durer plusieurs minutes, soyez patient ! - Une fois que l’outil a terminé l’écriture, vous pouvez éjecter la carte SD et passer à la suite de l’installation.
Suite de l’installation
Maintenant que l’image a été écrite sur la carte Micro SD, vous n’avez plus qu’à insérer votre carte SD dans le port approprié sur le Raspberry Pi, et allumer la bête pour terminer l’installation. Pour cela, branchez-le Raspberry Pi à votre modem avec le câble Ethernet, et branchez le câble d’alimentation. L’installation est terminée !
Configuration de Raspbian
Nous passons à un gros morceau de notre tutoriel : la configuration de Raspbian. Par celle-ci, nous allons faire en sorte d’optimiser au mieux la distribution pour accueillir un serveur web.
Connexion au Raspberry Pi via SSH
La première étape de la configuration consiste à rentrer dans le système d’exploitation à distance grâce à SSH. SSH est un protocole réseau qui a pour particularité d’être sécurisé grâce au chiffrement : en effet, une connexion SSH impose un échange de clés de chiffrement, ce qui garantit la sécurité de la communication. C’est par ce protocole que nous allons pouvoir nous connecter au Raspberry Pi à distance. Comme nous l’avons vu à la fin de l’installation de Raspbian, votre Raspberry Pi devrait être à ce stade allumé et raccordé à votre modem par un câble Ethernet.
Pour nous connecter au Raspberry Pi via SSH, nous allons avoir besoin de connaître l’adresse IP qui a été donnée à celui-ci. Pour cela, entrez dans la page d’administration de votre modem, en tapant l’adresse IP de votre modem dans la barre d’url de votre navigateur favori. Généralement, cette adresse est 192.168.0.1
.
Selon votre modem, vous devriez pouvoir accéder à un menu listant tous les matériels raccordés au réseau émis par le modem. Dans la liste devrait apparaître notre chère framboise ! Retenez bien son adresse IP pour la suite du tutoriel.
Pour utiliser le protocole SSH, deux choix s’offrent à nous : utiliser un client graphique ou la ligne de commande. Je vous recommande d’utiliser la ligne de commande si vous êtes sur un système GNU/Linux ou Mac OSX, et le logiciel PuTTY si vous utilisez Windows.
Connexion SSH en ligne de commande
Si vous souhaitez utiliser PuTTY pour vous connecter via SSH, passez directement au point suivant.
Si vous souhaitez passer par votre terminal favori, ouvrez-le et effectuez simplement la commande suivante :
ssh pi@ipdevotrerasp
Dans cette commande, pi
correspond au nom d’utilisateur avec lequel on souhaite se connecter au Raspberry Pi. En effet, Raspbian créé deux utilisateurs par défaut : pi et root. Il vous suffit de remplacer la chaîne ipdevotrerasp
par l’adresse IP que vous deviez retenir quelques lignes plus haut, et la connexion SSH est en route ! Mais ce n’est pas fini : en arrivant devant la porte de votre Raspberry Pi, un mot de passe vous est demandé. Par défaut, celui-ci est raspberry
. Nous verrons plus loin comment le modifier.
Connexion SSH avec PuTTY
Pour les amoureux de Windows et les réticents face à la ligne de commande, voici un moyen de se connecter en SSH grâce à un logiciel doté d’une interface graphique : PuTTY. Pour l’utiliser, il va falloir le télécharger ! Vous pouvez le faire à cette adresse : Télécharger PuTTY. Une fois que vous avez installé le logiciel, lancez-le : vous arrivez sur l’interface de PuTTY :
Cette interface se compose :
- d’une entrée « Host Name » : c’est ici que l’on rentre l’adresse du serveur ou l’adresse IP à laquelle on souhaite se connecter.
- d’une entrée « Port » : ici on indique quel port on souhaite utiliser pour la connexion.
- d’un choix de différents protocoles réseau : on coche le protocole voulu.
Dans notre cas, il vous faut compléter ces champs avec les valeurs suivantes :
- l’entrée Host Name recueille l’adresse IP de votre Raspberry Pi que vous avez retenue quelques lignes plus haut.
- l’entrée Port aura la valeur
22
: c’est le port généralement utilisé pour SSH. - Enfin, le protocole à choisir est bien évidemment SSH.
Lancez la session. Vous voilà à la porte de votre Raspberry Pi ! Celui-ci vous demande de montrer patte blanche en renseignant le nom d’utilisateur et le mot de passe
de connexion : ceux-ci sont pi
et raspberry
. Nous verrons ultérieurement comment modifier le mot de passe.
Configuration préliminaire et raspi-config
Nous arrivons maintenant à la configuration pure et dure de Raspbian. Commençons par définir un mot de passe à l’utilisateur root :
sudo passwd root
Entrons dans une session super-utilisateur avec la commande su
:
su
Pour des raisons de sécurité, nous prendrons l’habitude de nous connecter via SSH avec un utilisateur lambda comme peut l’être l’utilisateur pi, puis nous nous identifierons comme administrateur. Pour effectuer la configuration préliminaire de Raspbian, celle-ci embarque un petit outil très pratique, qui par le biais d’une interface semi-graphique nous permettra de configurer deux-trois petites choses au niveau de taille de mémoire allouée à la puce graphique, au niveau des locales, etc. Lançons donc cet outil :
raspi-config
Voici le menu sur lequel vous devriez tomber :
img interface raspi-config
Expand Filesystem
Ce menu propose d’étendre la partition racine / sur toute la capacité de la carte SD. Le choix d’effectuer cette opération ne dépend que de vous, sachez juste qu’à ce stade, Raspbian utilise seulement environ 3 Go pour la partition système. Sur une carte SD de 8 Go, il peut être intéressant d’étendre cette partition pour bénéficier du maximum de capacité.
Change User password
Le second menu permet de changer le mot de passe de l’utilisateur pi. Pour le moment nous n’avons pas besoin de faire cela, car pour des raisons de sécurité que je vous détaillerai plus tard, nous allons supprimer l’utilisateur pi et le remplacer par un autre au nom de votre choix.
Enable Boot to Desktop/Scratch
Permet de changer les préférences de boot du Raspberry Pi. Pas d’utilité pour nous.
Internationalisation Options
Permet de régler l’heure, la date, le clavier et les fichiers de locales de Raspbian. Sélectionnez les informations vous correspondant.
Enable Camera
Utile pour activer le module caméra que peut accueillir un Raspberry Pi. Il va sans dire qu’il ne nous sera d’aucune utilité ici.
Add to Rastrack
Rastrack est une carte interactive recensant les localisations des différents Rasperry Pi enregistrés à travers le monde. Vous pouvez toujours le faire si cela vous amuse !
Overclock
Ce menu vous propose d’overclocker le processeur du Raspberry Pi. Plusieurs niveaux sont proposés. Personnellement, je n’ai pas eu besoin de cette fonctionnalité pour faire tourner mon serveur auto-hébergé. Là aussi, c’est à vous de voir.
Advanced Options
Ici, encore une liste de menu dont je ne ferai pas le tour. Un seul nous intéresse particulièrement : Memory Split. Ce menu vous permet de renseigner la quantité de mémoire que vous souhaitez rendre disponible pour le processeur graphique du Raspberry Pi. Dans le cas d’un serveur web dénué d’interface graphique, nous allons renseigner la valeur minimale possible : 4 Mo.
Pour terminer la configuration préliminaire, sortez de l’outil raspi-config. Passons à la suite de la configuration !
Configuration du réseau
Nous allons désormais nous atteler à la configuration du réseau pour permettre au Raspberry Pi d’avoir accès à Internet. Deux cas de figure sont envisageables : dans le premier cas, votre Raspberry Pi restera à l’avenir connecté à votre modem de façon filaire, c’est à dire par le biais d’un câble Ethernet. Deuxième possibilité : vous envisagez de connecter votre Rasp en utilisant un dongle Wi-fi. Nous allons aborder les deux façons de procéder dans cette partie.
Connexion filaire
Prenons ici le cas d’une connexion filaire au modem.
Éditez le fichier /etc/network/interfaces
:
nano /etc/network/interfaces
Voici les quelques lignes qui vont venir former ce fichier :
auto lo
iface lo inet loopback
iface eth0 inet static
address 192.168.xx.xx
netmask 255.255.255.0
network 192.168.xx.xx
broadcast 192.168.1.255
gateway 192.168.xx.xx
Ces lignes définissent les paramètres réseaux de votre accès Internet. On voit tout d’abord l’interface réseau renseignée, ici eth0
. Cette interface réseau correspond à l’interface ethernet, ce qui est notre cas. Ensuite viennent plusieurs adresses IP :
address
: cette ligne renseigne l’adresse IP que nous allons donner au Raspberry Pi. Cette précision nous permet de lui assigner une IP fixe de façon à ce que nous la connaissions toujours. Il faut que cette adresse IP soit comprise dans la plage d’IP que votre modem vous met à disposition. Par exemple, on peut mettre192.168.0.42
.netmask
: cette ligne correspond au masque de sous-réseau. Cette valeur ne sera pas modifiée.network
: cette ligne contient l’adresse IP de votre modem. Généralement, celle-ci est192.168.0.1
.broadcast
: c’est l’adresse de diffusion. Elle ne sera pas modifiée.gateway
: cette adresse désigne la passerelle qui relie notre réseau local à Internet. Dans notre cas, c’est le modem qui fait office de passerelle. L’adresse à renseigner ici sera donc celle du modem.
Remplacez donc le contenu du fichier par ces quelques lignes que vous aurez bien évidemment complété avec vos informations. Le réseau est maintenant configuré. Vous n’avez plus qu’à redémarrer le Raspberry Pi pour prendre en compte le changement d’adresse IP de ce dernier :
reboot
Connexion Wi-Fi
Prenons le cas d’une connexion Wi-Fi au modem par le biais d’un dongle Wi-fi. Vous verrez que je ne traite ici que le cas d’une connexion Wi-Fi protégée par une clé WPA, et que je ne prendrai pas en compte le cas d’une connexion protégée par une clé WEP. En effet, il n’est pas recommandé d’utiliser une clé WEP pour des raisons de sécurité : WEP n’est aujourd’hui pas sécurisé et est déprécié.
Pour configurer notre accès à Internet, nous allons utiliser le programme wpa_supplicant
. Commençons donc par l’installer :
apt-get update
apt-get install wpasupplicant
Une fois cela fait, nous allons restreindre les permissions du fichier /etc/network/interfaces
pour empêcher que n’importe qui aille toucher à son contenu. En effet, il contiendra la clé WPA-PSK du réseau que nous aurons au préalable « hashé », c’est-à-dire crypté.
chmod 0600 /etc/network/interfaces
Passons au hashage de la clé WPA-PSK, appelée également « clé pré-partagée ». Pour cela, vous aurez besoin de connaître le SSID de votre réseau (le nom de votre réseau comme vous pouvez le lire dans votre gestionnaire de connexions) et votre clé WPA-PSK.
wpa_passphrase <votressid> <votreclé>
Cette commande devrait vous renvoyer trois lignes, avec dans la dernière une chaîne de caractères incompréhensible. C’est celle-ci qui nous intéresse pour la suite de la configuration du réseau. Mémorisez-la !
Éditez le fichier /etc/network/interfaces
:
nano /etc/network/interfaces
Remplacez le contenu du fichier par ces quelques lignes que nous allons tout de suite analyser :
auto wlan0
iface wlan0 inet dhcp
wpa-ssid <votressid>
wpa-psk <votrecléhashée>
Comme vous pouvez le voir, rien de bien compliqué ici : on appelle l’interface réseau wlan0
correspondant au Wi-Fi, puis il vous suffit de compléter les deux dernières lignes avec le SSID et la clé hashée que vous deviez mémoriser précedemment. Une fois que vous avez sauvegardé ce fichier, finissez la configuration du réseau avec cette commande :
ifup wlan0
La configuration est terminée ! Vous n’avez plus qu’à redémarrer votre Raspberry Pi pour prendre en compte les modifications :
reboot
Optimisation de Raspbian pour un serveur
Nous voici arrivés à la dernière partie de notre longue configuration : l’optimisation de Raspbian pour qu’elle puisse commencer son rôle de serveur sans tous les paquets et services superflus, par exemple tout ce qui est lié à l’affichage graphique, le son, etc.
Suppression de modules, services et autres éléments inutiles
Notre première étape dans ce grand ménage de printemps consiste à ne laisser que deux terminaux. En effet, la distribution Raspbian, comme beaucoup de distributions GNU/Linux, nous propose par défaut six terminaux, nommés de tty1 à tty6. Nous allons donc supprimer les quatre derniers, de façon à en laisser un pour la session actuelle, et un terminal de secours. Pour cela, éditez le fichier /etc/inittab
:
nano /etc/inittab
Cherchez les lignes correspondant aux six consoles disponibles et commentez les quatre dernières en les « diésant » comme ceci :
1:2345:respawn:/sbin/getty --noclear 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6
Continuons notre oeuvre en désactivant le module de son, qui ne servira pas non plus. Éditez le fichier suivant et commentez la seule ligne présente snd-bcm2835
:
nano /etc/modules
En ce qui concerne les services inutiles, ils sont au nombre de trois : triggerhappy, plymouth et plymouth-log. Quels sont leurs rôles pour que nous voulions les désactiver ?
- triggerhappy est un service qui gère les évènements déclenchés par raccourcis clavier (par exemple la touche pour augmenter le son), ou depuis d’autres supports externes comme des joysticks, etc.
- plymouth et plymouth-log sont le service qui affichent un joli écran de démarrage quand celui-ci est activé.
Comme vous pouvez le voir, ces trois services sont inutiles pour notre futur serveur. Pour les désactiver, il nous faut effectuer deux commandes par nom de service. La première consiste à stopper le service pour l’empêcher de s’activer automatiquement à chaque démarrage :
/etc/init.d/<nomduservice> stop
Il vous suffit donc de répéter trois fois cette commande en remplaçant chaque fois la chaîne <nomduservice>
par triggerhappy
, plymouth
et plymouth-log
. La seconde commande consiste à enregistrer les modifications effectuées avec la commande précédente :
update-rc.d -f <nomduservice> remove
Là aussi, effectuez cette commande pour chaque service.
Gestion des utilisateurs
Comme nous l’avons plus haut dans la première partie de la configuration de Raspbian, nous allons effectuer quelques modifications sur les utilisateurs, et cela pour une question de sécurité. En effet, l’utilisateur par défaut est pi
. Cela est vrai pour toute Raspbian nouvellement installée, cela constitue donc une vulnérabilité car si quelqu’un de mal intentionné tente de rentrer dans un système Raspbian, il essayera en premier lieu de se connecter avec cet utilisateur. Le supprimer et le remplacer par un utilisateur dont le nom a été choisi par vous rendra la tâche plus difficile au pirate, qui devra deviner le nom d’utilisateur à utiliser pour se connecter. Pour créer un nouvel utilisateur, voici la commande que nous allons utiliser :
useradd -m -d /home/<user> -s /bin/bash <user>
Que signifie-t-elle ? Tout d’abord, on créé un utilisateur avec la commande useradd
. Ensuite, le premier paramètre de cette commande, -m
, indique que nous allons créer un dossier personnel pour l’utilisateur. Le paramètre -d
suivi d’un chemin de répertoire indique où se trouve le dossier personnel que nous décidons d’assigner à cet utilisateur. Le paramètre -s
, lui aussi suivi d’un chemin, indique quelle interface shell utiliser. L’interface shell est une couche logicielle permettant la liaison homme-machine en fournissant une interface utilisateur. Ici, nous allons utiliser le bon vieux bash, mais vous pouvez très bien utiliser d’autres shells, comme sh, zsh, etc. Enfin, on termine notre commande en indiquant le nom de l’utilisateur que nous allons créer. Lancez donc cette commande en remplaçant la chaîne <user>
par le nom d’utilisateur que vous aurez choisi.
Vous pouvez vérifier que votre utilisateur a bien été créé :
id <user>
Définissez ensuite un mot de passe pour cet utilisateur :
passwd <user>
Pour supprimer l’utilisateur pi
, nous allons devoir nous déconnecter de notre session avec l’utilisateur pi
, nous indentifier avec le nouvel utilisateur créé, ouvrir une session super-utilisateur et lancer la commande correspondante. Pour vous déconnecter d’une session, faites la combinaison de touche ||Ctrl+d||, nous allons donc lancer cette combinaison deux fois : une pour sortir de la session super-utilisateur, et une deuxième pour sortir de la session pi
. Reconnectez vous :
ssh <user>@<adresseipdurasp>
su
À ce stade, supprimons l’utilisateur pi
et le groupe pi
:
userdel pi
groupdel pi
Suppression des paquets inutiles
Nous voici arrivés à la dernière étape de la configuration de Raspbian, qui consiste à supprimer les paquets inutiles pour notre futur serveur. Rien de plus simple, il vous suffit de désinstaller tous les paquets de la liste ci-dessous, comprenant des paquets liés à l’environnement graphique :
apt-get update
aptitude purge xserver-xorg xserver-xorg-core xserver-xorg-input-all xserver-xorg-input-evdev xserver-xorg-input-synaptics xserver-xorg-video-fbdev xserver-common xpdf xinit x11-common x11-utils x11-xkb-utils xarchiver screen pcmanfm penguinspuzzle lxde-common lxappearance lxde-icon-theme lxinput lxmenu-data lxpanel lxpolkit lxrandr lxsession lxsession-edit lxshortcut lxtask lxterminal leafpad dillo galculator gnome-icon-theme gnome-themes-standard gnome-themes-standard-data gpicview hicolor-icon-theme
Vous pouvez également vérifier s’il reste des paquets inutiles à supprimer en installant le programme deborphan
:
apt-get install deborphan
deborphan
Après avoir lancé le logiciel avec la commande deborphan
, recupérez la liste sortie et procéder comme pour la première liste de paquets avec aptitude purge
.
Vous voilà avec une Raspbian entièrement configurée pour accueillir votre serveur, nettoyée de tous les éléments superflus. Dans la suite du tutoriel, nous allons nous intéresser individuellement aux différents logiciels qui pourront agrémenter notre Raspberry Pi : le serveur web, le serveur FTP et les logiciels de sécurité. Commençons dès le point suivant avec l’installation de Lighttpd, un serveur web léger, rapide et simple à configurer !
Lighttpd, un serveur web léger, rapide et simple d’utilisation
Nous passons à une partie plus simple, mais pas moins importante. À vrai dire, c’est une partie cruciale pour nous car elle nous amènera à l’installation d’un serveur web, qui pourra nous permettre de publier nos différents sites web sur Internet.
Qu’est-ce qu’un serveur web ?
C’est la première question que vous vous êtes peut-être posé si vous êtes un parfait débutant. J’en doute fort si vous lisez ce tutoriel, mais une petite piqûre de rappel théorique ne peut que nous faire du bien.
En fait, je vous induis en erreur depuis le début de ce tutoriel. En fait le terme « serveur web » est très souvent employé à tort pour désigner ce qui en réalité s’appelle le serveur HTTP. Le serveur web désigne la machine qui va accueillir le serveur HTTP et qui va stocker les sites web. Le serveur HTTP quant à lui, est le logiciel qui va permettre de servir ces sites web grâce au protocole HTTP, protocole dont le rôle est de créer une communication entre l’ordinateur client et l’ordinateur serveur.
Pourquoi la confusion est-elle faite entre ces deux termes ? Tout simplement parce que le protocole HTTP a été spécialement conçu pour le Web. Pour résumer notre cas, si on devait s’exprimer correctement, notre serveur web est le Raspberry Pi, et notre serveur HTTP sera… Vous le découvrirez dans la partie ci-dessous !
Le choix de Lighttpd
Pour ce tutoriel, compte tenu du fait que nous hébergerons notre serveur HTTP sur un Raspberry Pi, qui n’est pas une machine ultra-puissante, je vous conseille d’utiliser un serveur léger et rapide. Le célèbre Apache sera donc un peu trop imposant pour notre configuration. C’est pour cela que nous allons nous pencher sur Lighttpd (prononcé « Lighty »).
Les avantages de Lighttpd sont les suivants : il est léger, rapide, et très simple à configurer. Nous allons découvrir tout cela dans les parties suivantes qui nous conduiront à l’installation et la configuration de notre serveur HTTP.
Installation et configuration de Lighttpd
Lançons nous dans l’installation et la configuration du serveur HTTP. Celles-ci sont relativement simples en suivant le tutoriel à la lettre.
Installation
Connectez-vous à votre Raspberry Pi via SSH, ouvrez une session super-utilisateur avec la commande su
, et installez le paquet relatif à Lighttpd :
apt-get install lighttpd
Nous allons en profiter pour installer de quoi permettre au serveur HTTP d’interpréter des pages utilisant le langage PHP :
apt-get install php5-cgi
Pour activer PHP sur le serveur HTTP, lancez les deux commandes suivantes :
lighty-enable-mod fastcgi
lighty-enable-mod fastcgi-php
Puis redémarrez le serveur pour que les modifications soient prises en compte :
service lighttpd restart
L’installation est déjà terminée.
Configuration et optimisation
Les fichiers de configuration de Lighttpd sont au nombre de trois, et se situent dans le répertoire /etc/lighttpd
:
lighttpd.conf
: c’est le fichier de configuration principal, où on renseignera les modules à activer, les domaines et les sous-domaines utilisés, les contenus à mettre en cache, etc. Toutes les instructions principales à charger pour le fonctionnement de Lighttpd.conf-available
: ce répertoire contient les fichiers de configuration des modules installés sur notre Raspbian et que nous aurons la possibilité d’activer sur le serveur HTTP.conf-enabled
: ce répertoire contient les fichiers de configuration des modules activés dans le fichier de configuration principal de Lighttpd.
Renseigner les informations principales du site
Penchons-nous sur le fichier de configuration principal /etc/lighttpd/lighttpd.conf
. Ouvrez-le avec votre éditeur de texte favori et analysons son contenu :
server.modules = (
"mod_access",
"mod_alias",
"mod_compress",
"mod_redirect",
# "mod_rewrite",
)
server.document-root = "/var/www"
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/var/run/lighttpd.pid"
server.username = "www-data"
server.groupname = "www-data"
server.port = 80
index-file.names = ( "index.php", "index.html", "index.lighttpd.html" )
url.access-deny = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
compress.cache-dir = "/var/cache/lighttpd/compress/"
compress.filetype = ( "application/javascript", "text/css", "text/html", "text/plain" )
# default listening port for IPv6 falls back to the IPv4 port
## Use ipv6 if available
#include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
Les sept premières lignes de ce fichier de configuration listent les modules activés sur le serveur HTTP. Le #
qu’on remarque devant la ligne concernant le module mod_rewrite
indique que la ligne est commentée, et donc que le module n’est pas activé.
Les sept lignes suivantes concernent la configuration de base du serveur HTTP, que vous pouvez modifier à votre convenance. Voyons celles qui nous intéressent particulièrement dans notre cas :
server.document-root
: la valeur de cette ligne renseigne le répertoire où se trouve les pages de votre ou vos sites web. Ici, le répertoire par défaut et qui est souvent utilisé pour cela est/var/www
. Personnellement, organiser mes répertoires comme ceci : je place mes pages dans un dossier dans mon répertoire personnel (par exemple/home/<user>/monsite
, et je créé un lien symbolique de ce dossier que je place dans le répertoire/var/www
. À vous de choisir pour la valeur de cette ligne, donc.server.port
: la valeur de cette ligne correspond au port d’écoute du serveur. Ici, c’est le port 80, généralement associé au protocole HTTP.
Ensuite vient la ligne index-file.names
qui définit les fichiers d’index que le serveur affichera en priorité dans un dossier. Là, comme pour les lignes restantes, on ne modifie rien.
À chaque fois que vous modifiez le fichier de configuration principale, il vous faudra redémarrer le serveur HTTP pour prendre en compte les changements effectués :
service lighttpd restart
Ajouter des hôtes virtuels
Si vous souhaitez ajouter un nom de domaine à votre site web, il va vous falloir ajouter des hôtes virtuels. Les hôtes virtuels permettent d’associer un répertoire à un nom de domaine ou un sous-domaine facilement. Voici le modèle de déclaration de nom de domaine à ajouter dans le fichier de configuration /etc/lighttpd/lighttpd.conf
:
$HTTP["host"] == "<nomdedomaine> {
server.document-root = "<chemin/du/repertoire>"
accesslog.filename = "<chemin/du/fichierde.log>"
}
Il vous suffit de renseigner les informations placées entre chevrons pour ajouter un nom de domaine. Voici un exemple :
$HTTP["host"] == "monsite.fr {
server.document-root = "/var/www/monsite"
accesslog.filename = "/var/log/lighttpd/monsite.log"
}
N’oubliez pas de redémarrer le serveur.
Mise en cache des fichiers statiques
Pour optimiser l’expérience utilisateur, nous allons configurer la mise en cache de certains fichiers statiques. Quand vous chargez une page web, certains contenus ne changent pas pendant plusieurs jours, voire plusieurs semaines. Par exemple, les images et les fichiers de feuilles de styles .css. Pour éviter de les charger pour rien à chaque visite du site, nous allons placer ces types de fichiers dits « statiques » dans le cache du navigateur du visiteur. Cela diminuera le temps de chargement de la page visitée.
Tout d’abord, ajoutez le module mod_expire
dans la liste de début de fichier pour l’activer :
server.modules = (
"mod_access",
"mod_alias",
"mod_compress",
"mod_redirect",
"mod_expire",
# "mod_rewrite",
)
Puis ajoutez les quelques lignes suivantes dans votre fichier de configuration :
$HTTP["url"] =~ "\.(jpg|gif|png|css|js)$" {
expire.url = ( "" => "access 15 days" )
}
Comme vous pouvez le voir, ces lignes prévoient la mise en cache des fichiers .jpg, .gif, .png, .css et .js pour une durée de 15 jours. Ainsi, si vous visitez plusieurs fois le site, les fichiers correspondant à ces extensions ne seront pas rechargés pendant 15 jours.
N’oubliez pas de redémarrer le serveur.
Configurer un accès HTTPS pour votre site
--
Vous voilà possesseur d’un serveur HTTP complètement fonctionnel est entièrement configuré !
PureFTPd, envoyez du contenu sur votre serveur grâce à FTP
Après avoir installé notre serveur web, passons à notre serveur FTP.
Le protocole FTP
Avant de commencer l’installation de notre serveur FTP, laissez-moi vous expliquer ce qu’est le protocole FTP et à quoi sert-il. Comme vous avez pu le voir grâce à notre chère balise html <acronym>
, le sigle FTP signifie File Transfer Protocol, littéralement Protocole de transfert de fichiers. Ce sigle nous a déjà tout dit ! Le protocole FTP sert donc à l’échange de fichiers sur Internet. Il peut être utilisé aussi bien pour télécharger des fichiers depuis un serveur vers un ordinateur client (download) que pour envoyer des fichiers depuis un ordinateur client vers un serveur (upload). Plus concrètement, dans le cas d’un serveur web le protocole FTP est utilisé pour envoyer les contenus constituant les sites web (pages .html, fichiers .css, etc.).
Pour utiliser le protocole FTP, nous avons besoin de deux programmes :
- Le client FTP : c’est le programme qui permet d’envoyer ou de télécharger des fichiers sur le serveur. Il existe des clients FTP dotés d’une interface graphique, comme FileZilla, ou en ligne de commande (ftp, lftp, ncftp, etc.). Personnellement, cela fait quelques années que j’utilise une extension pour le navigateur web Mozilla Firefox, appelée FireFTP qui est très sympa à utiliser.
- Le serveur FTP : ce programme contient les fichiers envoyés et téléchargés, et gère les utilisateurs. C’est ce programme que nous allons héberger.
Quel serveur FTP choisir ?
Quand j’ai commencé l’auto-hébergement, il m’a fallu choisir entre une multitude de serveurs FTP différents, et j’étais un peu perdu. PureAdmin, ProFTPd, VsFTPd, PureFTPd… Mon choix s’est tourné vers un serveur sans interface graphique, conçu pour être le plus épuré et le plus simple possible, en cohérence avec le principe KISS m’étant si cher : j’ai nommé PureFTPd. Découvrons tout de suite comment procéder à son installation !
Installation de PureFTPd
Nous allons commencer par installer le paquet relatif à PureFTPd :
sudo apt-get install pure-ftpd
Maintenant que le paquet est correctement installé, nous allons devoir configurer tout ça. Nous allons commencer par créer le groupe d’utilisateur ftpgroup
ainsi que l’utilisateur ftpuser
auquel seront mappés les utilisateurs virtuels du serveur FTP.
Création du groupe d’utilisateur ftpgroup
:
sudo groupadd ftpgroup
Création de l’utilisateur ftpuser
, avec pour répertoire racine /dev/null
et comme invite de commande /usr/sbin/nologin
, ce qui lui interdit l’accès à un terminal :
sudo useradd -g ftpgroup -d /dev/null -s /usr/sbin/nologin ftpuser
Ajoutons maintenant un utilisateur virtuel à notre serveur. Voilà comment se présente la commande :
sudo pure-pw useradd <utilisateur> -u <UID> -g <GID> -d <chemin/du/répertoire/racine>
Décortiquons cette commande. On déclare en premier le nom de l’utilisateur virtuel que nous allons créer, par exemple azerty. L’UID et le GID correspondent respectivement à l’identifiant de l’utilisateur réel ftpuser
et l’identifiant du groupe ftpgroup
. Enfin, le répertoire racine est le dossier dans lequel l’utilisateur sera chrooté durant la session FTP, c’est-à-dire qu’il ne pourra pas remonter plus haut que ce dossier dans l’arborescence du serveur. Créons par exemple le dossier /var/www/azerty pour cela :
sudo mkdir /var/www/azerty
Et enfin, notre commande complétée :
sudo pure-pw useradd azerty -u ftpuser -g ftpgroup -d /var/www/azerty
Je vous laisse adapter le nom d’utilisateur et le chemin du dossier racine en fonction de votre cas.
Désormais, il nous faut générer le fichier des utilisateurs virtuels avec cette commande :
sudo pure-pw mkdb
La re-génération du fichier des utilisateurs virtuels sera nécessaire chaque fois que vous ajouterez un utilisateur virtuel ou que vous changerez le mot de passe de l’un d’eux. Au passage, voici la commande pour changer le mot de passe d’un utilisateur virtuel :
sudo pure-pw passwd <utilisateur>
Redémarrons le serveur FTP pour qu’il prenne en compte les modifications et les ajouts :
sudo /etc/init.d/pure-ftpd restart
Puis vérifions que notre utilisateur virtuel a bien été créé :
sudo pure-pw list
La documentation française Ubuntu nous indique qu’il est nécessaire de créer le lien symbolique suivant pour éviter de subir une erreur 530 à la connexion :
sudo ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/75puredb
Après cette opération il sera nécessaire de redémarrer encore une fois le serveur avec la commande indiquée plus haut. Cette fois, tout est terminé. Votre serveur FTP est prêt à voir transiter vos fichiers ! À noter pour les inconditionnels de MySQL que vous pouvez également gérer vos utilisateurs virtuels avec une base de données MySQL. Pour plus d’informations, je vous laisse suivre ce lien : Setup PureFTPd with MySQL….
Sécurisation du serveur
Notre serveur web est désormais presque prêt à voler de ses propres ailes dans le ciel de l’Internet. Mais avant de l’ouvrir au monde extérieur, il nous faut le sécuriser pour éviter quelques complications. Sachez tout de même que oui, votre serveur sera sujet d’attaques en tout genre qu’on ne pourra pas empêcher, mais nous allons faire en sorte que ces attaques restent des tentatives et n’arrivent jamais à leurs fins. Pour cela, nous allons commencer par renforcer la sécurité de notre serveur SSH, pour empêcher des connexions malveillantes sur notre Raspberry Pi ; nous continuerons avec la mise en place d’un pare-feu avec le logiciel iptables ; enfin nous installerons trois autres logiciels : fail2ban, portsentry, et logwatch.
Sécurisation de SSH
Pour renforcer la sécurité de notre serveur SSH, nous allons commencer par interdire la connexion SSH au Raspberry Pi avec l’utilisateur root. En effet, cela rendra la tâche bien plus ardue aux divers pirates, qui pour rentrer dans notre serveur devront deviner l’utilisateur avec lequel se connecter, puis devront arriver à ouvrir une session super-utilisateur.
Pour faire cela, rien de plus simple : éditez le fichier /etc/ssh/sshd_config
et allez à la ligne PermitRootLogin
. La valeur par défaut pour ce paramètre est yes
. Il suffit de la remplacer par la valeur no
pour interdire la connexion SSH avec l’utilisateur root. Si la ligne était précédée d’un #
, enlevez-le pour décommenter.
Pour allez plus loin, vous pouvez également n’autoriser qu’un seul utilisateur à se connecter en SSH au Raspberry Pi, et effectuer une authentification par système de clé plutôt que par mot de passe. Pour plus d’informations, je vous laisse suivre ce lien : Sécurisation de SSH - journal.floth.fr
Le pare-feu iptables
Nous attaquons maintenant la partie la plus importante concernant la sécurisation de notre serveur : la configuration du pare-feu Iptables. Pour la définition, un pare-feu est logiciel dont le but est de protéger un réseau informatique des intrusions indésirables en filtrant les communications autorisées ou non.
Sa configuration sera délicate : la configuration se réinitialise à chaque redémarrage, ainsi il faudra veiller à ne pas rendre le fichier de configuration exécutable au démarrage avant d’avoir assuré son fonctionnement. En effet, si ce fichier contient une erreur et que nous nous sommes déconnectés du serveur, impossible pour nous de nous reconnecter avec SSH ! Il nous faudra brancher le Raspberry Pi à un écran et à un clavier pour pouvoir rentrer à l’intérieur du système et modifier le fichier.
Pour commencer, ouvrez le fichier de configuration :
nano /etc/init.d/firewall
Au début du fichier, nous allons faire place nette en supprimant les règles mises en place auparavant et en définissant les règles de blocage par défaut :
#!/bin/sh
# Suppression des règles initiales
iptables -t filter -F
iptables -t filter -X
# Toutes les entrées sont bloquées, toutes les sorties acceptées
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT
# Les connexions déjà établies sont conservées
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# On autorise le loopback qui permet l’accès à soi-même de la machine
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
Après avoir établi cette configuration minimale, nous allons ajouter des règles pour ouvrir chaque service qui nous intéresse, comme SSH, FTP, HTTP, etc. Commençons avec l’ouverture des ports 80 pour HTTP et 21 pour FTP, ouverture en entrée et en sortie :
# HTTP (port 80)
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
# FTP (port 21) dont mode passif
modprobe ip_conntrack_ftp
iptables -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Nous continuons avec SSH, avec l’ouverture du port 22 :
# SSH (port 22)
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP
Enfin, nous autorisons le ping, mais en limitant les réponses à 15 pings par minute :
# Autorisation du PING (15 par minute)
iptables -A INPUT -p icmp -m limit --limit 15/minute -j ACCEPT
iptables -A INPUT -p icmp -j DROP
Iptables nous permet aussi de contribuer au blocage des attaques par déni de service et des scans de ports :
# Bloquer les attaques par déni de service
iptables -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT
# Bloquer les scans de ports
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
Nous allons maintenant s’assurer du fonctionnement de nos règles avant de rendre le script exécutable au démarrage. Tout d’abord, rendez votre script exécutable :
chmod +x /etc/init.d/firewall
Puis exécutez-le :
/etc/init.d/firewall
Désormais, tentez de vous connecter via HTTP, FTP et SSH pour vérifier que les connexions sont possibles. S’il y a un problème, cela doit venir de la syntaxe. Si vous avez correctement suivi la configuration exposée ci-dessus, il ne devrait pas y avoir de problèmes. Une fois que tout est bon, rendez votre script exécutable au démarrage :
update-rc.d firewall defaults
La configuration de notre pare-feu est terminée !
Fail2ban
Fail2ban est logiciel qui va surveiller les tentatives d’intrusion sur notre serveur. L’idée est de bloquer les adresses IP correspondant aux machines essayant de se connecter frauduleusement. Pour se faire, nous allons restreindre le nombre de tentatives de connexion, lequel une fois dépassé aura pour effet de bannir l’adresse IP du client tentant de se connecter.
Installez le logiciel avec apt-get :
apt-get install fail2ban
La configuration que je vous propose dans cette partie est relativement simple, ainsi si vous souhaitez approfondir, je vous laisse consulter la documentation officielle du logiciel. Nous allons nous pencher sur le fichier /etc/fail2ban/jail.conf
qui contient la configuration de fail2ban.
Dans ce fichier, nous pouvons distinguer trois sections : Default, Actions et Jail.
Default
Cette section comporte plusieurs variables définissant les valeurs par défaut de nos futures cages de protection pour nos logiciels.
ignoreip
: cette variable indique la plage d’adresses IP à ignorer, c’est-à-dire qui ne seront pas surveillées. On peut laisser la valeur par défaut.bantime
: cette variable définit le temps de bannissement par défaut en secondes. Ici, la valeur par défaut est de 600 secondes, soit 10 minutes. À vous de voir pour modifier cette valeur.maxretry
: cette variable définit le nombre de tentatives par défaut avant banissement. La valeur par défaut est de 3.destemail
: cette variable contient l’adresse e-mail à qui envoyer les rapports d’incident de fail2ban. Remplissez avec votre adresse e-mail si vous souhaitez recevoir ces rapports.
Actions
La section « Actions » définit différentes valeurs comme le MTA utilisé, le protocole de transmission (voir la partie « Internet, nous voilà ! » pour en savoir plus à propos de TCP), etc. Vous n’aurez rien à modifier ici.
Jail
Voici la section où se fera le gros du boulot. C’est ici que nous définirons quels services nécessitant une connexion nous surveillerons avec Fail2ban. Par défaut, on peut voir des modèles de configuration pour SSH, Apache, Pure-FTPd, etc. Voici comment ce présente ce qu’on appelle un « jail », une « cage de protection » :
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
On peut voir ici que ce jail concerne le service SSH, dont la surveillance est activée (enabled = true
), dont le port est le numéro ssh
(variable correspondant au chiffre 22), et que le nombre de tentatives maximum est de 6. Voici le modèle typique d’un jail dans la configuration de Fail2ban. Dans notre cas, nous aurons besoin d’un jail pour SSH, qui est déjà présent et activé, d’un jail pour Pure-FTPd, qui est présent mais désactivé, et enfin un jail pour Lighttpd, qui n’est pas présent par défaut.
Commençons par activer le jail de Pure-FTPd. Il vous suffit de trouver son jail et de basculer la valeur de la variable enabled
vers la valeur true
:
[pure-ftpd]
enabled = true
port = ftp,ftp-data,ftps,ftps-data
filter = pure-ftpd
logpath = /var/log/auth.log
maxretry = 6
Pour Lighttpd, je vais vous donner un exemple de configuration se basant sur les modèles de jail pour Apache :
[lighttpd]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/lihttpd/*error.log
maxretry = 6
[lighttpd-noscript]
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/lighttpd/*error.log
maxretry = 6
[lighttpd-overflows]
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/log/lighttpd/*error.log
maxretry = 2
Une fois que tout ceci est fait, sauvegardez vos modifications, et relancez fail2ban :
service fail2ban restart
Désormais, les curieux n’ont qu’à bien se tenir !
Portsentry
Portsentry est logiciel qui va nous permettre d’éviter les scans de ports. Le scan de ports, en français « balayage de ports » est une pratique consistant à rechercher les ports ouverts sur un serveur afin de tenter une attaque. Le scan de port a déjà été bloqué en partie grâce à Iptables et Fail2ban, mais à la différence de ceux-ci, Portsentry bloque les IP suspectes avant la tentative de connexion.
Commençons par installer le paquet portsentry :
apt-get install portsentry
Le début de la configuration consiste à définir les adresses IP qui auront le droit de scanner les ports. Nous allons par exemple autoriser les adresses IP de notre réseau local, comprises sur la plage d’IP de votre modem, par exemple 192.168.0.0/50. Ouvrez le fichier /etc/portsentry/portsentry.ignore.static
avec nano et ajoutez cette plage d’IP en fin de fichier, sous l’adresse 0.0.0.0
.
Concernant la détection des ports à surveiller, nous allons laisser le logiciel le faire automatiquement. Éditez le fichier /etc/default/portsentry
et remplacez les lignes suivantes :
TCP_MODE="tcp"
UDP_MODE="udp"
par :
TCP_MODE="atcp"
UDP_MODE="audp"
Avant d’activer le scan des ports, on va vérifier que la configuration fonctionne. Redémarrez Portsentry :
service portsentry restart
Si vous ne voyez aucun message d’erreur, activez le scan en éditant le fichier /etc/portsentry/portsentry.conf
et en remplaçant ces lignes :
BLOCK_UDP="0"
BLOCK_TCP="0"
par
BLOCK_UDP="1"
BLOCK_TCP="1"
On redémarre un dernière fois le logiciel :
service portsentry restart
Le logiciel est maintenant complètement fonctionnel !
Logwatch
Nous allons désormais apporter la dernière pierre à notre édifice sécurisant en installant le logiciel Logwatch. Logwatch va nous permettre de visualiser les fichiers de journalisation système, aussi appelés « logs », qui fonctionnent de la même manière qu’un journal de bord sur un bateau : le système va enregistrer dans ces fichiers toutes les opérations effectuées. Les opérations qui nous intéresseront plus particulièrement dans ces logs sont celles concernant les tentatives de connexion SSH et les rapports de fail2ban. Pour permettre une lecture plus simple de ces fichiers, nous allons voir comment configurer Logwatch pour que celui-ci nous envoie un rapport détaillé par e-mail chaque jour.
Commençons par installer le paquet Logwatch :
apt-get install logwatch
Pour permettre au système Raspbian d’envoyer des e-mails, nous allons avoir besoin de deux éléments essentiels : une adresse e-mail valide et un MTA. Pour ce dernier élément, nous utiliserons le logiciel ssmtp. Pour l’installer :
apt-get install ssmtp
Sa configuration est extrêmement simple. Nous allons pour cela éditer deux fichiers. Ouvrez le premier fichier /etc/ssmtp/ssmtp.conf
. Voici son contenu :
# Make this empty to disable rewriting.
root=
# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=
# Where will the mail seem to come from?
#rewriteDomain=
# The full hostname
hostname=
# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
#FromLineOverride=YES
Analysons toutes ces lignes :
root=
: ce paramètre doit correspondre avec l’adresse e-mail qui enverra les rapports Logwatch. Renseignez donc cette adresse en suivant ce modèle :root=votremail@domaine.fr
mailhub=
: ce paramètre doit indiquer le serveur SMTP qui servira les e-mails envoyés. Renseignez donc votre serveur e-mail en suivant ce modèle :mailhub=mail.votreserveurmail.fr:25
. 25 correspond au port habituellement utilisé pour le protocole SMTP.rewriteDomain=
: ce paramètre doit être rempli avec le nom de domaine que vous souhaitez afficher dans l’en-tête de l’e-mail que vous recevrez :rewriteDomain=votredomaine.fr
.hostname=
: ce paramètre doit renseigner le nom de la machine hôte, c’est à dire la machine qui enverra les e-mails. Dans notre cas, ce sera le Raspberry Pi :hostname=raspberrypi
.
Il nous faut encore ajouter deux lignes pour terminer la configuration de ce fichier :
AuthUser=
: vous indiquerez dans cette ligne l’adresse e-mail avec laquelle vous comptez envoyer les rapports. Par exemple :AuthUser=raspberrypi@votredomaine.fr
.AuthPass=
: vous indiquerez dans cette ligne le mot de passe de votre compte e-mail avec lequel vous enverrez les rapports.
Passons au second fichier : /etc/ssmtp/revaliases
. Il vous suffit simplement d’ajouter à la fin du fichier la ligne suivante remplie avec les informations vous correspondant :
# www-data:votremail@votredomaine.fr:mail.serveurmail.com:25
Comme vous pouvez le voir, remplacez la chaîne votremail@votredomaine.fr
par votre adresse e-mail servant à envoyer les rapports, et mail.serveurmail.com:25
par le serveur e-mail de cette adresse.
Désormais, il nous faut éditer le fichier de configuration de Logwatch pour lui indiquer l’adresse e-mail qui recevra les rapports, ainsi que le niveau de détails des rapports. Éditez le fichier /usr/share/logwatch/default.conf/logwatch.conf
.
Complétez la ligne MailTo
avec l’adresse e-mail qui recevra les rapports, la ligne Detail
avec le niveau de précision souhaité pour les rapport (Low, Med ou High), et la ligne Output
avec le mot mail
.
Il ne nous reste plus qu’à créer une tâche cron poiur automatiser le lancement de Logwatch, par exemple tous les jours à 8h30. Pour cela, effectuez la commande crontab -e
qui vous permettra d’éditer le fichier listant les tâches cron, et ajoutez la ligne suivante :
30 8 * * * root logwatch
On peut remarquer cinq champs séparés par un espace, qui représente dans l’ordre la minute, l’heure, le jour du mois, le mois et le jour de la semaine où la commande sera lancée. La deuxième partie concerne la commande à lancer. On peut voir dans mon exemple que la commande logwatch
sera lancée par l’utilisateur root
tous les jours à 8h30.
La configuration de Logwatch est maintenant terminée, ainsi que la sécurisation de notre système !
Internet, nous voilà !
Maintenant que notre serveur est tout bien installé, tout bien configuré et tout bien sécurisé, nous allons pouvoir passer à l’étape cruciale de ce tutoriel : l’ouverture de votre serveur sur le monde extérieur ! Pour relier votre serveur à Internet, nous aurons besoin de :
- un nom de domaine valide ;
- une box Internet, idéalement avec une adresse IP fixe.
Pour commencer, un peu de théorie. Votre Fournisseur d’Accès Internet vous fournit un modem (à moins que vous ne l’ayez acheté vous-même), auquel est assignée une adresse IP. C’est par cette adresse IP que nous allons pouvoir connecter le Raspberry Pi à Internet.
Passons maintenant à la pratique : nous allons devoir ouvrir le port par lequel passe le protocole HTTP, c’est-à-dire le port 80, pour le Raspberry Pi. Pour cela, rentrez dans l’interface d’administration de votre modem. Les menus diffèrent des modèles de modem, mais leurs noms sont assez similaires. Vous devriez trouver dans cette interface un menu « Réseau » et un sous-menu « Transfert de ports », ou quelque chose dans le genre. Allez sur ce sous-menu : vous avez devant un outil vous permettant de définir les ports à ouvrir depuis votre modem.
Si je prends mon modem en exemple, vous devriez avoir en dessous de la liste des ports ouverts plusieurs champs vous permettant de renseigner un nouveau port à ouvrir. S’il y a un menu déroulant intitulé « Services », choisissez l’option « HTTP ». Cela nous remplira par défaut les champs de port de départ et port de fin automatiquement avec le port 80. Si vous n’avez pas ce menu déroulant, remplissez ces champs de telle sorte à ce qu’ils contiennent la valeur 80. Vous devriez ensuite avoir un menu déroulant intitulé « Protocole », vous proposant trois options : TCP, UDP, et les deux.
TCP et UDP sont deux protocoles de transmission de données. Ce type de protocole permet le transport de données entre deux entités possédant une adresse IP, par exemple une machine client et une machine serveur. Ici, nous allons pouvoir choisir l’option « les deux ».
Le dernier champ devrait vous demander de spécifier la machine qui se verra ouvrir le port 80 : renseignez ici l’adresse IP locale de votre Raspberry Pi, que vous avez défini au cours de la configuration du réseau (par exemple 192.168.0.42).
Vous pouvez désormais soumettre cette nouvelle règle. La seconde étape consiste à éditer le fichier de zone DNS de votre nom de domaine. Pour accéder à ce fichier de zone, rendez-vous dans votre espace utilisateur sur le site de votre registar. Vous devriez pouvoir accéder à la modification de ce fichier de zone. Les deux premières comportent normalement une adresse IP. Ce sont ces adresses que vous allez devoir remplacer par celle de votre modem. Pour connaître l’adresse IP de votre modem, il vous suffit de vous connecter à l’interface d’administration du modem : elle devrait y être affichée.
Une fois que vous avez validé votre fichier de zone DNS modifié, il vous faudra attendre quelques heures avant qu’il ne se propage. Une fois cela fait, vous pourrez accéder à votre serveur en rentrant l’adresse de votre box dans la barre d’url de votre navigateur favori !
Pour pouvoir accéder à votre serveur avec votre nom de domaine au lieu de l’adresse IP de votre box, il vous suffit d’éditer le fichier de configuration de lighttpd et de créer une redirection. Pour cela, éditez le fichier /etc/lighttpd/lighttpd.conf
et ajoutez ces lignes en fin de fichier :
$HTTP["host"] == "votrenomdedomaine" {
server.document-root = "racinedusite"
accesslog.filename = "fichierdejournalisation"
}
Il vous suffit de remplacer les chaînes votrenomdedomaine
racinedusite
et fichierdejournalisation
respectivement par votre nom de domaine (par exemple yolo.fr), la racine du site yolo.fr (par exemple /var/www/yolo), et le fichier de journalisation où seront conservez les logs (par exemple /var/log/yolo/log).
Vous procéderez de la même façon pour ajouter des sous-domaines à vos sites. Une fois cela fait, il ne vous reste plus qu’à enregistrer les modifications et relancer le serveur http :
service lighttpd restart
Votre serveur est maintenant prêt à accueillir des visiteurs du monde entier !
Sauvegarder son système
Un problème est vite arrivé, et c’est pour cela que je vous conseille de faire régulièrement des sauvegardes des contenus des dossiers de votre serveur. Mais pour aller plus loin, je vais dans cette partie vous montrer commen sauvegarder le système entier de votre Raspberry Pi. Nous allons créer un fichier .img qui sera une reproduction identique et complète de votre système à l’instant de la sauvegarde. Il vous suffira ensuite de réinstaller ce fichier .img sur votre serveur si vous souhaitez restaurer votre système après une fausse manip ou une perte données.
Nous allons utiliser l’outil dd
pour effectuer cette image de sauvegarde. Voici comment se présente la commande à utiliser pour faire une image de votre système :
dd if=votre-carte-sd of=le-futur-fichier.img bs=4M
Comme vous pouvez le voir, cette commande comporte trois paramètres :
if
: ici, vous indiquez le disque à sauvegarder. Par exemple, si votre carte SD est montée sur /dev/mmcblk0, mettez cette valeur à ce paramètre :/dev/mmcblk0
.of
: ici, vous indiquez le chemin ou sera créer l’image de sauvegarde. À vous de voir pour cette option, tant que le nom du fichier se termine par l’extension .img.bs
: renseignez ici le nombre d’octets avant le premier secteur de la sauvegarde. Plus la valeur sera grande, moins de temps prendra la sauvegarde. Vous pouvez par exemple mettre la valeur4M
, pour 4 Mio.
Comme pour l’écriture de l’image Raspbian sur votre carte SD lors de l’installation, veillez bien à attendre que la sauvegarde soit terminée avant de fermer la session, même si aucun information n’est retournée dans l’invite de commande pendant l’opération.
Pour restaurer une image de sauvegarde, il suffit de procéder à l’inverse :
dd if=votre-fichier-de-sauvegarde.img of=votre-carte-sd bs=4M
Vous voilà fin prêt à affronter les affres de la perte de données !
Vous voilà arrivé à la fin de ce tutoriel. À ce stade, vous devriez avoir un beau serveur auto-hébergé ! :) Il ne me reste plus qu’à vous souhaiter une bonne continuation dans votre expérience d’auto-hébergement !