Table des matières:

Pare-feu Raspberry Pi4 : 12 étapes
Pare-feu Raspberry Pi4 : 12 étapes

Vidéo: Pare-feu Raspberry Pi4 : 12 étapes

Vidéo: Pare-feu Raspberry Pi4 : 12 étapes
Vidéo: Bras robotique 💪 & vision par ordinateur avec Raspberry Pi 🍓 2024, Juin
Anonim
Pare-feu Raspberry Pi4
Pare-feu Raspberry Pi4

Avec le nouveau Raspbery Pi 4 (RPi4) qui vient de sortir, j'ai décidé de me faire un pare-feu à usage domestique. Après avoir trébuché sur Internet, j'ai trouvé un excellent article sur le sujet par Guillaume Kaddouch (https://networkfilter.blogspot.com/2012/08/building-your-piwall-gateway-firewall.html). L'article est incroyable, et vous devriez le lire avant d'aller de l'avant - cela facilitera le processus décrit ici. Le fait est que cet article a été écrit en 2012 et est basé sur la distribution ArchLinux. Rien contre ArchLinux, mais je voulais le faire en utilisant la version Raspbian la plus courante. Le RPi4 peut gérer les exigences de traitement. Alors merci Guillaume pour l'inspiration !! Cette instructable fera référence au message original de Guillaume ("GK" pour faire court), vous voudrez probablement que les deux pages soient ouvertes dans votre navigateur.

Quelques éléments clés sur mon pare-feu:

  • J'ai la prise Ethernet intégrée (eth0) qui va au LAN
  • Le routeur ISP est sur l'adaptateur TRENDnet (eth1)
  • J'ai désactivé activement l'adaptateur sans fil (wlan0)
  • Il n'est pas garanti que vous y parveniez à 100 %… j'espère au moins 99 %:) alors s'il vous plaît fournir des commentaires/commentaires
  • C'est mon premier instructable. Désolé pour tout ce qui ne suit pas les normes instructables appropriées.

Maintenant, amusons-nous…

