Dans cet exercice, nous allons voir comment filtrer des paquets sur un serveur Ubuntu Linux utilisant le pare-feu iptables.
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
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.