Pare-feu: exercices utilisant iptables

Introduction

Dans cet exercice, nous allons voir comment filtrer des paquets sur un serveur Ubuntu Linux utilisant le pare-feu iptables.

Notes

Objectifs

Installation

Vous pouvez vérifier si iptables est installé sur le système à partir de la commande suivante:

$ sudo iptables -v

Si ce n'est pas le cas:

$ sudo apt install iptables

Politique de filtrage

  1. Le serveur doit pouvoir accéder à toutes ses propres applications (locales).
  2. Le serveur doit autoriser les connexions SMTP depuis n'importe où.
  3. Le serveur doit autoriser les accès SSH seulement depuis le réseau de l'atelier.
  4. Le serveur doit autoriser l'accès au serveur web depuis le réseau local.
  5. Le serveur doit autoriser les accès SNMP depuis le réseau local seulement.
  6. Tous les trafics TCP/UDP entrants doivent être bloqués, excepté les connexions déjà établies.
  7. Le protocole ICMP doit être limité à 03 paquets par seconde.

Pour ce faire, nous allons créer un fichier texte qui va nous aider à implémenter facilement ces règles. Il faudra s'assurer de remplacer "X" par le numero de votre groupe quand cela est nécessaire.

$ vi /home/sysadm/iptables.sh

# Vider les regles existantes
iptables -F

# Autoriser les paquets entrants sur l'interface loopback
iptables -A INPUT -i lo -j ACCEPT 

# SMTP doit etre ouvert afin de pouvoir accepter des mails depuis le monde
iptables -A INPUT -p tcp --dport 25 -j ACCEPT

# SSH limite au reseau de l'atelier
iptables -A INPUT -s 100.64.0.0/22 -p tcp --dport 22 -j ACCEPT

# HTTP et HTTPS limites au reseau local seulement
iptables -A INPUT -s 10.10.X.0/24 -p tcp --dport 80 -j ACCEPT 
iptables -A INPUT -s 10.10.X.0/24 -p tcp --dport 443 -j ACCEPT 

# SNMP limite au reseau local seulement
iptables -A INPUT -s 10.10.X.0/24 -p udp --dport 161 -j ACCEPT 

# Limite le trafic ICMP a 3 paquets par seconde
iptables -A INPUT -p icmp -m recent --set
iptables -A INPUT -p icmp -m recent --update --seconds 1 --hitcount 3 -j DROP

# Ensuite, autoriser tout trafic initie depuis cette machine de revenir
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 

# Finalement, bloquer tout autre trafic TCP entrant
iptables -A INPUT -s 0/0 -p tcp --tcp-flags SYN,RST,ACK SYN -j REJECT

# et tout trafic UDP
iptables -A INPUT -s 0/0 -p udp -j REJECT 

Maintenant, nous allons appliquer ces règles:

$ sudo sh /home/sysadm/iptables.sh

Puis vérifier que les règles sont présentes:

$ sudo iptables -L

Vous devez aperçevoir les règles dont vous avez créé. Si vous souhaitez avoir un affichage numérique, taper la commande suivante:

$ sudo iptables -L -n

Maintenant, nous allons tester afin de nous assurer que les règles fonctionnent.

Vérifier que vous pouvez vous connecter aux services localement (cela suppose que Apache est déjà installé):

$ telnet localhost 80

Vous devez obtenir quelque chose comme suit:

$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Pour sortir, taper 'Ctrl-]', ensuite 'quit'.

Connectez-vous sur un PC faisant parti de votre groupe pour vérifier la connectivité au serveur web:

sysadm@pc5:~$ telnet dmz5 80

Il doit pouvoir se connecter.

Demander à une personne appartenant à un groupe DIFFERENT de tester:

sysadm@pc2:~$ telnet dmz5 80

Si elle arrive à se connecter, cela veut dire que vous avez fait des erreurs. Revenez sur votre fichier texte pour corriger la règle, et relance la commande sh.

Ensuite, tester la limitation ICMP. Demander à un de vos collègues d'exécuter la commande suivante:

sysadm@pc2:~$ sudo ping -f pc1

Quelle est cette option "-f"? Elle signifie "flood", ce qui veut dire que pc2 va essayer d'envoyer le plus de requêtes echo ICMP possible. Demander votre collègue de lancer la commande pendant 5 secondes, puis d'arrêter avec "Ctrl-C". Ensuite, demander de consulter les statistiques. Il devrait y avoir un taux élevé de "packet loss" (paquets perdus), et le nombre de paquets reçus ne doit pas être supérieur à 3 par seconde (15 paquets au total, si la commande s'est lancée pendant 5 secondes).

Si les tests se passent bien, alors il est temps de demander à Ubuntu de sauvegarder nos règles afin que Linux puisse les appliquer si le système vient à redémarrer.

$ sudo iptables-save > /etc/iptables.rules

Ensuite, demander à Ubuntu de restorer ces règles au démarrage:

$ sudo vi /etc/network/if-pre-up.d/iptablesload 

#!/bin/sh
iptables-restore < /etc/iptables.rules
exit 0

Rendre exécutable:

$ sudo chmod +x /etc/network/if-pre-up.d/iptablesload

Ne pas oublier d'utiliser "iptables-save" chaque fois que vous modifiez vos règles. Sinon, vous allez perdre les modifications que vous avez effectué lorsque le serveur redémarre.