Jump to content

Recherche dans la communauté

Affichage des résultats pour les étiquettes 'raspberry'.



Plus d'options de recherche

  • Chercher par étiquette

    Saisir les étiquettes en les séparant par des virgules.
  • Chercher par auteur

Type de contenu


Forums

  • Matériel et Conseils d'achat
    • Ordinateurs de bureau et Composants
    • Ordinateurs portables
    • Conseils d'achat
  • Ajustements et Personnalisation de PC
    • Surcadençage
    • Refroidissement à air et à eau
    • Personnalisation de PC
  • Systèmes d'exploitation
    • Microsoft Windows (Mobile)
    • Apple MacOS et iOS
    • GNU/Linux, *BSD et dérivés d'UNIX
  • Réseaux et Programmation
    • Réseaux, Internet, Téléphonie et Services en Ligne
    • Programmation et Lignes de code
  • Multimédia
    • Jeux vidéo, Consoles, Rétrogaming et Jeux occasionels
    • Mobilité et périphériques portables
    • Audio, Vidéo, Photo et Créations
  • Au pays de l'occasion
    • Achats, Ventes et Estimations
    • Retours d'expérience
  • INpact Café
    • Débats et Discussions
    • Espace Détente
    • Projets personnels et Gestion communautaire
  • Vie du site et du forum
    • Vie INpactienne
  • Sujets de Amateurs de Saucisse Authentique
  • Switch de Les Nintendomaniacs
  • 3DS de Les Nintendomaniacs
  • Consoles virtuelles de Les Nintendomaniacs
  • Anciennes consoles de Les Nintendomaniacs
  • Amiibo de Les Nintendomaniacs
  • CM de Hardware PC
  • CPU de Hardware PC
  • GPU de Hardware PC
  • RAM de Hardware PC
  • SSD/HDD de Hardware PC
  • Boîtier & Co de Hardware PC
  • Écran de Hardware PC
  • Clavier/Souris de Hardware PC
  • Réseau de Hardware PC
  • Discussions de Final Fantasy XIV
  • Modding : how to et principes de base de Skyrim
  • News, discussions et partage de connaissances de Skyrim
  • Les perles du Nexus et autres ressources de Skyrim
  • Maquettes et Modélisme de DIY or Die !
  • Electronique de DIY or Die !
  • Bien débuter de Kerbal Space Program Vers l'infini enfin si on décolle !

Calendriers

  • Évènements de Amateurs de Saucisse Authentique
  • Évènements de Les Nintendomaniacs

Rechercher les résultats dans...

Résultats trouvés contenant...


Date de création

  • Début

    Fin


Dernière mise à jour

  • Début

    Fin


Filter by number of...

Inscrit

  • Début

    Fin


Groupe


4 résultats trouvés

  1. Bonjour, J'ai des Raspberry PI (un "1", des 2 et des 3) que j'utilise essentiellement chez moi et toujours en wifi. Ils n'ont ni clavier ni écran : je prends le contrôle à distance pour leur faire faire divers tâches : surveillance, site perso, streaming,... Chez moi, pas de problème, j'ai déclaré mon router dans le fichier /etc/network/interfaces. Où cela se complique, c'est quand j'ai voulu apporter l'un des Raspberry (en l’occurrence un 3 donc avec l'interface wifi intégré) en vacances avec moi dans la belle famille. Là, il y a une box wifi (SFR), un router et un répéteur. Donc selon l'endroit où je pose le raspberry, il vaut mieux se connecter sur l'un des ces éléments actifs (qui on tous un mode 2.4GHz). Premier problème, je ne peux déclarer qu'un seul réseau dans le fichier "interfaces". J'ai essayé avec wpa_supplicant de déclarer les différents routers, en laissant la référence dans "interfaces" vers wpa_supplicant: # interfaces(5) file used by ifup(8) and ifdown(8) # Please note that this file is written to be used with dhcpcd # For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf' # Include files from /etc/network/interfaces.d: source-directory /etc/network/interfaces.d auto lo iface lo inet loopback iface eth0 inet dhcp auto wlan0 allow-hotplug wlan0 iface wlan0 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf Ca refuse de fonctionner : il faut impérativement que le router soit dans "interfaces". Voila le fichier wpa_supplicant: update_config=1 ctrl_interface=DIR=/run/wpa_supplicant GROUP=netdev network={ ssid="RFN_2.4" psk="******************" id_str="Maison" priority=1 } network={ ssid="NEUF_B214" psk="*************" id_str="Box_SFR" priority=2 } network={ ssid="NALETTO_RPT2.4G" psk="*************" id_str="Répeteur_PHN" priority=3 } Deuxième problème, je ne vois depuis le Raspberry (sous VNC avec WiCD) que la box : pas le roouter ni le répéteur. Bizarre. Quelqu'un aurait un avis ?
  2. Raspberry + détecteur de mouvement + caméra = système d'alarme capable de détecter, prendre des photos, envoyer des sms et des mail avec des photos. J'ai commencé avec un raspberry PI 1, puis des 2 et maintenant j'ai même un 3 (qui en plus me sert de server de site personnel sous wordpress) Certains de mes raspberry peuvent allumer une lampe avant de prendre des photos (j'avais tenté en IR mais les résultats étaient décevant). Il faut maintenant que je me rajoute une fonction pour n'allumer la lumière que s'il fait sombre.
  3. Le but de ce petit tutorial est d'installer la distribution linux la plus courante pour raspberry, raspbian, en utilisant une clef USB pour stocker le système de fichier et ainsi gagner en performance mais aussi en fiabilité, la carte SD n'étant plus sollicitée qu'à l'occasion de l'allumage (le boot) de la machine. INTRODUCTION I - PRE-REQUIS 1.1 – Pré-requis matériel 1.2 – Pré-requis logiciel II – PREPARATION DU MATERIEL ET INSTALLATION DE RASPBIAN 2.1 - Préparation de la carte SD et de la clef USB 2.2 – Installation de la distribution Raspbian III – PREMIER LANCEMENT ET CONNEXION EN SSH 3.1 – Premier lancement 3.2 – Se connecter en SSH IV – PREPARER LA COPIE DES PARTITIONS 4.1 – Voir l’arborescence de la raspbian 4.2 – Principe des droits de l’utilisateur 4.3 – Installer RSYNC V – COPIER LES PARTITIONS SUR LA CLEF USB 5.1 – Créer le répertoire temporaire et le lier avec la Clef USB 5.2 – « Re »-Monter la partition principale 5.3 Copier la partition sur la Clef USB VI – MODIFIER LES FICHIERS DE BOOT 6.1 – Modifier le fstab 6.2 – Modifier cmdline.txt VII – RELANCER RASPBIAN VIII – FINALISER L’INSTALLATION INTRODUCTION : Le principal problème du raspberry est le fait d’utiliser une carte SD pour booter la distribution linux, bref pour faire fonctionner le système d’exploitation. Comme invariablement les données sur la carte SD vont être corrompues, le système va planter avec la nécessiter de reformater la carte SD, de tout réinstaller et de tout re-paramétrer. Autant le dire, il y a de quoi perdre rapidement patience… Pour faire suite à « mon » précédent tutorial (qui a un énorme succès puisqu’il est sans commentaire ^^), j’ai fait un petit tutorial afin de contourner le point faible que représente la carte SD. La solution est de déporter le système le système d’exploitation et les données sur une clef USB, cette dernière étant nettement plus fiable à l’usage que la carte SD et tout en étant plus rapide, améliorant au passage les performances. Il faut donc procéder ainsi : - laisser les fichiers nécessaires au boot sur la carte SD et indiquer dans ces fichiers qu’il faut par la suite travailler avec la clef USB, - déplacer sur la clef USB l’ensemble du système de fichier. En somme, la carte SD ne travaille qu’au boot du raspberry limitant les risques de corruption des données au minimum. Si malgré tout des données sont corrompues sur la carte SD, il sera rapide de la reformater tandis que l’ensemble des fichiers et de paramètres seront toujours sauvegardés sur la clef USB. Les explications du tutorial sont applicables aussi bien pour une installation depuis windows que sous linux (avec les petits rappels qui vont biens dont j’avais moi-même besoin au passage). Le but est aussi de familiariser l’utilisateur de windows avec les commandes « basiques » de linux pour manipuler correctement un raspberry. Bien que beaucoup de tutoriaux existent sur le WEB afin d’expliquer comment installer raspbian sur clef USB, aucun n’a donné le résultat voulu dans mon cas. Certains sont d’une absolue complexité et ajoutent des étapes dont je ne comprends pas l’intérêt, d’autres sont tout simplement faux (je pense que certains travaillent sous qemu et non pas sur leur raspberry). Pour valider ce tutorial j’ai procédé à deux installations sur deux raspberrys type B. Cependant si vous avez un problème n’hésitez pas à poser vos questions (un petit merci aussi ne fait pas de mal ^^). I - PRE-REQUIS : 1.1 – Pré-requis matériel : - un raspberry type B, - un chargeur micro-USB 5V 1A, - un cable RJ45 pour relier la machine au réseau - une carte SD de 4 gigas au moins, - une clef USB de 4 gigas au moins, - un ordinateur pouvant accueillir une carte SD, Naturellement, on peut connecter le raspberry à un écran si besoin via notamment un câble HDMI. Mais ici, je suis dans l’optique de monter un petit serveur WEB (le tutorial est là) et donc l’ensemble des manipulations seront faites depuis l’ordinateur sans connecter le raspberry à un écran. 1.2 – Pré-requis logiciel : Dans tous les cas, il faut disposer d’une distribution à installer. La plus courante pour un usage « serveur » / « bureautique » est raspbian qu’il convient de télécharger ici : *date*-wheezy-raspbian.zip Il s’agit d’une distribution debian spécialement adaptée au raspberry. Elle est plutôt robuste et dispose d’un bureau accessible avec la commande classique « startx ». En fonction de votre système d’exploitation les pré-requis logiciels changent. Sous linux, on n’a besoin de rien d’autre, sous windows il nous faut quelques logiciels : -> Sous windows : - Win32DiskImager : pour copier l’image de la distribution raspbian sur la carte SD, - MiniTool Partition Wizard (édition home, gratuite) : pour pouvoir formater en ext4 que windows ne prend pas en charge (sauf bidouille), - Putty : pour accéder en à la console de notre raspbian depuis notre ordinateur via le réseau (en SSH) et ainsi exécuter les manipulations nécessaires. Naturellement, installez le tout avant de commencer. -> Sous linux : Rien de particulier n’est nécessaire fdisk (ou chdisk) nous permettant de formater puisque l’ext4 est par définition géré sous linux. La commande dd nous permettra de copier l’image de la distribution sur la carte SD. II – PREPARATION DU MATERIEL ET INSTALLATION DE RASPBIAN : 2.1 - Préparation de la carte SD et de la clef USB: Le but est de disposer d’une carte SD formatée en FAT32 mais aussi de préparer la clef USB afin d’y copier le système de fichier. Concernant la clef USB, nous allons avoir besoin d’une partition en ext4 pour copier le système de fichier. Enfin, il convient que l’ensemble des partitions (carte SD et clef USB) soit bootable, il faut donc activer « primary » et pas « logical ». 2.1.1 - Sous windows : Lancez MiniTool Partition Wizard et cliquez sur la gestion des partitions (option de gauche). Faire un clic droit sur votre carte SD et sélectionner « create » et reprendre ses options : Nom : SDCARD Type : FAT32 Taille : toute la carte Sélectionnez : « Primary » et non logical. Et validez. Faire un clic droit sur la clef USB et sélectionner « create » et reprendre ses options : Nom : USB_BOOT Type : EXT4 Taille : toute la carte Sélectionnez : « Primary » et non logical. Et validez. Enfin, cliquez sur appliquer, les partitions vont être créées et formatées. (C’est un peu long s’agissant de la partition en ext4 sur la clef USB). 2.1.2 - Sous linux : Même combat avec gparted si souhaitez une interface graphique (semblable à celle de MiniTool Partition Wizard sous windows). Sinon utilisez fdisk (voire chdisk) Rappel rapide des commandes en ligne de commande : (*) . Pour repérer la carte SD et la clef usb : « dmesg ». En principe, la carte SD correspond à mmcblk0p et la clef USB à sda ou sdb . Pour créer la partition sur la carte SD : fdisk /dev/mmcblk0p (ou mmcblk0p1) . Pour créer les partitions sur la clef USB : fdisk /dev/sda . Pour formater la partition sur la carte SD : mkfs.fat32 /dev/ mmcblk0p (ou mmcblk0 mmcblk0p1 j’ai un doute) . Pour formater les partitions sur la clef USB : mkfs.ext4 /dev/sda1 (* pensez à entrer sudo avant la commande ou à passer root et ne pas oublier que si une partition est déjà montée on ne peut pas la reformater, pour démonter une partition c’est la commande unmount qu’il faut utiliser, par exemple « sudo umount /dev/ mmcblk0p1). 2.2 – Installation de la distribution Raspbian : 2.2.1 – Sous windows : Décompressez l’archive raspbian téléchargée. Lancez Win32DiskImager et sélectionnez l’image de la distribution raspbian décompressée. De même, sélectionnez le lecteur où est votre carte SD. Et cliquez sur « WRITE », l’image de la distribution est « copiée » sur la carte SD… 2.2.2 – Sous linux: Démontée la partition de la carte SD si elle est déjà montée ( commande « df » pour voir les partitions montées, commande sudo unmount /dev/mmcblk0p1 si c’est p1 est montée…). Là copiez l’image de la raspbian décompresssée via la commande dd : sudo dd if=*repertoire*/*date*-wheezy-raspbian.img of=/dev/mmcblk0 Naturellement, adaptez le répertoire et le nom du fichier img tout comme l’identification de votre carte SD. III – PREMIER LANCEMENT ET CONNEXION EN SSH : 3.1 – Premier lancement : Insérez la carte SD et la clef UBS dans le raspberry, connectez le câble RJ45 et le chargeur micro-USB… Le raspberry clignote et se lance… Votre raspberry fonctionne ! 3.2 – Se connecter en SSH : C’est une étape importante puisque elle permet d’accéder à la console du raspberry et donc d’exécuter toutes les commandes nécessaires depuis son ordinateur. Il faut pour cela connaître l’adresse IP sur le réseau que le raspberry a obtenu auprès de la box internet (DHCP activé naturellement… sinon le faire ou connecter un écran et un clavier au raspberry pour connaître l’ip par la commande « ifconfig » et aller à la section concernant la définition d’une IP fixe de ce tutorial). Pour récupérer l’adresse IP vous pouvez vous connecter à votre box internet qui le plus souvent permet de voir l’ensemble des appareils connectés au réseau, ou encore utiliser Angry IP Scanner (sous windows ou linux) pour scanner toutes les IP de votre réseau… On partira du principe ici que notre raspberry a l’adresse IP : 192.168.0.50 3.2.1 – Sous windows : Lancez putty. Dans « host » entrez l’adresse IP du raspberry (192.168.0.50). Dans « port » entrez 22 (c’est le cas par défaut) et validez. Passez le message d’alerte, une fenêtre s’affiche et nous demande un login (pi) puis un mot de passe (raspberry). Nous voila connecté à notre raspberry et capable d’exécuter toutes les commandes nécessaires ! Un petit message nous informe même qu’il faut finaliser l’installation. Ne lancez pas encore la commande proposée. 3.2.1 – Sous linux : En principe, vous connaissez déjà, sinon c’est : ssh pi:raspberry@192.168.0.50 Et vous validez… IV – PREPARER LA COPIE DES PARTITIONS : Il est préférable de comprendre ce que l’on va faire par la suite, notamment si la distribution raspbian a évolué entre ce tutorial et le moment où vous vous lancez. Ainsi, il vous sera possible d’adapter les manipulations si besoin mais aussi d’acquérir quelques commandes de base sous linux… 4.1 – Voir l’arborescence de la raspbian : Dans votre terminal connecté en SSH, entrez la commande suivante et validez : ls -l /dev/disk/by-label/ S’affichent 4 lignes de ce type: lrwxrwxrwx 1 root root 15 Jan 1 1970 993B-8922 -> ../../mmcblk0p1lrwxrwxrwx 1 root root 10 Jan 1 1970 bdbd9b84-7c0f-cf01-303c-99847c0fcf01->../../sda1lrwxrwxrwx 1 root root 15 Jan 7 23:31 fc254b57-8fff-4f96-9609-ea202d871acf->../../mmcblk0p2 Normalement, si vous avez un peu fait attention aux explications précédentes, vous pouvez comprendre ce charabia… … Ceci nous indique qu’il y a 3 partitions détectées : mmcblk0p1 et mmcblk0p2 sont deux partitions sur la carte SD. Naturellement, sda1 est la partition sur la clef USB, vous pouvez relancez la commande cette fois par ID pour vous en convaincre : ls -l /dev/disk/by-id/ Donne lrwxrwxrwx 1 root root 13 Jan 1 1970 memstick-SD04G_0x01d7e265 -> ../../mmcblk0lrwxrwxrwx 1 root root 15 Jan 1 1970 memstick-SD04G_0x01d7e265-part1 -> ../../mmcblk0p1lrwxrwxrwx 1 root root 15 Jan 7 23:31 memstick-SD04G_0x01d7e265-part2 -> ../../mmcblk0p2lrwxrwxrwx 1 root root 9 Jan 1 1970 usb-_USB_DISK_2.0_C0003A85A73DDA62-0:0 -> ../../sdalrwxrwxrwx 1 root root 10 Jan 1 1970 usb-_USB_DISK_2.0_C0003A85A73DDA62-0:0-part1 -> ../../sda1 Maintenant, on va regarder comment est le répertoire racine de la raspbian. Entrez et validez (y a un espace entre les deux points): cd .. On entre dans le répertoire « home ». On re-rentre et valide : cd .. On est à la racine « / ». Pour afficher l’arborescence on entre la commande ls -Al Voilà la liste des répertoires: pi@raspberrypi / $ ls -Aldrwxr-xr-x 2 root root 4096 Jan 7 21:45 bindrwxr-xr-x 2 root root 16384 Jan 1 1970 bootdrwxr-xr-x 13 root root 3140 Jan 7 23:32 devdrwxr-xr-x 99 root root 4096 Jan 7 23:32 etcdrwxr-xr-x 3 root root 4096 Jan 7 21:10 homedrwxr-xr-x 12 root root 4096 Jan 7 21:35 libdrwx------ 2 root root 16384 Jan 7 20:54 lost+founddrwxr-xr-x 2 root root 4096 Jan 7 21:01 mediadrwxr-xr-x 2 root root 4096 Oct 17 17:39 mntdrwxr-xr-x 5 root root 4096 Jan 7 22:07 optdr-xr-xr-x 75 root root 0 Jan 1 1970 procdrwx------ 2 root root 4096 Jan 7 21:01 rootdrwxr-xr-x 10 root root 460 Jan 12 10:20 rundrwxr-xr-x 2 root root 4096 Jan 7 21:45 sbindrwxr-xr-x 2 root root 4096 Jun 20 2012 selinuxdrwxr-xr-x 2 root root 4096 Jan 7 21:01 srvdr-xr-xr-x 12 root root 0 Jan 1 1970 sysdrwxrwxrwt 4 root root 4096 Jan 12 15:17 tmpdrwxr-xr-x 10 root root 4096 Jan 7 21:01 usrdrwxr-xr-x 11 root root 4096 Jan 7 23:32 var Si vous voulez connaître le rôle de chaque répertoire vous pouvez consulter ceci sur ubuntu-fr.org Pour faire simple, on va copier l’intégralité dans la partition USB_BOOT. 4.2 – Principe des droits de l’utilisateur : Je m’adresse ici principalement aux utilisateurs de windows. Bien que la notion de compte administrateur avec des droits supérieurs aux simples comptes utilisateurs soit une réalité depuis windows vista, une petite mise au point s’impose. Sous linux et à ma connaissance depuis toujours, on distingue deux catégories principales de comptes : le « root » (comparable à l’administrateur) et les comptes utilisateurs (y aussi des digressions du type super-utilisateur mais qui est « inférieur » au root, ou encore compte invité très limité). Sous linux, il n’est pas habituel d’utiliser le compte root mais de rester utilisateur « de base ». En terme de sécurité c’est évidement un plus. En revanche, si on veut paramétrer certaines choses « importantes » ou on utilise le compte root (ce qui revient à se balader en administrateur) ou on exécute uniquement la tache voulue avec les droits attribués à root, mais sans utiliser ce compte. Aussi et afin d’exécuter une commande qui nécessite les droits du compte root on fait précéder la commande voulue par « sudo ». Si vous voulez approfondir la « fonction » sudo, voir ici par exemple : http://doc.ubuntu-fr.org/sudo 4.3 – Installer RSYNC : Le logiciel rsync va nous permettre de copier nos partitions avec suffisamment de retours d’informations en cas de problème. Ici je m’adresse à nouveau à ceux qui ne connaissent rien à linux, car sous linux il n’est pas « habituel » d’aller télécharger un programme, de lancer la procédure d’installation… pour pouvoir l’utiliser. En effet, bien qu’il soit possible d’installer « à la main » un logiciel sous linux, le plus souvent on utilise un gestionnaire de paquets. - L’avantage premier est que le plus souvent il suffit de dire au gestionnaire de paquets que l’on veut installer tel ou tel logiciel, il se charge de le récupérer et de l’installer. - Autre avantage, on limite le risque d’aller récupérer des fichiers vérolés en passant par des sites inconnus. - Dernier avantage non négligeable ; le gestionnaire gère comme un grand les dépendances. S’il manque une librairie ou un logiciel tiers, ou qu’il faut les mettre à jour avant de procéder à l’installation du logiciel voulu, le gestionnaire de paquet s’en occupe tout seul. Par conséquent, pour installer rsync on entre et valide : sudo apt-get install rsync Si une nouvelle version existe, il vous propose de la télécharger et de l’installer, sinon il vous indique que l’on dispose de la dernière version. On peut donc passer aux choses sérieuses, la copie de la partition. V – COPIER LES PARTITIONS SUR LA CLEF USB : On s’accroche car ça va se compliquer un peu. On va créer un répertoire temporaire afin d’y copier la partition voulue de la carte SD et on va lier ce répertoire avec la partition créée sur la clef USB au tout début de ce tutorial. Puis on lance la copie de la partition de la carte SD vers le répertoire créé à l’instant en excluant certains répertoires. 5.1 – Créer le répertoire temporaire et le lier avec la Clef USB : Pour créer notre répertoire on utilise la commande mkdir. Ceci nous donne : sudo mkdir /tmp/usbboot On va monter le répertoire avec la partition de la Clef USB : sudo mount /dev/sda1 /tmp/usbboot Maintenant vous savez pourquoi nommer la partition ainsi sur ma clef USB ; pour facilement la reconnaître et l’associer par la suite avec la copies de la partition de la carte SD : Le répertoire usb_boot va sur la partition sda1 nommée UBS_BOOT de la clef USB. 5.2 – « Re »-Monter la partition principale : Le titre n’est pas très clair, mais pour faire simple on veut copier notre partition principale de la carte SD alors même que celle-ci est exécutée et peut changer tandis que l’on y travaille… Ca risque de poser quelques problèmes… Pour contourner la difficulté, on va copier et monter cette partition principale avec une option un peu spécifique « bind », puis lancer la copie à proprement parler depuis cette « nouvelle » partition principale. On commence en créant le répertoire qui accueillera la partition principale ainsi montée : sudo mkdir /tmp/sd_boot Puis on va « lier/monter/synchroniser » (utilisez le vocable de votre choix), ce répertoire et la véritable partition principale : sudo mount --bind / /tmp/sd_boot/ Cela semble rien, mais sans cette petite astuce, on ne pouvait pas faire cette manipulation tout en laissant la raspbian s’exécuter (donc arrêt du raspberry, insertion de la SD et de la clef USB sur un ordinateur équipé de linux, puis copie, puis retranchement du tout pour voir si cela fonctionne…). Pour approfondir la commande mount bind voir ici (4° point). 5.3 Copier la partition sur la Clef USB : Maintenant on peut copier nos partitions. Tout d’abord on s’assure d’être à la racine : cd / Puis on lance la copie : sudo rsync -avh --exclude 'tmp/' --exclude 'boot/' /tmp/sd_boot/ /tmp/usbboot/ Cette fonction va nous copier l’intégralité du répertoire sd_boot (qui est en fait une « copie » de la partition principale) vers le répertoire usb_boot qui est lui-même lié à la partition sda1 de la clef USB. A cette occasion, on fait en sorte d’exclure les répertoires boot et tmp: . le répertoire boot n’a aucune utilité sur la clef USB, puisqu’il ne peut être exécuté que depuis la carte SD. . le répertoire « tmp » doit être lui aussi exclu puisqu’il est le répertoire de destination de la copie… L’opération de copie n’est pas instantané donc on patiente jusqu’au retour de l’invité de commande… Il faut encore recréer la partition « tmp » sur la partition principale copiée sur sda1 puisqu’il a été nécessaire de l’exclure, de même s’agissant de boot: sudo mkdir /tmp/usbboot/tmp /tmp/usbboot/boot Voila, le plus « dur » est fait, il ne reste plus qu’à indiquer au boot où chercher les partitions. VI – MODIFIER LES FICHIERS DE BOOT : Pour modifier un fichier, il faut l’éditer, modifier son contenu et sauvegarder, pour cela on utilise le logiciel nano. 6.1 – Modifier le fstab : Le fichier qu’il convient de modifier le premier est le fichier fstab tel que copier dans usb_boot : sudo nano /tmp/usbboot/etc/fstab Il s’affiche ceci : proc /proc proc defaults 0 0/dev/mmcblk0p1 /boot vfat defaults 0 2/dev/mmcblk0p2 / ext4 defaults,noatime 0 1 Naturellement on donne le nom de nos partitions en remplaçant le fichier ainsi: proc /proc proc defaults 0 0/dev/mmcblk0p1 /boot vfat defaults 0 2/dev/sda1 / ext4 defaults,noatime 0 1 Pour sauvegarder on fait contrôle o et pour sortir on fait contrôle x 6.2 – Modifier cmdline.txt : Ce fichier cmdline.txt est celui toujours présent sur la carte SD. Il se présente normalement ainsi : dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait Le but est évidemment de remplacer mmcblk0p2 par sda1. Pour ouvrir et modifier le fichier cmdline.txt, on entre : sudo nano /boot/cmdline.txt Et on remplace la partie root=/dev/mmcblk0p2 par root=/dev/sda1, cela donne : dwc_otg.lpm_enable=0 root=/dev/sda1 rootfstype=ext4 elevator=deadline rootwait Pour sauvegarder on fait contrôle o et pour sortir on fait contrôle x (Ceux qui veulent utiliser l’UUID, en soit c’est une bonne idée, sauf que pour des raisons que j’ignore, cela ne fonctionne pas. Donc on reste avec les identifiants sda1, sda2…) VII – RELANCER RASPBIAN : Voilà, sauf mauvaise manipulation ou plantage tout est réglé pour fonctionner sur la Clef USB. Il reste donc à relancer la machine pour voir le résultat. On entre : sudo reboot Sous windows on peut fermer la fenêtre putty et sous linux la connexion SSH est naturellement perdue. La machine reboot, il faut patienter quelques instants et croiser les doigts… On relance sa connexion SSH et on se logue… Dans tous les cas on reste non-violent ^^ ! VIII – FINALISER L’INSTALLATION : Il convient encore de finaliser notre petite installation : paramètres régionaux, changer le mot de passe (fortement recommandé si par la suite on veut rendre la machine accessible sur le net)…. Tout d’abord et pour une raison que je n’ai pas encore déterminé notre dossier temporaire n’est pas accessible à certains programmes, donc pour régler le problème : sudo chown root:root /tmpsudo chmod 1777 /tmp Petites explications rapides pour les utilisateurs de windows. La commande chown permet de changer le propriétaire d’un dossier. Ainsi on s’assure que le compte root est propriétaire de répertoire temporaire. La commande chmod permet de changer les permissions d’accès à un répertoire ou un fichier. Les 4 chiffres qui suivent permettent de préciser ces permissions d’accès. 0 = aucun droit et 7 = tous les droits de lecture, écriture et exécution. 1777 donne les droits, le 1 devant interdit de supprimer ce répertoire et de changer les droits. Il s’agit maintenant de changer le mot de passe du compte « pi » (de préférence par un mot complexe et long), voire d’affiner les paramètres régionaux, entrez ceci et suivez les instructions : sudo raspi-config Ceci fait, on termine en faisant les éventuelles mises à jour nécessaires : sudo apt-get update Puis: sudo apt-get upgrade On en a terminé, l'installation est à jour et (normalement) parfaitement fonctionnelle
  4. Le but de ce petit tutorial est de monter un serveur WEB (html, php, mysql, phpMyAdmin et serveur ftp) sur un raspberry où a été préalablement installée la distribution raspbian. Au final, il s'agit donc d'héberger son site sur un raspberry! Ce tutorial fait suite au précédent s’agissant de l’installation de la distribution raspbian sur une clef USB (voir ici). Le serveur devra offrir les fonctionnalités de base d’un serveur WEB et être accessible depuis le internet. Ceci implique un minimum de sécurisation. En outre, il disposera de « stratégies » basiques de sauvegarde afin de pouvoir restaurer rapidement le serveur. INTRODUCTION : CHAPITRE I : INSTALLATION ET CONFIGURATION SUR SERVEUR WEB : I – PRE-REQUIS LOGICIELS ET MATERIELS : II – INSTALLATION DE MYSQL : 2.1 – Préparation de l’installation de mysql : 2.2 – Installation du serveur mysql : II – INSTALLATION ET LANCEMENT DE NGINX : III – INSTALLATION DE PHP-FPM : IV – INSTALLATION ET CONFIGURATION DE PHPMYADMIN : V – CONFIGURATION DU SERVEUR : 5 - 1 - Création du répertoire pour le site : 5 - 2 - Création du fichier de configuration Nginx pour notre site : VI – INSTALLATION D’UN SERVEUR FTP : VII – AFFICHER SA PREMIERE PAGE : CHAPITRE II : SECURISATION DU SERVEUR : I – CONFIGURATION D’IPTABLES 1.1 – Ouverture du fichier de configuration d’IpTables 1.2 – Purge des règles antérieures et définition des règles de blocage par défaut 1.3 – Ouvrir uniquement les ports nécessaires 1.4 – Limiter les attaques par déni de service et le scan de ports 1.5 – Bloquer une IP ou une plage d’IP 1.6 – Tester et sauvegarder nos réglages II – INSTALLER ET CONFIGURER FAIL2BAN 2.1 – Installer Fail2Ban 2.2 – Configurer Fail2Ban 2.3 – Eviter les erreurs au lancement de Fail2Ban 2.4 – Relancer Fail2Ban III – INSTALLER PORTSENTRY 3.1 – Installer Portsentry 3.2 – Configurer Portsentry CHAPITRE III : SAUVEGARDER LE SERVEUR : Work in progress ANNEXES : Work in progress INTRODUCTION : L’objectif est bien ici de disposer d’un serveur WEB avec toutes les fonctionnalités de base, mais encore de rendre accessible celui-ci sur le WEB et dont de faire un minimum attention à la sécurité. Bref, on veut devenir un vieux barbu… L'intérêt est évident si on veut herger son site WEB (ou son cloud, son serveur de médias...) cela implique d'avoir une machine allumée 24h/24 7j/7 avec la consommation qui va avec et le bruit de la tour... Le raspberry consomme très peu et est totalement passif, donc c'est une solution de bon sens pour un petit site. Naturellement, on ne va pas héberger un site avec des centaines d'utilisateurs simulmatés et des requêtes intermidables sur le serveur. Je ne manquerai pas de préciser dans les annexes le potentiel exact d'un raspberry s'agissant d'une utilisation en serveur WEB, mais il est évident que le site WEB lui-même devra être pensé pour limiter les requetes inutiles. Comme pour « mes » deux tutoriaux précédents, ils existent pas mal de guides sur le WEB concernant l’installation d’un serveur WEB sur raspberry. Et comme souvent, soit il est choisi d’installer Apache qui est tout simplement un non-sens sur une petite machine comme le raspberry, soit on propose l’installation d’autres serveurs mais en omettant certaines précisions et notamment de mentionner que l’installation habituelle de mysql pose problème. Pour l’essentiel de l’installation, je me suis inspiré de ce tutorial (en anglais) : http://raspberrypihelp.net/tutorials/24-raspberry-pi-webserver S’agissant du deuxième sujet, à savoir la sécurisation et tandis que ce sujet n’est pas spécifique au raspberry, les guides complets sont extrêmement rares et c’est regrettable… Deux cependant sont excellents (aussi bien pour les outils proposés que pour l’effort d’accessibilité fait par leurs auteurs) : - le tutorial d’alsacréations ici http://www.alsacreations.com/tuto/lire/622-Securite-firewall-iptables.html - le tutorial juju251 sur clubic ici Enfin, dans un troisième temps, il conviendra de sauvegarder son serveur afin de pouvoir le restaurer rapidement. Dans la mesure du possible, on tentera d’automatiser ces sauvegardes. CHAPITRE I : INSTALLATION ET CONFIGURATION SUR SERVEUR WEB : I – PRE-REQUIS LOGICIELS ET MATERIELS : J’ai naturellement fait des choix subjectifs ici. D’abord en raison de mes besoins comme pour mysql qui m’est indispensable, mais qui n’est pas forcément un choix logique car mysql n’est pas franchement léger tandis que raspberry n’est vraiment pas un monstre de puissance. Un choix plus rationnel est d’installer sqlite bien plus léger (mais qui n’offre pas les mêmes possibilités). S’agissant du serveur WEB, la majorité installe Apache tandis que même optimisé ce serveur est vraiment très lourd (à l’inverse il est probablement le plus robuste, riche de fonctionnalités, documenté et sans aucun doute le plus courant). Je n’ai même pas voulu tenter une telle installation qui me semble totalement inappropriée sur une machine comme le raspberry à la puissance nécessairement limitée. Deux alternatives sont souvent citées Lighttpd et Nginx, vraiment plus légers qu’Apache. Un troisième serveur que je n’ai jamais testé est Pancake qui d’après les retours est plus léger encore. J’ai donc arbitré entre Lighttpd et Nginx : - le premier est « mieux » documenté que le deuxième. - Nginx semble très légèrement plus réactif que Lighttpd (de très peu). - Nginx consomme moins de mémoire que Lighttpd qui lui-même en consomme peu. - en terme de fonctionnalités, c’est sensiblement la même chose. Certaines fonctions courantes impliquent l’installation de modules avec Lighttpd, là où Nginx gère ces fonctionnalités nativement. La seule différence notable est peut-être pour moi la gestion du virtualhost en faveur de Nginx. - la configuration de Nginx serait plus complexe que celle de Lighttpd. J’ai choisi Nginx qui ne m’a pas posé de problème particulier d’installation ou de configuration et dont la faible consommation mémoire est une caractéristique plus qu’intéressante pour un raspberry. Enfin, phpMyAdmin me semble une évidence pour un feignant comme moi tout comme un serveur ftp, en l’espèce ici : VSFTPD. - Coté matériel, je n’entre pas dans les détails. Certains expliquent que l’installation de mysql implique de disposer de quasiment 4 gigas de libre. On ne doit pas installer la même chose, car au final la distribution raspbian et le serveur WEB complet occupent un peu plus de 2 gigas sur la partition (de 8 gigas au total, c'est-à-dire un peu plus d’un quart de la capacité de ma clef USB)… Pour des pré-requis matériels complets vous pouvez lire le tutorial précédent ici (point I). De même, je n’explique pas à nouveau comment se connecter en SSH à sa raspbian depuis son ordinateur et qu’il est nécessaire de changer le mot de passe du compte pi par un mot de passe complexe et long. (Sinon, vous pouvez vous reporter au point 3.2 du tutorial précédent pour la connexion SSH et VIII pour le mot de passe, ici). II – INSTALLATION DE MYSQL : 2.1 – Préparation de l’installation de mysql : C’est sans aucun doute le seul point « difficile » de l’installation. Certains expliquent qu’il y aurait un bug connu mais non encore résolu concernant l’installation de mysql sur raspberry… Bla bla bla… En réalité, le plantage qui semble le plus courant à l’installation et que je n’ai pas manqué de rencontrer, est que le script d’installation (pourtant lancé avec sudo) n’arrive pas à écrire dans le répertoire temporaire de la raspbian. Je n’ai pas encore trouvé d’explication à cela, en revanche, comment résoudre le problème est relativement simple. Il faut s’assurer des droits de « root » sur le répertoire « tmp ». Si vous ne comprenez rien à ce charabia, retournez sur le tutorial précédent ou exécutez comme une brute les commandes suivantes dans votre terminal SSH : sudo chown root:root /tmpsudo chmod 1777 /tmp Ceci fait, on s’assure que la distribution raspbian est à jour si ce n’est pas déjà fait en exécutant les commandes suivantes : sudo apt-get updatesudo apt-get upgrade 2.2 – Installation du serveur mysql : Attention c’est vraiment compliqué et la commande est très secrète (on ne l’a donne qu’entre vieux barbus… c’est dire !) : sudo apt-get install mysql-server-5.5 Le gestionnaire de paquets va télécharger les paquets nécessaires et lancer l’installation. ATTENTION : durant la procédure d’installation un écran bleu s’affiche et demande d’entrer le mot de passe qui sera utilisé pour accéder au serveur mysql avec tous les droits. Il faut donc entrer un mot de passe relativement long, dans tous les cas complexe et surtout le retenir… Normalement, l’installation s’achève correctement avec notamment un petit [OK] vert après le lancement du serveur signe que tout va bien. NOTE : si par malchance vous avez un petit [FAIL] rouge après le lancement de mysql. Je vous confirme qu’il y a bien un problème… Avant tout, regardez les alertes affichées quelques lignes plus hauts, le plus souvent une recherche sur google vous donnera la réponse si vous relevez le code d’erreur. Avant de vous lancez dans la ré-installation du serveur mysql, faites deux choses : - d’abord, il faut virer le serveur mysql et tous les fichiers qui vont avec à l’aide de ces commandes : sudo apt-get purge mysql-server-5.5sudo rm -rf /var/lib/mysql - ensuite, assurez-vous d’avoir donné les droits à root sur le répertoire tmp comme indiqué au point 1.1. Ceci fait, vous pouvez relancer l’installation… II – INSTALLATION ET LANCEMENT DE NGINX : C’est donc ceci qui est considéré comme « complexe » par certains, pour installer Nginx, il faut saisir la commande : sudo apt-get install nginx Et pour lancer le service Nginx, il faut saisir la commande : sudo service nginx start Effectivement, c’est totalement insurmontable d’installer un serveur WEB Nginx… III – INSTALLATION DE PHP-FPM : Ceci permet de faire communiquer le serveur WEB avec PHP. Pour l’installer : sudo apt-get install php5-fpm Il n’y a rien à faire de particulier. IV – INSTALLATION ET CONFIGURATION DE PHPMYADMIN : PhpMyAdmin est un logiciel permettant de gérer ses bases de données mysql du serveur depuis son navigateur WEB. C’est un classique qui bien pratique lorsqu’on doit mettre le nez dans ses bases pour vérifier que tout va bien. Pour l’installer, on entre : sudo apt-get install phpmyadmin Passez les options de pré-configuration pour Apache ou Lighttpd (touche « TAB »). S’affiche alors « Configure database for phpmyadmin with dbconfig-common ? », naturellement sélectionnez « Yes ». Il va vous être demandé le mot de passe pour accéder au serveur Mysql et le mot de passe pour phpMyadmin. Ceci fait, on relance php5-fpm : sudo service php5-fpm restart V – CONFIGURATION DU SERVEUR : Le serveur n’est pas encore fonctionnel, il faut créer le répertoire où on va stocker le(s) site(s) WEB, donner les droits d’écriture nécessaires, créer quelques petits fichiers pour surveiller le bon fonctionnement du serveur (logs) et enfin configurer Nginx pour propulser votre site. Il vous faut à ce stade une vague idée du nom de votre site par exemple : toto.fr 5 - 1 - Création du répertoire pour le site : Pour créer le répertoire où seront stockés tous nos sites : sudo mkdir /srv/www Puis on donne la propriété et les droits d’écriture à notre compte, qui est normalement le compte « pi » sauf changement de votre part: sudo chown -R pi:www-data /srv/wwwsudo chmod -R 755 /srv/www Il faut naturellement créer le répertoire de notre premier site, toto.fr : mkdir /srv/www/toto.fr On entre dans ce répertoire pour y créer deux fichiers vides ; l’un pour le log du site, l’autre pour les erreurs : cd /srv/www/toto.frmkdir logsnano logs/access.log Contrôle x pour sortir nano logs/error.log Contrôle x pour sortir Enfin, il faut créer dans le répertoire de notre site toto.fr un répertoire public, lieu où on mettra nos pages pour les rendre accessibles : mkdir public 5 - 2 - Création du fichier de configuration Nginx pour notre site : Il reste à paramétrer Nginx pour qu’il cherche les pages de notre site et le propulse en ligne (pour le moment sur le réseau local ^^). Pour cela on entre : sudo nano /etc/nginx/sites-available/toto.fr Il faut compléter le fichier de configuration ainsi (192.168.0.50 est l'IP du raspberry sur le réseau local) : server {server_name toto.fr 192.168.0.50;access_log /srv/www/toto.fr/logs/access.log;error_log /srv/www/toto.fr/logs/error.log;root /srv/www/toto.fr/public/; location / {index index.php index.html index.htm;try_files $uri $uri/ /index.php?$args; } location ~ \.php$ {include /etc/nginx/fastcgi_params;fastcgi_pass unix:/var/run/php5-fpm.sock;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /srv/www/toto.fr/public$fastcgi_script_name; } location /phpmyadmin {root /usr/share/;index index.php index.html index.htm;location ~ ^/phpmyadmin/(.+\.php)$ {try_files $uri =404;root /usr/share/;fastcgi_pass unix:/var/run/php5-fpm.sock;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include /etc/nginx/fastcgi_params; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {root /usr/share/; } } location /phpMyAdmin {rewrite ^/* /phpmyadmin last;}} Contrôle o pour sauvegarder, contrôle x pour sortir. Très bien, on peut créer un petit lien symbolique entre les répertoires « sites disponibles » et « sites activés » : sudo ln -s /etc/nginx/sites-available/toto.fr /etc/nginx/sites-enabled/toto.fr On relance Nginx pour que les fichiers de configuration soient pris en compte : sudo service nginx restart VI – INSTALLATION D’UN SERVEUR FTP : Ceci n’est pas indispensable, mais pour moi un serveur WEB va avec un serveur ftp. Accessoirement, l’administrateur du site n’est pas nécessairement l’administrateur du serveur WEB, aussi il peut être pratique de ne donner qu’un accès FTP à l’administrateur du site (et un compte limité sur mysql via phpadmin) pour éviter des bidouillages sur le serveur WEB. Là encore j’ai opté pour un serveur léger afin de préserver les ressources du raspberry ; VSFTPD. Pour l’installer : sudo apt-get install vsftpd Il faut modifier le fichier de configuration de VSFTPD pour le sécuriser un minimum mais aussi créer les accès : sudo nano /etc/vsftpd.conf On recherche la ligne : anonymous_enable=YES pour naturellement la changer en anonymous_enable=NO afin d’interdire l’accès utilisateurs anonymes. Et on dé-commente les lignes suivantes (retirer les #) afin de permettre aux comptes utilisateurs de la raspbian de se connecter et d’avoir les droits d’écriture : local_enable=YESwrite_enable=YESlocal_umask=022 Contrôle o pour sauvegarder, contrôle x pour sortir. On configurera des comptes limités (notamment celui de l’administrateur du site), dans les annexes. On relance le serveur FTP pour que les modifications du fichier de configuration soient prises en compte : sudo service vsftpd restart A ce stade, vous pouvez normalement vous connecter avec votre client ftp avec le compte « pi ». VII – AFFICHER SA PREMIERE PAGE : Pour s’assurer que tout fonctionne il faut encore avoir une page pour l’afficher… Afin de voir que tout est fonctionnel, on va faire en sorte que cette page affiche l’état du serveur à l’aide de la fonction php : phpinfo() On va donc créer une page index.php et y coller la fonction voulue: nano /srv/www/toto.fr/public/index.php On entre dans le fichier ceci : <?php phpinfo();?> Contrôle o pour sauvegarder, contrôle x pour sortir. Pour vérifier, on lance le navigateur WEB de son choix et dans la barre d’adresse on entre l’adresse ip de notre serveur raspberry… roulements de tambour … s’affichent les infos du serveur. On peut même accéder à Phpmyadmin en ajoutant à l’URL « /phpmyadmin/ ». Je ne sais pas si vous avez la même réflexion que moi à cet instant, mais je trouve que c’est extrêmement réactif… On monitorera les performances du serveur dans un second temps pour s’en convaincre, mais la solution Nginx (et sans doute Lighttpd) est redoutablement efficace au regard de la puissance du raspberry. A ce stade, vous pouvez uploader votre site WEB sur le serveur, paramétrer vos bases de données mysql, bref programmer votre site WEB en perspective de le rendre accessible depuis internet. Mais ne permettez pas encore l’accès depuis internet au serveur (pas encore de redirection de ports à ce stade ou de DMZ sur votre routeur/box). Le serveur WEB ne doit être accessible qu’en local car il est très peu (quasiment pas) sécurisé et est très vulnérable. CHAPITRE II : SECURISATION DU SERVEUR : Il y a énormément d’options possibles et d’outils s’agissant de la sécurisation d’un serveur WEB sous linux. Là encore, j’ai du faire un arbitrage entre les outils les plus courants mais aussi le choix de ne pas surcharger le raspberry. A mon sens on ne peut pas faire l’économie de trois outils : - IpTables : qui est THE firewall, - Fail2ban : permet de bannir les IP qui tentent de se connecter à l’aide d’attaques par dictionnaires de mots de passe ou par bruteforce, - Portsentry : qui va détecter le scan des ports du serveur et bloquer toutes les requêtes provenant de l’IP de l’attaquant. On peut aussi envisager d’installer Rkhunter, qui va chercher si une intrusion (réussie donc) n’a pas laissé une porte ouverte, une backdoor. I – CONFIGURATION D’IPTABLES : La configuration d’IpTables est sans l’ombre d’un doute le point le plus important et le plus complexe de la sécurisation d’un serveur WEB sous linux. Il ne faut vraiment pas se planter car l’essentiel de la sécurité de notre raspberry est là. Le fichier de configuration se trouve dans /etc/init.d/firewall. Ce fichier doit toujours rester structuré et commenté afin de s’y retrouver. En outre, les autres logiciels de sécurisation vont eux-mêmes ajouter des éléments au fichier de configuration d’IpTables, donc il faut pouvoir facilement distinguer les éléments qui sont ceux de notre configuration « manuelle », de ceux ajoutés notamment par Fail2ban. Enfin et j’insiste lourdement ici : on ne doit jamais rendre le fichier de configuration d’IpTables exécutable au démarrage du Raspberry sans s’être assuré que tout fonctionne et est accessible. A défaut et avec une erreur de configuration « bloquant plus que nécessaire », il n’y aura d’autre choix que de brancher le raspberry à un écran et clavier pour reprendre la main sur notre serveur… 1.1 – Ouverture du fichier de configuration d’IpTables : On ouvre une connexion SSH. Et on entre la commande : sudo nano /etc/init.d/firewall 1.2 – Purge des règles antérieures et définition des règles de blocage par défaut : Le fichier doit se présenter ainsi : #!/bin/sh# Suppression des règles antérieuresiptables -t filter -Fiptables -t filter -X# On laisse tout sortir et on bloque tout en entréeiptables -t filter -P INPUT DROPiptables -t filter -P FORWARD DROPiptables -t filter -P OUTPUT ACCEPT# On conserve les connexions déjà établiesiptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT# On autorise le loopbackiptables -t filter -A INPUT -i lo -j ACCEPTiptables -t filter -A OUTPUT -o lo -j ACCEPT Le loopback permet l’accès à soi-même de la machine… 1.3 – Ouvrir uniquement les ports nécessaires : Pour un serveur WEB on doit laisser accessible le port 80 (http) et le port 21 (ftp). Ceci donne : # Serveur HTTP (80)iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPTiptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT# Serveur FTP (21) dont mode passifmodprobe ip_conntrack_ftpiptables -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPTiptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPTiptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT Il faut aussi permettre l’accès en SSH à notre Raspberry, soit et par défaut le port 22. (Surtout si on veut ne pas y brancher d’écran, clavier et souris). Là deux « écoles » existent : - on laisse le SSH accessible depuis l’extérieur dans ce cas on change le port par défaut du SSH et on limite au mieux les tentatives de connexions intempestives. - on n’a besoin d’accéder au SSH que depuis le réseau local, dans ce cas on accepte que les connexions en SSH depuis le réseau local. Pour moi, permettre l’accès en SSH depuis l’extérieur est un risque que je peux éviter. Risque important cas si quelqu’un arrive à se connecter, notamment avec le compte « pi » voire root, il peut tout faire sur le raspberry (voire sur le lan en cas de partage depuis une boxadsl…). -> Si vous souhaitez accéder en SSH depuis l’extérieur : Par défaut, le port SSH est le 22, mais il est recommandé d’en changer. # Connexionx SSHiptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -j ACCEPTiptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP Ici, il ne peut y avoir plus de 4 connexions SSH par minute. -> Si vous souhaitez accéder en SSH que depuis le réseau local (192.168.0.x) : # Connexionx SSHiptables -A INPUT -i eth0 -p tcp -s 192.168.0.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT - Il est utile que notre serveur réponde au ping, cependant, il me semble intéressant de limiter le nombre de pings possibles par minute pour qu’une demande de ping un peu musclée ne plante pas le raspberry. Ici j’ai limité à 15 pings par minutes : # Autorisation du PING :iptables -A INPUT -p icmp -m limit --limit 15/minute -j ACCEPTiptables -A INPUT -p icmp -j DROP 1.4 – Limiter les attaques par déni de service et le scan de ports : Sans que ces options soient suffisantes, elles sont une bonne base : # Bloquer les attaques par déni de serviceiptables -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPTiptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPTiptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT# Bloquer les scans de portsiptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT 1.5 – Bloquer une IP ou une plage d’IP : Il peut être intéressant de bloquer une IP, voir une plage d’IP. Pour par exemple bloquer les IP 85.159.236.252 et 193.107.240.1 : # Bloquer des IP spécifiquesiptables -A INPUT -s 85.159.236.252 -j DROPiptables -A INPUT -s 193.107.240.1 -j DROP On peut aussi souhaiter bloquer une plage IP dans son entier. C’est parfois « utile » pour bloquer l’essentiel des connexions d’un pays mais ça fait très mal du coté de la neutralité du net, dont on utilisera ce type de blocage qu’en dernier recours… Par exemple, pour bloquer toute la plage d’ip de 213.87.0.*, cela donne : # Bloquer des plages d’IPiptables -I INPUT 1 -s 213.87.0.0/16 -j DROP Au passage, il faut faire attention à ne pas bloquer sa propre IP ^^. 1.6 – Tester et sauvegarder nos réglages : Avant de lancer notre configuration d’IpTables à chaque lancement du raspberry, on va s’assurer que tout fonctionne. Tout d’abord, on sauvegarde notre configuration en faisant : control o, on valide, contrôle x Il faut rendre notre fichier de configuration exécutable : sudo chmod +x /etc/init.d/firewall Et on l’exécute : sudo /etc/init.d/firewall Tentez de vous connecter en SSH, d’afficher votre page WEB… pour s’assurer que tout fonctionne et que l’on n’a pas une erreur de configuration. Si ça bloque… relancez le raspberry et chercher votre erreur (souvent un problème de syntaxe). Si tout est ok, on fait en sorte que le script de configuration d’IpTables s’exécuter à chaque lancement du raspberry : sudo update-rc.d firewall defaults Et voila, IpTables est configuré et à ce stade on a déjà bien sécurisé notre serveur ! Il faut admettre que la syntaxe d’IpTables n’est pas forcément toujours compréhensible, si vous souhaitez étudier cela plus en profondeur : http://doc.ubuntu-fr.org/iptables II – INSTALLER ET CONFIGURER FAIL2BAN : Fail2Ban va surveiller les tentatives d’intrusions sur notre petit serveur WEB et plus particulièrement les tentatives de connexion via des dictionnaires id/mots de passe ou par bruteforce. L’idée est donc de bloquer une IP après x tentatives de connexions échouées pour un temps donné, voire définitivement. 2.1 – Installer Fail2Ban : Comme toujours la commande d’installation est très difficile : sudo aptitude install fail2ban On accepte l’installation et on patiente un peu, le logiciel s’installe tout seul comme un grand… 2.2 – Configurer Fail2Ban : Pour ouvrir le fichier de configuration : sudo nano /etc/fail2ban/jail.conf Ce fichier se décompose en 3 parties : Default, Actions et Jail. Dans la section Default on peut préciser le paramétrage général du logiciel, ainsi : > ignoreip permet de préciser les IP qui ne doivent pas être surveillées (on les sépares par un espace), à minima on laisse ignoreip = 127.0.0.1/8 > bantime est le délai par défaut de bannissement en secondes, par défaut 600, soit 10 minutes. > maxretry permet de définir le nombre maximum d’échec de connexions avant le bannissement, par défaut c’est 3 tentatives. > destemail permet de définit l’adresse email qui recevra un email s’il y a un incident détecté par Fail2Ban. Par défaut, cela va dans le compte root. On peut laisser le reste inchangé tout comme la section Actions. C’est donc la section Jail qui va nous occuper. Dans cette section chaque type de connexions est proposée afin d’indiquer à Fail2Ban quoi surveiller. On peut naturellement en ajouter. Le principe est que pour un service donné, on indique le nombre de tentative de connexions avant bannissement. Si une option n’est pas indiquée, c’est le réglage par défaut qui s’applique. Ainsi, on va définir des prisons en fonction de la connexion et de l’action voulue. Pour limiter les tentatives de connexions en SSH, voila une petite prison basique (cette option est déjà activée par défaut) : # SSH Limiter à 3 tentatives avant ban de 15min[ssh]enabled = trueport = sshfilter = sshdlogpath = /var/log/auth.logmaxretry = 3bantime = 900 Si le port SSH n’est pas le 22, alors remplacez port = SSH, par port = [VOTRE PORT SSH] Il faut aussi ajouter une prison pour les connexions au FTP : [vsftpd]enabled = trueport = ftp,ftp-data,ftps,ftps-datafilter = vsftpdlogpath = /var/log/vsftpd.logmaxretry = 5 S’agissant de Nginx, il faut créer des prisons spécifiques et des filtres. > Tout d’abord les prisons : [nginx-auth]enabled = truefilter = nginx-authaction = iptables-multiport[name=NoAuthFailures, port=http,https]logpath = /var/log/nginx*/*error*.logbantime = 600maxretry = 6[nginx-login]enabled = truefilter = nginx-loginaction = iptables-multiport[name=NoLoginFailures, port=http,https]logpath = /var/log/nginx*/*access*.logbantime = 600maxretry = 6 [nginx-badbots]enabled = truefilter = apache-badbotsaction = iptables-multiport[name=BadBots, port=http,https]logpath = /var/log/nginx*/*access*.logbantime = 86400 # 1 jourmaxretry = 1 [nginx-noscript]enabled = trueaction = iptables-multiport[name=NoScript, port=http,https]filter = nginx-noscriptlogpath = /var/log/nginx*/*access*.logmaxretry = 6bantime = 86400 # 1 jour On sauvegarde avec contrôle o et on valide, puis on quitte nano avec contrôle x Il maintenant ajouter un à un les filtres nécessaires. Tout d’abord on se place dans le répertoire où sont stockés les filtres : cd /etc/fail2ban/filter.d/ Et va créer et sauvegarder un à un nos filtres : . Pour nginx-noscript.conf : sudo nano nginx-noscript.conf On entre pour le filtre nginx-noscript.conf: # Noscript filter /etc/fail2ban/filter.d/nginx-noscript.conf:# Bloque les IP qui tentent d’executer des scripts sur le serveur# type .php, .pl, .exe et autres# Matches e.g.# 192.168.1.1 - - "GET /something.php[Definition]failregex = ^<HOST> -.*GET.*(\.php|\.asp|\.exe|\.pl|\.cgi|\scgi)ignoreregex = Contrôle o, valider, contrôle x . Pour nginx-auth.conf : sudo nano nginx-auth.conf On entre pour ce filtre : # Auth filter /etc/fail2ban/filter.d/nginx-auth.conf:# Bloque les IP qui ne s’authentifient pas correctement[Definition]failregex = no user/password was provided for basic authentication.*client: <HOST> user .* was not found in.*client: <HOST> user .* password mismatch.*client: <HOST> ignoreregex = Contrôle o, valider, contrôle x . Pour nginx-login.conf: sudo nano nginx-login.conf On entre pour ce filtre : # Login filter /etc/fail2ban/filter.d/nginx-login.conf:# Bloque les IP qui ne s’authentifient pas correctement via post# Scan access log for HTTP 200 + POST /sessions => failed log in[Definition]failregex = ^<HOST> -.*POST /sessions HTTP/1\.." 200ignoreregex = Contrôle o, valider, contrôle x Le filtre badbots existe déjà car il s’agit en fait d’un filtre pour apache. 2.3 – Eviter les erreurs au lancement de Fail2Ban : Lorsqu’il y a beaucoup de prisons qui se lancent au chargement de Fail2Ban on peut avoir quelques erreurs. Pour éviter cela, il suffit de laisser un délai entre le chargement de chaque prison. Ouvrez le fichier fail2ban-client: sudo nano /usr/bin/fail2ban-client Vers la ligne 140 (ou avec contrôle w pour chercher le passage), ajoutez la ligne time.sleep(0.1) ainsi : def __ping(self): return self.__processCmd([["ping"]], False) def __processCmd(self, cmd, showRet = True): beautifier = Beautifier() for c in cmd: time.sleep(0.1) beautifier.setInputCmd© Contrôle o, valider, contrôle x 2.4 – Relancer Fail2Ban : Il faut maintenant relancer Fail2Ban pour que nos paramètres soient pris en compte : sudo service fail2ban restart Normalement, on a un beau ok indiquant que Fail2Ban a pu charger nos règles. En revanche, si c’est un FAIL qui s’affiche il y a sans doute une erreur (vérifiez la syntaxe de vos prisons et de vos filtres). III – INSTALLER PORTSENTRY : Le but est de bloquer les IP qui scannent les ports du raspberry à la recherche de failles en perspective d’une attaque. Théoriquement, IpTables et Fail2Ban nous protègent déjà, mais l’intérêt est ici de bloquer des IP avant même une tentative de connexion. 3.1 – Installer Portsentry : Pour lancer l’installation : sudo aptitude install portsentry A l’installation, Portsentry nous indique qu’il ne bloque rien par défaut. 3.2 – Configurer Portsentry : Tout d’abord on va indiquer les IP qu’il faut ignorer, naturellement, je vous invite à ignorer votre réseau local ou au moins l’IP locale du pc d’où vous vous connectez au raspberry. sudo nano /etc/portsentry/portsentry.ignore.static Aussi, sous 127.0.0.1/32 et 0.0.0.0 ajoutez votre réseau local par exemple 192.168.0.0/24, vous pouvez aussi ajouter les IP des principaux moteurs de recherche. Contrôle o pour sauvegarder, contrôle x pour sortir. Ici deux possibilités, soit on indique les ports qu’il faut surveiller, soit on laisse le soin au logiciel de le déduire des ports utilisés, c’est cette dernière option qui est la plus simple. On édite /etc/portsentry/portsentry.conf : sudo nano /etc/default/portsentry et on remplace cherche les options TCP_MODE="tcp"UDP_MODE="udp" En TCP_MODE="atcp"UDP_MODE="audp" Contrôle o pour sauvegarder, contrôle x pour sortir. Et on relance Portsentry pour s’assurer que l’on a pas de message d’erreur: sudo service portsentry restart Si c’est bon, on peut modifier le fichier principal de configuration de Portsentry pour lui demander de bloquer les tentatives de scans : sudo nano /etc/portsentry/portsentry.con Et on remplace : BLOCK_UDP="0"BLOCK_TCP="0" En : BLOCK_UDP="1"BLOCK_TCP="1" Contrôle o pour sauvegarder, contrôle x pour sortir. Et on relance Portsentry pour activer la configuration : sudo service portsentry restart Et voilà, Portsentry est fonctionnel… Ouf !!! Voilà pour le chapitre 2… C’est déjà un beau bébé, donc je ne souhaite pas charger la mule ici. En revanche, on peut encore sécuriser par mal de chose ; tout d’abord Nginx lui-même en limitant les attaques par débordement de tampon, en sécurisant l’accès de certains répertoire du site, en limitant le nombre de connexions simultanées… Mais encore Mysql… J’aborderai rapidement cela dans les annexes. CHAPITRE III : SAUVEGARDER LE SERVEUR : Work in progress ANNEXES : Ne va pas tarder.
×