![Rasberry-Pi](https://hackmd.io/_uploads/HyFc3T-YC.jpg) **Date** : 26 Juillet 2024 **Auteur** : cyberhunter443 # Configurer un Raspberry Pi de manière sécurisée Ce petit ordinateur polyvalent, bien que puissant et versatile, peut devenir une porte d'entrée pour les cyberattaquants s'il n'est pas correctement protégé. Que vous l'utilisiez comme serveur domestique, centre multimédia, dispositif IoT, ou pour vos projets de cybersécurité avancés, chaque Raspberry Pi connecté à Internet est potentiellement exposé à des risques. Ce guide exhaustif vous accompagnera ainsi pas à pas dans la mise en place d'une configuration sécurisée pour votre Raspberry Pi. Nous aborderons des aspects cruciaux tels que : - La mise à jour et le renforcement du système d'exploitation - La sécurisation des connexions SSH pour prévenir les accès non autorisés - La configuration d'un pare-feu robuste pour filtrer le trafic réseau - L'implémentation de bonnes pratiques de gestion des utilisateurs et des permissions - L'utilisation d'outils de surveillance et de détection d'intrusions --- ### Mise à Jour et Préparation du Système La première étape pour sécuriser votre Raspberry Pi est de vous assurer que le système d'exploitation et tous les logiciels installés sont à jour. ``` sudo apt update sudo apt upgrade -y sudo apt dist-upgrade -y sudo apt autoremove -y ## Changer le mots de passe par défault passwd ``` --- #### Utilisation de raspi-config L'outil `raspi-config` vous aide à configurer votre Raspberry Pi. Les options disponibles peuvent différer entre les modèles Raspberry Pi. Pour ouvrir l'outil de configuration, exécutez la commande suivante : ``` sudo raspi-config ``` > ***Astuce*** : Les utilisateurs de Raspberry Pi Desktop peuvent accéder à une version graphique de cette application via **Préférences > Configuration Raspberry Pi**. Cependant, certaines configurations avancées ne sont disponibles que dans `raspi-config`. **Modifications automatiques :** `raspi-config` automatise les modifications à `/boot/firmware/config.txt` et divers fichiers de configuration Linux. Certaines options nécessitent un redémarrage pour prendre effet. Si vous avez changé l'un de ces paramètres, `raspi-config` vous demande de redémarrer lorsque vous quittez. --- ### Sécurisation de SSH SSH est une méthode courante pour accéder à distance à votre Raspberry Pi. Sécuriser SSH est crucial pour empêcher les accès non autorisés. 1. Ouvrez le fichier de configuration SSH : ```bash sudo nano /etc/ssh/sshd_config ``` 2. Modifiez le port par défaut de 22 à un autre port, par exemple : ```plaintext Port 2200 ``` 3. Désactivez l'accès root via SSH : ```plaintext PermitRootLogin no ``` 4. Redémarrez le service SSH pour appliquer les modifications : ```bash sudo systemctl restart ssh ``` ### Configurer Fail2Ban Fail2Ban est un outil qui aide à protéger votre Raspberry Pi contre les tentatives d'accès non autorisées en bloquant les adresses IP après un certain nombre de tentatives échouées. 1. Installez Fail2Ban : ```bash sudo apt-get install fail2ban ``` 2. Modifiez le fichier de configuration de Fail2Ban : ```bash sudo nano /etc/fail2ban/jail.local ``` 3. Ajoutez les configurations suivantes pour SSH : ```plaintext [sshd] enabled = true port = 2200 logpath = %(sshd_log)s maxretry = 5 bantime = 10m ``` 4. Redémarrez Fail2Ban : ```bash sudo systemctl restart fail2ban ``` ## Configuration du Pare-feu avec UFW Le pare-feu UFW (Uncomplicated Firewall) permet de gérer les règles de trafic réseau de manière simplifiée. ### Installer UFW 1. Installez UFW : ```bash sudo apt-get install ufw ``` ### Configurer les Règles de Pare-feu 1. Configurez les règles de pare-feu : - Bloquez tout le trafic entrant par défaut et autorisez le trafic sortant : ```bash sudo ufw default deny incoming sudo ufw default allow outgoing ``` - Autorisez les ports nécessaires (par exemple, SSH sur le port 2200) : ```bash sudo ufw allow 2200/tcp ``` - Activez UFW : ```bash sudo ufw enable ``` - Vérifiez le statut du pare-feu : ```bash sudo ufw status ``` --- ## Configuration d'un VPN Configurer un VPN peut ajouter une couche supplémentaire de sécurité en chiffrant votre connexion internet. ### Installer OpenVPN 1. Installez OpenVPN : ```bash sudo apt-get install openvpn ``` ### Configurer OpenVPN 1. Téléchargez et placez les fichiers de configuration dans le répertoire `/etc/openvpn/` : ```bash sudo cp /chemin/vers/votre/config.ovpn /etc/openvpn/client.conf ``` 2. Démarrez le service OpenVPN : ```bash sudo systemctl start openvpn@client ``` 3. Activez OpenVPN au démarrage : ```bash sudo systemctl enable openvpn@client ``` 4. Vérifiez l’état de la connexion VPN : ```bash sudo systemctl status openvpn@client ``` --- ## Configuration d'un Proxy Un proxy peut aider à anonymiser votre trafic internet ou à filtrer le contenu. ### Installer Squid 1. Installez Squid : ```bash sudo apt-get install squid ``` ### Configurer Squid 1. Modifiez le fichier de configuration de Squid : ```bash sudo nano /etc/squid/squid.conf ``` 2. Configurez les règles de base (exemple) : ```plaintext http_port 3128 acl localnet src 192.168.1.0/24 http_access allow localnet http_access deny all ``` 3. Redémarrez Squid pour appliquer les changements : ```bash sudo systemctl restart squid ``` 4. Activez Squid au démarrage : ```bash sudo systemctl enable squid ``` --- ## Configuration DNS Sécurisé avec DNSCrypt DNSCrypt aide à sécuriser les requêtes DNS en les chiffrant, ce qui empêche les attaques telles que l'empoisonnement DNS. ### Installer DNSCrypt 1. Installez DNSCrypt : ```bash sudo apt-get install dnscrypt-proxy ``` ### Configurer DNSCrypt 1. Modifiez le fichier de configuration de DNSCrypt : ```bash sudo nano /etc/dnscrypt-proxy/dnscrypt-proxy.toml ``` 2. Configurez le serveur DNS et les options selon vos préférences, par exemple : ```plaintext server_names = ['cloudflare', 'google'] ``` 3. Redémarrez DNSCrypt pour appliquer les modifications : ```bash sudo systemctl restart dnscrypt-proxy ``` 4. Activez DNSCrypt au démarrage : ```bash sudo systemctl enable dnscrypt-proxy ``` ## Les Répertoires Principaux Voici un aperçu des répertoires principaux d'un système Linux typique, tels que vous les trouverez sur votre Raspberry Pi : | Répertoire | Description | |-------------|--------------------------------------------------------------------------------------------------| | `/` | **Racine** : Contient tous les autres répertoires du système. | | `/bin` | **Commandes Essentielles** : Contient les commandes de base nécessaires pour les utilisateurs et les scripts (ex. `ls`, `cp`, `mv`). | | `/boot` | **Démarrage** : Fichiers nécessaires pour démarrer le système, y compris le noyau Linux et les fichiers de configuration du chargeur de démarrage (ex. `config.txt`). | | `/dev` | **Périphériques** : Fichiers de périphériques permettant l'interaction avec le matériel (ex. disques, périphériques USB). | | `/etc` | **Configuration** : Contient les fichiers de configuration pour le système et les applications (ex. `passwd`, `fstab`). | | `/home` | **Répertoires Utilisateurs** : Répertoires personnels des utilisateurs (ex. `/home/pi` pour l'utilisateur `pi`). | | `/lib` | **Bibliothèques Partagées** : Bibliothèques nécessaires pour les programmes dans `/bin` et `/sbin`. | | `/media` | **Support Amovible** : Points de montage pour les supports amovibles comme les clés USB et les cartes SD. | | `/mnt` | **Montage Temporaire** : Points de montage pour les systèmes de fichiers temporaires ou les montages manuels (ex. partages réseau). | | `/opt` | **Applications Tierces** : Contient des applications tierces installées manuellement ou via des packages. | | `/proc` | **Système Virtuel** : Fournit des informations sur les processus et le noyau (ex. `/proc/cpuinfo`, `/proc/meminfo`). | | `/root` | **Répertoire Root** : Répertoire personnel de l'utilisateur `root`. | | `/run` | **Runtime** : Contient les fichiers de runtime pour les services en cours d'exécution. | | `/sbin` | **Commandes Système** : Contient les commandes essentielles pour l'administration du système (`fdisk`, `reboot`). | | `/srv` | **Données de Services** : Contient les données utilisées pour les services fournis par le système (ex. données de serveur web). | | `/sys` | **Système Virtuel** : Fournit des informations sur les périphériques matériels et les pilotes. | | `/tmp` | **Fichiers Temporaires** : Contient des fichiers temporaires utilisés par les applications, souvent nettoyés au redémarrage. | | `/usr` | **Utilisateurs** : Contient les programmes, bibliothèques, et fichiers destinés aux utilisateurs. | | `/var` | **Données Variables** : Contient les fichiers dont le contenu varie pendant le fonctionnement du système (ex. journaux, caches). | --- #### Détails des Sous-Répertoires de `/usr` | Sous-Répertoire | Description | |-----------------|---------------------------------------------------------------------------------------| | `/usr/bin` | **Programmes Utilisateur** : Contient les exécutables pour les applications des utilisateurs. | | `/usr/lib` | **Bibliothèques** : Contient les bibliothèques partagées utilisées par les programmes dans `/usr/bin`. | | `/usr/share` | **Données Indépendantes de l'Architecture** : Contient des données partagées, de la documentation, et des fichiers de manuels. | #### Détails des Sous-Répertoires de `/var` | Sous-Répertoire | Description | |-----------------|---------------------------------------------------------------------------------------| | `/var/log` | **Journaux** : Contient les journaux système et des applications pour le suivi et le diagnostic. | | `/var/tmp` | **Fichiers Temporaires** : Contient des fichiers temporaires qui sont conservés entre les redémarrages. | --- **Raspberry Pi Projets** Voici une liste organisée de projets que j'ai utilisés, appréciés et que je recommanderais à tous ceux qui cherchent à utiliser leur Pi. Pour les liens vers chaque projet GitHub repo, voir: https://github.com/stars/Lissy93/lists/raspberry-pi #### Script pour automatiser la sécurisation de SSH !! J'ai également créer un script afin d'automatiser la sécurisation de SSH sur votre Raspberry Pi (système linux), soit en modifiant le port par défaut, en désactivant l'accès root, en désactivant l'authentification par mot de passe, et en redémarrant le service SSH. Projet disponible sur ma page Github: [github.com/cyberhunter443/Script-SSH](https://github.com/cyberhunter443/Windows-Security-Script/blob/master/script-ssh) --- ***Rédigé par @cyberhunter443***