Fournitures

  • Framboise Pi 4

    • J'ai utilisé la version 4 Go, n'hésitez pas à essayer une autre version
    • Cas (j'aime le FLIRC, mais c'est votre appel)
    • Adaptateur secteur
  • Carte MicroSD, 32 Go ou plus (j'ai utilisé une carte de 64 Go)
  • Dongle Gigabit Ethernet TRENDnet USB3.0 (Modèle: TU3-ETG)
  • Quelques câbles réseau RJ45
  • Clavier et souris USB
  • Un câble Micro-HDMI vers HDMI (qui est branché sur un moniteur HDMI)

Ce clavier, cette vidéo et cette souris peuvent être supprimés une fois que vous êtes en mesure de faire fonctionner SSH et VNC.

Étape 1: configuration initiale du RPi

Configuration initiale du RPi
Configuration initiale du RPi

La première chose à faire est de faire fonctionner votre RPi4 en tant que nouveau système. Téléchargez et installez la distribution complète de Raspbian (Raspbian Buster avec le bureau et les logiciels recommandés). Vous devrez redémarrer plusieurs fois pour qu'il puisse se développer et tirer parti de la carte MicroSD complète.

Au démarrage, vous devrez répondre à des questions sur la localité, le réseau, le clavier et la souris. Connectez-vous à un réseau et laissez-le se mettre à jour.

Vérifions également que tout a été correctement mis à jour et obtenons quelques utilitaires qui peuvent aider au débogage plus tard:

$ sudo apt-get update

$ sudo apt-get dist-upgrade $ sudo apt-get install htop $ sudo apt-get install tcpdump

Je n'ai PAS installé vim, ni l'étape 8 de GK (configurer vim). Je viens d'utiliser l'éditeur vi car il possède de toute façon la plupart de ces fonctionnalités. Cela a également permis d'économiser du temps et des efforts.

Une fois cela terminé, configurons le RPi4 afin que nous puissions brancher un moniteur à chaud. Mon objectif était de le faire fonctionner sans tête, mais si j'avais besoin de brancher un moniteur, il serait reconnu.

$ sudo vi /boot/config.txt

Dans ce fichier:

décommenter (supprimer le #-symbole avant): hdmi_force_hotplug=1

décommenter: hdmi_drive=2

en option, ajoutez: enable_hdmi_sound

Étape 2: mise en réseau

La mise en réseau
La mise en réseau
La mise en réseau
La mise en réseau

Si vous suivez le site de GK, c'est l'étape 3. Mais gardez à l'esprit que je n'ai pas suivi beaucoup de ses premiers pas dans l'ordre exact.

Lorsque j'ai commencé cela, j'ai connecté le RPi directement à mon routeur ISP ("à côté de mon réseau existant"). Cela m'a permis de jouer avec la configuration sans affecter le réseau. Connectez le RJ45 intégré RPi4 à votre routeur (ou sans fil, si vous le souhaitez). Avec Raspbian, le moyen le plus simple de le faire est d'utiliser l'interface graphique. Depuis le bureau, cliquez sur l'icône Raspberry > Préférences > Configuration Raspberry Pi. Assurez-vous d'activer SSH et VNC. Cela installera le client du serveur Real-VNC. J'ai trouvé que si vous essayez de vous connecter avec le client Tight VNC, cela provoquera des crises et nécessitera une configuration supplémentaire. Donc, à ce stade, installez le client Real-VNC sur votre ordinateur de bureau/ordinateur portable principal (pas votre RPi4).

SSH ne fonctionnera pas immédiatement (étape 7 de GK). Nous devons modifier certaines configurations. Tout d'abord, modifions le fichier de configuration ssh. Voici les modifications que j'ai apportées. Gardez à l'esprit que je n'ai pas étudié l'impact de chaque changement ici. J'ai fait ce que le site de GK a suggéré. Certains de ces changements peuvent NE PAS être requis.

$ sudo vi /etc/ssh/sshd_config

Dans ce fichier, décommentez les lignes suivantes:

HostKey /etc/ssh/ssh_host_rsa_keyHostKey /etc/ssh/ssh_host_ecdsa_keySyslogFacility AUTHLogLevel INFOStrictModes yesPubkeyAuthentication yesHostBasedAuthentication non

Ignorer les Rhosts oui

PrintMotd nonPrintLastLog ouiTCPKeepAlive oui

Et ajoutez les lignes suivantes:

Protocole 2UtilisationPrivilègeSéparation ouiKeyRegenerationInterval 3600ServerKeyBits 768RSAAAuthentification ouiRhostsRSAAuthentication non

Et modifiez les lignes suivantes:

Port 15507LoginGraceTime 60PermitRootLogin no

Parlons rapidement de cette première modification… le port 15507. SSH fonctionne normalement sur le port 22. GK l'a déplacé vers 15507 - je ne sais pas pourquoi. Vous pouvez le modifier ou non… Si vous choisissez de le modifier, vous devrez ajouter "-p 15507" à toute commande SSH avec laquelle vous essayez de vous connecter. Si vous décidez de l'ignorer, gardez un œil sur les autres endroits où 15507 est mentionné dans ces instructions et ignorez-les, en particulier les règles du pare-feu !

Enfin pour cette étape, obtenons l'adresse IP du RPi4 afin que nous sachions à quoi nous connecter:

$ ipconfig -a

Recherchez la connexion réseau active (probablement sur eth0 ou wlan0) et notez cette adresse IP. Vous avez maintenant ce dont vous avez besoin pour vous connecter à distance au RPi4. Redémarrons avant de continuer:

$ sudo redémarrer

Étape 3: un autre utilisateur

Un autre utilisateur
Un autre utilisateur

Il est préférable de ne pas utiliser le nom d'utilisateur RPi par défaut (pi), et vous devriez certainement changer le mot de passe. Pour plus de sécurité, ajoutons un autre compte utilisateur que vous pouvez utiliser pour vous connecter à distance et continuer (étape 6 de GK). De retour sur le RPi, ajoutons un nouvel utilisateur et définissons des autorisations pour l'utilisateur en SSH et exécutons la commande sudo:

$ sudo useradd -m -g users -G sudo, netdev -s /bin/bash [NOM D'UTILISATEUR]

$ sudo passwd [NOM D'UTILISATEUR]

N'hésitez pas à vous déconnecter ou à redémarrer et à utiliser ce compte nouvellement créé à l'avenir.

Étape 4: Fichier Syctl

Fichier Syctl
Fichier Syctl

L'étape suivante consiste à modifier le fichier /etc/sysctl.conf (étape 9 de GK). Ce fichier est utilisé pour modifier quelques paramètres du noyau. Nous allons faire exactement ce que GK dit de faire. Voici un ensemble simplifié d'étapes.

$ sudo vi /etc/sysctl.conf

Dans ce fichier, décommentez les lignes suivantes:

net.ipv4.conf.default.rp_filter=1net.ipv4.conf.all.rp_filter=1net.ipv4.tcp_syncookies=1

net.ipv4.ip_forward = 1

net.ipv4.conf.all.accept_redirects = 0net.ipv4.conf.all.send_redirects = 0net.ipv4.conf.all.accept_source_route = 0net.ipv4.conf.all.log_martians = 1

Et ajoutez les lignes suivantes:

net.ipv4.icmp_echo_ignore_broadcasts = 1net.ipv4.icmp_ignore_bogus_error_responses = 1net.ipv4.conf.eth0.accept_redirects = 0vm.min_free_kbytes = 8192

Redémarrez le service avec ces nouveaux paramètres et redémarrez:

$ sudo sysctl -p

$ sudo redémarrer

Étape 5: DHCP & DNS (partie 1)

DHCP et DNS (partie 1)
DHCP et DNS (partie 1)

Pour moi, ce processus comportait deux parties douloureuses… La configuration du DHCP et du DNS et la configuration des règles de pare-feu. Alors, on y va avec la première partie. Si vous suivez le site de GK, nous sommes à l'étape 10.

Pour ce faire, vous aurez besoin de quelques informations de votre routeur FAI (ou pare-feu actuel):

  • L'adresse IP interne du routeur
  • Une adresse IP que vous pouvez utiliser pour l'interface du RPi4 avec le routeur
  • Les IP d'un serveur de noms (ou deux)
  • Le nom de l'interface pour la connexion LAN (par exemple, eth0 ou eth1)
  • Le nom de l'interface pour la connexion ISP (par exemple, tout ce que vous n'avez pas utilisé pour le LAN)

Vous devrez peut-être également modifier les paramètres du routeur pour donner au RPi4 une adresse IP statique (puce 2, ci-dessus). Du moins, c'est ce que j'ai fait.

Tout d'abord, modifions le fichier dhcpcd.conf…

$ sudo vi /etc/dhcpcd.conf

Décommentez ces lignes:

persistentoption rapid_commitoption domain_name_servers, domain_name, domain_search, host_nameoption interface_mtu

Pour chaque interface réseau, vous devez définir les détails du réseau. Ils devraient ressembler à ceci:

# Statique pour l'interface avec le FAI

interface eth1 static ip_address=192.168.1.static routers=192.168.1.254 static domain_name_servers=8.8.8.8 8.8.4.4 metric 100 # Statique pour l'interface vers le LAN interface eth0 static ip_address=10.210.212.static routers=10.210.212.1 static domain_name_servers=8.8.8.8 8.8.4.4 #interface wlan0 #static ip_address=10.210.212.#static routers=10.210.212.1 #static domain_name_servers=8.8.8.8 #Décommentez cette section si vous voulez forcer une adresse IP sur un périphérique. Le nom après 'host' # n'a pas de sens pour le système. Saisissez l'adresse MAC de l'appareil ainsi que l'adresse #IP souhaitée. Assurez-vous qu'il est hors de la plage DHCP. Répétez si nécessaire. #host [TOUT] { # hardware ethernet xx:xx:xx:xx:xx:xx; # adresse fixe 10.210.212.250; #}

Assurez-vous d'utiliser des chiffres qui vous conviennent. Les IP ci-dessus sont pour mon réseau, à l'exception des serveurs de noms qui sont Google. Notez que j'ai également défini la métrique du FAI sur 100 pour que ce soit le premier essai par défaut pour le trafic réseau. Je n'ai également rien fait spécifiquement à mon adaptateur sans fil (wlan0). J'ai l'intention de désactiver complètement cette interface, donc cela avait du sens pour moi.

De plus, si vous souhaitez forcer une adresse IP sur un appareil (comme un NAS), utilisez cette section inférieure. Donnez à l'hôte un nom qui a du sens pour vous, mais sachez qu'il n'est jamais utilisé par quoi que ce soit. N'oubliez pas les points-virgules.

Étape 6: DHCP & DNS (partie 2)

DHCP et DNS (partie 2)
DHCP et DNS (partie 2)

L'étape suivante consiste à modifier le fichier dnsmasq.conf…

$ sudo vi /etc/dnsmasq.conf

Nous devons décommenter quelques lignes et éditer quelques lignes. Vous devrez également copier quelques paramètres du fichier dhcpcd.conf. Deux autres questions auxquelles vous devez répondre par vous-même sont:

Le réseau local interne (par exemple, eth0) a-t-il besoin de DHCP et DNS ? Quelle plage DHCP voulez-vous pour votre réseau local et quelle doit être la durée de chaque bail ?

Commencez par décommenter quelques lignes:

bogus-privno-dhcp-interface=wlan0bind-interfacesdhcp-name-match=set:wpad-ignore, wpaddhcp-ignore-names=tag:wpad-ignore

Configurez votre serveur de noms. Recherchez la ligne qui commence par 'server=' et faites-en quelque chose comme 'server=8.8.8.8'.

Définissez votre plage DHCP. Il y a beaucoup de façons de le faire. J'ai choisi de fournir les deux adresses IP de point de terminaison, le masque et la durée du bail. Ma plage était de 10.210.212.20 à 10.210.212.240, avec un masque de réseau de 255.255.255.0 et une durée de location de 12 heures. Je vous recommande de laisser quelques adresses IP en haut et en bas de votre plage au cas où vous auriez besoin de donner à quelque chose une adresse IP statique.

Définissez l'interface qui obtiendra DNS et DHCP (le LAN) en modifiant la ligne 'interface=' pour qu'elle soit quelque chose comme 'interface=eth0). Notez que je lui ai spécifiquement dit de NE PAS attribuer une adresse IP DHCP à mon réseau sans fil. Encore une fois, j'ai l'intention de désactiver complètement cette interface, donc cela avait du sens pour moi.

Étape 7: DHCP & DNS (partie 3)

DHCP et DNS (partie 3)
DHCP et DNS (partie 3)

Un détournement des consignes de GK pour cette dernière étape…

Lorsque je suis allé redémarrer mon RPi à ce stade, le processus dnsmasq n'était pas actif. En fouillant un peu, j'ai découvert que mes interfaces réseau eth0 et eth1 n'étaient pas toutes les deux actives avant le démarrage de dnsmasq, donc dnsmasq échouait au démarrage. Je devrais connecter un clavier et une souris au RPi et redémarrer manuellement dnsmasq. Ce n'est pas idéal avec une configuration sans tête. J'ai lu un tas de messages qui disaient d'apporter diverses modifications aux paramètres (par exemple, désactiver l'interface de liaison) et d'autres choses. Rien de tout cela n'a fonctionné. En fin de compte, j'ai décidé d'écrire simplement un script shell qui s'exécuterait toutes les 2 minutes et vérifierait l'état de dnsmasq. S'il ne fonctionnait pas, démarrez-le. Je suppose que cette situation n'est pas unique à moi. Alors, voici ce que vous devez faire:

Transformez le code suivant dans un fichier appelé 'dns_masq_keepalive.sh' sur votre RPi.

#!/bin/bash

# Fichier: dns_masq_keepalive.sh # Août 2019 # Utilisez-le avec crontab -e (*/2 * * * * /etc/dns_masq_keepalive.sh) pour vous assurer que dnsmasq s'exécute. Le service s'arrêtera si # toutes les interfaces mentionnées dans dhcpcd.conf ne sont pas actives avant de commencer. Cela résout le problème. # Cette ligne suivante renverra tous les travaux actifs contenant le mot 'dnsmasq'. Donc, n'incluez pas 'dnsmasq' dans le nom de ce fichier #, sinon il le renverra à chaque fois et vous n'aurez jamais de redémarrage. dns_running=$(ps -e | grep dnsmasq) echo $dns_running if [-z "$dns_running"] then #echo No DNSMasq sudo /etc/init.d/dnsmasq restart #else #echo DNSMasq Running fi

Coupez-le et collez-le si vous en avez besoin. Quoi que vous fassiez, n'incluez pas 'dnsmasq' dans le nom. Le script recherche le mot 'dnsmasq' et si le script l'a dans le nom, il supposera que le service est en cours d'exécution. Renommez également le fichier pour qu'il se termine par ".sh". Intructables ne me laisserait pas télécharger un fichier '.sh' - ce qui est bien. Les instructions restantes supposent que le fichier existe à: /etc/dns_masq_keepalive.sh.

Deuxièmement, définissez des autorisations sur le fichier afin qu'il puisse être exécuté:

$ sudo chmod u+x /etc/dns_masq_keepalive.sh

Maintenant, nous allons utiliser le système crontab pour exécuter le programme toutes les 2 minutes de chaque jour. Démarrer crontab:

$ sudo crontab -e

Il devrait vous inviter à éditer en utilisant vi ou autre chose. Tout fonctionnera. Une fois que vous pouvez le modifier, ajoutez ce qui suit à la fin du fichier:

*/2 * * * * sudo /etc/dns_masq_keepalive.sh

Pas d'espaces dans le '*/2', mais des espaces entre les astérisques. Sauvegarder et quitter. Il devrait vous dire que le travail est planifié, ou quelque chose comme ça.

Étape 8: Le pare-feu

Le pare-feu
Le pare-feu

Le prochain processus douloureux est le pare-feu (étape 11 de GK). Raspbian utilise le système bien connu iptables. Le blog de GK fournit trois fichiers pour vous aider à y parvenir: firewall.simple, firewall.advanced et firewall.flows. Tout le respect pour GK, mais simplifiez-vous la tâche et utilisez simplement firewall.simple. J'ai passé beaucoup de temps à essayer de comprendre le système et les règles d'iptables. Je suis content de l'avoir fait, mais c'était douloureux. Alors, je vous donne les deux fichiers joints pour vous aider… firewall.simple et firewall.clear. Copiez ces deux fichiers dans votre dossier /etc et modifiez les autorisations pour les rendre exécutables:

$ sudo chmod u+x /etc/firewall.simple

$ sudo chmod u+x /etc/firewall.clear

Avant de configurer des règles de pare-feu, branchez un ordinateur de bureau/ordinateur portable sur votre port RPi eth0 et confirmez qu'il obtient une adresse IP et que DNS est en cours d'exécution. Le moyen le plus simple de le faire est d'essayer de pinger un site générique, puis une adresse IP connue. Pingez également votre routeur RPi et ISP. Si vous obtenez des résultats, alors tout va bien et tout problème de réseau que vous rencontrez maintenant sera probablement le résultat de problèmes de pare-feu.

Le premier fichier fourni a commencé à l'origine en tant que fichier firewall.simple de GK (merci, encore une fois, GK !). J'ai fait un tas de changements pour le faire fonctionner pour ce système. Il doit autoriser au moins HTTP, HTTPS, DNS, DHCP, ping, SSH interne, VNC interne et plex. Plex n'a peut-être pas tous les ports ouverts pour tous les périphériques possibles, mais il existe de nombreux messages pour résoudre ce problème. En haut du fichier se trouvent les valeurs que vous devrez modifier en fonction de votre configuration réseau.

Le deuxième fichier, firewall.clear, est destiné à être utilisé lorsque vous testez vos règles de pare-feu. Lorsque vous exécutez 'sudo /etc/firewall.clear', toutes les règles de pare-feu seront effacées et le système devrait être entièrement connecté à Internet. Donc, si vous ne parvenez pas à faire fonctionner un service réseau (comme DNS) avec les règles firewall.simple en place, mais qu'il commence à fonctionner après avoir exécuté firewall.clear, vous savez que vous avez un problème de règle. Cela ne sera vraiment critique que lors du test de vos règles.

Donc, nous avons les règles du pare-feu là-bas, nous devons les faire démarrer lorsque le RPi démarre. Pour ce faire, nous allons éditer le fichier /etc/rc.local:

$ sudo vi /etc/rc.local

Une fois à l'intérieur, ajoutez ce qui suit à la fin du fichier:

echo "Chargement des règles iptables"/etc/firewall.simple >> /dev/null

Si vous choisissez d'ajouter le système de détection d'intrusion snort, vous devrez à nouveau modifier ce fichier. Pour l'instant, enregistrez-le et redémarrez.

$ sudo redémarrer

Étape 9: Syslog

Syslog
Syslog

Encore deux pas…

C'est facile. Si vous êtes toujours là et que vous suivez le blog de GK, c'est l'étape 12. Vous devez faire exactement ce qu'il dit en ce qui concerne le fichier syslog. Voici les étapes abrégées:

Conservez 2 mois de données syslog…

$ sudo vi /etc/logrotate.conf

Nous devons lui dire d'utiliser "une semaine" comme mesure, puis d'en garder 12. Vous avez besoin des deux lignes suivantes dans ce fichier. Je pense que vous devrez changer les lignes existantes.

rotation hebdomadaire 12

Sauvegarde le.

Étape 10: Détection d'intrusion avec Snort

Détection d'intrusion avec Snort
Détection d'intrusion avec Snort

La dernière chose que GK configure est le système snort. Je le recommande aussi. Vous pouvez suivre ses règles, et je ne vais pas toutes les copier ici, avec quelques modifications mineures. Ses instructions sont pour la distribution ArchLinux. Voici les quelques changements pour la distribution Raspbian que nous utilisons ici. Le reste des instructions fonctionne bien.

Tout d'abord, n'utilisez pas sudo pacman -S snort pour télécharger et installer snort. Procédez comme suit:

$ sudo apt-get install snort

Deuxièmement, vous ne pouvez pas vérifier snort avec sudo snort -version. Vérifiez l'installation avec:

$ sudo snort -V

Enfin, pour le faire fonctionner au démarrage, ne modifiez pas le fichier rc.conf, éditez le fichier rc.local (encore)…

$ sudo vi /etc/rc.local

Ajoutez les lignes suivantes à la fin du fichier:

echo "Chargement snort"

#/usr/sbin/snort -D -u snort -g snort -c /etc/snort/snort.conf -i eth0 -l /var/log/snort

Maintenant, redémarrez et tout devrait fonctionner comme par magie.

$ sudo redémarrer

Étape 11: Profitez

Prendre plaisir
Prendre plaisir

Ça devrait être ça !

Tout d'abord, je ne remercierai jamais assez Guillaume Kaddouch ! Il a inspiré ça.

Deuxièmement, si vous n'avez pas encore déconnecté votre clavier, votre vidéo et votre souris, vous le pouvez. Utilisez SSH et VNC pour revenir, si nécessaire.

Pour finir, ce n'est peut-être pas parfait à 100%. S'il vous plaît poster avec des changements/suggestions/recommandations. Mon objectif serait que ce soit le début de la discussion et que beaucoup de gens s'amusent !

Merci!!

PS… L'image est un RPi4 à l'intérieur d'un boîtier en aluminium FLIRC avec un ancien ventilateur Intel légèrement modifié et attaché par une fermeture éclair sur le dessus. Il y a aussi de la pâte thermique sous le ventilateur, juste au cas où vous vous poseriez la question. J'ai trouvé quelque chose de similaire sur Internet (https://www.reddit.com/r/raspberry_pi/comments/9bdgrr/it_turns_out_putting_a_heatsink_on_the_flirc_case/) et j'ai décidé de l'essayer moi-même.

Étape 12: Journal des modifications

Au fur et à mesure que des modifications sont apportées à cette instructable, je vais les documenter ici. En cas de problème, vérifiez ici si vous avez récupéré d'anciennes instructions ou fichiers.

25 septembre 2019:

  • Règles DHCP fixes dans firewall.simple
  • Plage DHCP fixe dans les instructions (les fichiers étaient corrects)
  • Ajout d'attributions d'adresses IP fixes aux instructions DHCP

13 octobre 2019

  • Correction de plusieurs fautes de frappe
  • J'ai créé un deuxième pi pour que j'aie une carte SD de test à échanger, si nécessaire

Conseillé: