🕒 : 3 h maximum
- Utilisation d’iptables le firewall de Linux qui permet de gérer et protéger une machine
ufw s’appuie sur iptables pour faire le firewall sous linux
Sur Linux, la véritable capacité de pare-feu vient du sous-système netfilter intégré au noyau. iptables est l’outil en ligne de commande qui dialogue directement avec netfilter, tandis que UFW (Uncomplicated Firewall) a été conçu pour faciliter la configuration d’iptables avec des commandes plus simples.
Dans ce tp on va s’intéresser à iptables .
Il faut récupèrer la salle du tp précèdent.
Avec m1 à m3 réseau R0 et m4 à m6 réseau R1
Nous disposons de m7 qui à iptables d’installé , le firewall linux !
Le protocole de ping « icmp » sous contrôle
m7 ou il y a iptables va bloquer les requêtes icmp et les rétablir .
on testera le ping de m7 depuis m1, m2 à m6
Pour interdire icmp (ping)
iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT
on peut vérifier les régles iptables avec l’option -L
root@m7:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT icmp -- anywhere anywhere icmp echo-request reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
root@m7:~# iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT
root@m7:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT icmp -- anywhere anywhere icmp echo-request reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Pour enlever la règle (Delete) , autoriser le ping
iptables -D INPUT -p icmp --icmp-type echo-request -j REJECT
root@m7:~# iptables -D INPUT -p icmp --icmp-type echo-request -j REJECT
root@m7:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
root@m7:~#
Pourquoi interdire le protocole icmp sur une machine (en cybersécurité)
iptables possède des règles, OUTPUT (SORTIE), INPUT (ENTREE) et FORWARD (a travers)
root@m7:~# iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT
root@m7:~# iptables -L OUTPUT
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
root@m7:~# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT icmp -- anywhere anywhere icmp echo-request reject-with icmp-port-unreachable
root@m7:~# iptables -L FORWARD
Chain FORWARD (policy ACCEPT)
target prot opt source destination
root@m7:~#
on voit ici qu’une règle en entrée concernant icmp est rejetée !
ssh vers m7
Nous allons nous connecter sur m7 depuis m1 à m6, on va se concentrer sur m1
machine m7
sur la machine m7 vérifier que le service sshd est bien activé ! (serveur ssh)
root@m7:~# systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2026-03-30 11:09:33 CEST; 1h 23min ago
Docs: man:sshd(8)
man:sshd_config(5)
Process: 506 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Main PID: 509 (sshd)
Tasks: 1 (limit: 1115)
Memory: 6.6M
CPU: 779ms
CGroup: /system.slice/ssh.service
└─509 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
on voit ici que c’est ok !

machine m1 ou mx !
les machines m1 à m6 sont de simple cliente et doit disposer de ssh client , le cas de m6 ci-dessous

# on utilise la fonction whereis
whereis ssh # et on vois que le client ssh est bien disponible
bloquons m6
root@m7:~# iptables -A INPUT -s 192.168.1.6 -p tcp --dport 22 -j DROP
root@m7:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT icmp -- anywhere anywhere icmp echo-request reject-with icmp-port-unreachable
DROP tcp -- 192.168.1.6 anywhere tcp dpt:ssh
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
root@m7:~#
pour supprimer cette règle:
iptables -D INPUT -s 192.168.1.6 -p tcp --dport 22 -j DROP
une autre possibilité d’enlever les règles par ligne
iptables -L INPUT --line-numbers -n # en déduire le numéro de ligne
iptables -D INPUT <numéro> # supprimer la règle
Faire un test et proposer des exemples
Bloquer une ip
iptables -A INPUT -s 192.168.1.6 -j DROP
Autoriser internet sur tous les postes (nat)
Pour permettre le partage internet il faut activer le bit de net.ipv4.ip_forward=1
sysctl -w net.ipv4.ip_forward=1
pour le rendre définitif à chaque reboot
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
ou dé-commenter la ligne du fichier /etc/sysctl.conf

iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
tester et valider votre partage
Autoriser le partage internet que sur R0
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o enp0s3 -j MASQUERADE
Autoriser le partage internet que sur R1
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o enp0s3 -j MASQUERADE
Vérifier les règles , et supprimer la règle autorisant R0 à accéder à internet.
root@m7:~# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o enp0s3 -j MASQUERADE # R0 pas R1
root@m7:~# iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1 84 MASQUERADE all -- * enp0s3 192.168.0.0/24 0.0.0.0/0
root@m7:~# iptables -t nat -D POSTROUTING 1
root@m7:~# iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
root@m7:~#
Bloquer sur le réseau local une adresse MAC
iptables -A INPUT -m mac --mac-source XX:XX:XX:XX:XX:XX -j DROP
Tester de bloquer la mac adresse de la machine m2
Sauvegarder les règles iptables
Sous Debian il est plus simple d’utiliser iptables-persistent :
# Debian / Ubuntu
apt update
apt install iptables-persistent
quand on veut mettre à jour les règles qui sont activées sur la machine il existe la commande : netfilter-persistent save
netfilter-persistent save
Quelques scripts pour aller plus vite et faire des tests
mettre net.ipv4.ip_forward=1
sysctl -w net.ipv4.ip_forward=1
partage internet pour tout le réseau local
iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
partage internet pour R0 seulement
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o enp0s3 -j MASQUERADE
partage internet pour R1 seulement
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o enp0s3 -j MASQUERADE
liste des POSTROUTING nat
iptables -t nat -L POSTROUTING -n --line-numbers
effacer la ligne 1 postrouting
iptables -t nat -D POSTROUTING 1
La machine m7 à la fin est opérationnelle :

Le bit net.ipV4_ip_forward est toujours à 1 (passerelle)
Et le partage nat d’internet est bien réalisé .
