TP réseau firewall Linux TD Linux réseau parefeu Configuration firewall sous linux
L’objectif de ce TP est de comprendre comment mettre en place un routeur pare-feu (firewall) entre un réseau privé et un réseau public (Internet) à l’aide des règles de filtrage disponibles dans le noyau Linux avec iptables.
Préambule
Le TP est divisé en 4 groupes qui utiliseront les réseaux privés suivants :
• Groupe 1 : 192.168.10.0
• Groupe 2 : 192.168.20.0
• Groupe 3 : 192.168.30.0
• Groupe 4 : 192.168.40.0
Chaque groupe utilisera 3 machines, découpées selon le schéma suivant :
Au sein de chaque groupe,
• les machines notées H2 et H3 seront les hôtes du réseau privé et auront respectivement comme adresse IP 192.168.xx.2 et 192.168.xx.3
• la machine notée F fera office de routeur-firewall. Elle aura donc deux adresses, l’une étant son adresse IP publique et l’autre étant l’adresse IP 192.168.xx.1 dans le réseau privé.
NB : Les exemples ainsi que les commandes donnés dans la suite de ce document ne concernent que le groupe 4. Les autres groupes doivent utiliser les adresses de machines sur leur propre réseau.
Recherche des services ouverts : étape 1
1) Recherche des services ouverts sur sa machine
Avant de commencer à installer des filtres, il est intéressant d’observer son système et de voir quels services sont accessibles (ouverts). Il existe beaucoup d’outils pour cela, mais on peut déjà commencer par utiliser la commande netstat disponible « de base » sur tout système Linux.
Dans une fenêtre, lancez la commande : netstat –ltp
Dans une autre fenêtre, consultez le manuel (man netstat), pour déterminer le rôle de chacune des options « l » « t » et « p ».
- Quelles informations pouvez-vous tirer du résultat de cette commande.
- Comment connaître la liste des services UDP ouverts sur la machine ?
2) Recherche des services ouverts sur une machine distante
On peut utiliser pour cela l'outil nmap. En effet nmap permet de vérifier si des ordinateurs sont reliés au réseau (ping amélioré), de scanner les ports de ces ordinateurs et enfin de déterminer leur système d'exploitation. Pour plus d'informations concernant nmap, consultez le manuel (man nmap).
Dans une fenêtre, lancez la commande : nmap –sS 195.221.42.159
- Quelles informations pouvez-vous tirer du résultat de cette commande ?
- En vous aidant du manuel, expliquez à quelle technique de scan fait appel l'option –sS
Lancez à présent les deux commandes l'une à la suite de l'autre : nmap –O 195.221.42.159 et nmap –O 195.221.42.158
- Quelles informations supplémentaires pouvez-vous tirer du résultat de ces commandes ?
Configuration du réseau : étape 2
La deuxième étape du TP consiste à configurer sur chacune des 3 machines de votre réseau les adresses IP et les tables de routage selon le schéma décrit ci-dessus :
- 2 machines sont de simples stations de travail (192.168.40.3 et 192.168.40.2) appartenant au réseau
privé.
- 1 machine doit être configurée comme routeur-firewall avec 2 adresses IP. La première adresse sur eth0 sera l’adresse habituelle de la machine, vous n’aurez donc pas à la modifier (par exemple avec bshm-120-2 comme routeur-firewall, ce sera 195.221.42.97). La deuxième adresse sur eth0:0 sera une adresse sur le réseau privée (192.168.40.1)
- Sur les clients :
1) Configurez l’interface réseau et la table de routage
2) Vérifiez que depuis chaque machine de votre réseau privé, vous pouvez atteindre l'autre machine avec la commande ping
3) Essayez d'atteindre avec un ping la machine « extérieure » 195.221.42.158
- Sur le routeur-firewall :
1) Configurez la deuxième interface réseau (eth0:0) et la table de routage correspondante
2) Activez le routage avec la commande :
echo 1 > /proc/sys/net/ipv4/ip_forward
supprimer également la redirection de route (ICMP redirect)
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
3) Autorisez le routage des paquets venant du réseau privé
iptables -A FORWARD -s 192.168.40.0/24 -j ACCEPT
4) Activez le camouflage IP :
iptables -A POSTROUTING -t nat -j MASQUERADE
5) Vérifiez la configuration du pare-feu :
Le routage des paquets venant du réseau privé doit être autorisé :
iptables -L
Le camouflage doit être activé :
iptables –t nat -L
- Pour vous assurer que la configuration est correcte, depuis les deux machines de votre réseau
privé :
1) Utilisez la commande ping pour atteindre 195.221.42.158.
2) Chargez l’URL http://www.whatismyip.net dans le navigateur Mozilla. Observez l’adresse IP
affichée dans la page et vérifiez qu’elle correspond bien à celle de votre passerelle.
Mise en place de règles de filtrage simples : étape 3
Pour apprendre à manipuler les règles de filtrage, nous allons commencer par bloquer le ping sur l’adresse de bouclage (127.0.0.1) de chaque machine.
1) Vérifiez que votre interface de bouclage fonctionne correctement (0% des paquets perdus) :
ping –c 1 127.0.0.1
2) Créez une nouvelle chaîne utilisateur nommée LOG_DROP pour à la fois rejeter les paquets et enregistrer dans le journal (fichier /var/log/messages) les paquets rejetés.
iptables –N LOG_DROP
iptables –A LOG_DROP –j LOG
iptables –A LOG_DROP –j DROP
3) Appliquez un filtre sur la chaîne d’entrée INPUT :
iptables –A INPUT –p icmp –s 127.0.0.1 –j LOG_DROP
4) Vérifiez que votre modification a bien été prise en compte en affichant la chaîne INPUT :
iptables –L INPUT
5) Ouvrez un autre shell dans un terminal, puis tapez la commande :
tail –f /var/log/messages
Dans le terminal initial, essayez de faire à nouveau le ping ; la connexion ne doit pas pouvoir aboutir (100% des paquets perdus). Observez les messages qui s’affichent au fur et à mesure dans le terminal dans lequel vous avez lancé la commande tail.
6) Supprimez la règle (de numéro 1) sur la chaîne INPUT :
iptables –D INPUT 1 ou
iptables –D INPUT –p icmp –s 127.0.0.1 –j LOG_DROP
7) Trouvez une règle sur le routeur-firewall pour interdire le ping depuis n'importe quelle machine de votre réseau privé. Une fois que vous avez testé le bon fonctionnement de la règle depuis les deux machines, supprimez-la sur le routeur-firewall.
Mise en place de règles de filtrage plus élaborées : étape 4
- A présent, votre but est d'autoriser toutes les connexions sortantes sauf les connexions HTTP
(sur le port 80) depuis votre réseau privé vers le réseau public (Internet).
1) Essayez de vous connecter avec un navigateur (Mozilla) depuis les postes clients sur
http://prevert.upmf-grenoble.fr/LicenceMIASS.
2) Pour vérifier l'état des différentes chaînes sur le routeur-firewall, tapez la commande :
iptables -L
Le camouflage doit être activé et la chaîne utilisateur LOG_DROP doit être présente (cf étapes
précédentes).
3) Interdisez maintenant en TCP :
- l'accès aux paquets venant du port 80 (réponses HTTP)
- l'accès aux paquets allant vers le port 80 (requêtes HTTP)
iptables -A FORWARD -p tcp --sport 80 -m state --state ESTABLISHED
-j LOG_DROP
iptables -A FORWARD -p tcp --dport 80 -m state --state NEW,ESTABLISHED
-j LOG_DROP
Le résultat iptables –L doit être le suivant :
4) A partir de maintenant, il est impossible d'accéder depuis les stations du réseau privé (firewall
exclu) aux pages web (par HTTP) dont le serveur fonctionne sur le port 80.
5) Observez les traces des paquets rejetés sur le firewall. Que constatez-vous ? Quels
paquets sont bloqués (requêtes ou réponses) ? Modifiez ce comportement.
_ Il s’agit à présent de résoudre le problème inverse, c'est-à-dire interdire toutes les connexions
sortantes sauf celles du protocole HTTP (sur le port 80).
NB : Il faut ne pas oublier d'autoriser les connexions vers le service de DNS, sinon la résolution de
nom sera impossible.
1) Tout d'abord, supprimez les règles que vous avez définies dans la chaîne FORWARD
iptables -F FORWARD
2) Modifiez ensuite la politique (en « tout ce qui n’est pas explicitement autorisé est interdit »)
pour la chaîne FORWARD (DROP)
iptables -P FORWARD DROP
3) Il faut ajouter les règles pour accéder au DNS (en UDP et en TCP au cas où les réponses du serveur DNS dépassent 512 octets) :
iptables -A FORWARD -p udp –s 0/0 –d 192.168.40.0/24 –-sport 53
-j ACCEPT
iptables -A FORWARD -p udp –s 192.168.40.0/24 –d 0/0 –-dport 53
-j ACCEPT
iptables -A FORWARD -p tcp –s 0/0 –d 192.168.40.0/24 –-sport 53
-j ACCEPT
iptables -A FORWARD -p tcp –s 192.168.40.0/24 –d 0/0 –-dport 53
-j ACCEPT
et autoriser les connexions HTTP :
iptables -A FORWARD -p tcp –s 0/0 –d 192.168.40.0/24 --sport 80
-m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -p tcp –s 192.168.40.0/24 –d 0/0 --dport 80
-m state --state NEW,ESTABLISHED -j ACCEPT
4) Assurez-vous qu’il est à présent seulement possible, à partir du réseau privé :
• d'effectuer des requêtes DNS en UDP et en TCP (en utilisant la commande nslookup par
exemple : nslookup brassens.upmf-grenoble.fr).
• d'effectuer des requêtes HTTP (en utilisant un browser web).
- Ajoutez sur le routeur-firewall les règles nécessaires pour :
1) permettre, depuis les clients, la connexion par ssh sur la machine « extérieure » prevert.upmf-
grenoble.fr (pour tester, utilisez la commande : ssh votre_login@prevert.upmf-grenoble.fr)
2) bloquer le ping des clients internes tout en leur autorisant l’utilisation de la commande
traceroute ; consultez le manuel d’iptables (man iptables) pour trouver les options à utiliser.
NB : Une fois le TP terminé et avant de vous déconnecter, depuis un terminal exécutez les deux
commandes :
service iptables stop
service network restart
Fermez ensuite votre session sans redémarrer ni éteindre la machine.
------------------------------------------------------------------------
------------------------------------------------------------------------
Article plus récent Article plus ancien