đź•’ : 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Ă© .