Voilà mon script. Je l'ai divisé en 3 scripts pour plus de lisibilité.
Il s'agit de connecter un ordinateur équipé d'un carte réseau ethernet (interface
eth0) à son réseau local. Le support de l'IPv6 n'est pas abordé ici. Notre ordinateur n'héberge aucun serveur, c'est juste un client.
############# PREMIER SCRIPT #############
#!/bin/bash
# supprimer l'adresse IP de la carte réseau
ip addr flush dev eth0
# éteindre la carte réseau
ip link set dev eth0 down
# Écrivons deux entrées permanentes dans la table ARP
# Première entrée permanente : l'adresse MAC du routeur
ip neigh add 192.168.0.1 dev eth0 lladdr 00:XX:D1:A9:XX:XX nud permanent
# Seconde entrée permanente : l'adresse MAC d'un autre ordinateur
ip neigh add 192.168.0.2 dev eth0 lladdr 00:A3:CC:XX:XX:97 nud permanent
# attribuer à la carte réseau une adresse IP et un masque de sous-réseau
ip addr add 192.168.0.3/255.255.255.0 dev eth0
# activer la carte
ip link set dev eth0 up
# créer une route par défaut (vers notre routeur)
ip route add default via 192.168.0.1 dev eth0
exit 0;
############# FIN DU PREMIER SCRIPT #############
Voici maintenant la configuration du pare-feu Netfilter :
############# SECOND SCRIPT #############
#!/bin/bash
# Paramétrage du pare-feu Netfilter
# Purge des règles existantes
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -t raw -F
iptables -t raw -X
iptables -t filter -F
iptables -t filter -X
# Définition des politiques par défaut
# pour les tables nat, mangle et raw.
iptables -t nat -P PREROUTING ACCEPT;
iptables -t nat -P OUTPUT ACCEPT;
iptables -t nat -P POSTROUTING ACCEPT;
iptables -t mangle -P PREROUTING ACCEPT;
iptables -t mangle -P INPUT ACCEPT;
iptables -t mangle -P FORWARD ACCEPT;
iptables -t mangle -P OUTPUT ACCEPT;
iptables -t mangle -P POSTROUTING ACCEPT;
iptables -t raw -P PREROUTING ACCEPT;
iptables -t raw -P OUTPUT ACCEPT;
# La table filter sera paramétrée dans le prochain script.
exit 0;
############# FIN DU SECOND SCRIPT #############
Interlude musical :
############# TROISIÈME SCRIPT #############
#!/bin/bash
# Paramétrage du pare-feu Netfilter : paramétrage de la table filter
### Configuration de la chaine INPUT (les paquets réseaux entrant)
# Ignorer les paquets INVALID
iptables -t filter -A INPUT -m conntrack --ctstate INVALID -j DROP;
# Accepter les paquets sur l'interface lo
iptables -t filter -A INPUT -i lo -j ACCEPT;
# Accepter les paquets des connexion précédemment établies
iptables -t filter -A INPUT -i eth0 -d 192.168.0.3 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT;
# Ignorer tous les autres paquets
iptables -t filter -P INPUT DROP
# De cette façon, les nouvelles connexions entrantes sont ignorées.
### Configuration de la chaine OUTPUT (les paquets réseaux sortant)
# Ignorer les paquets INVALID
iptables -t filter -A OUTPUT -m conntrack --ctstate INVALID -j DROP;
# Tout accepter
iptables -t filter -P OUTPUT ACCEPT;
### Configuration de la chaine FORWARD (les paquets réseaux transitant par notre ordinateur)
# Notre ordinateur n'est pas un routeur, donc on refuse tout.
iptables -t filter -P FORWARD DROP;
exit 0;
############# FIN DU TROISIÈME SCRIPT #############
Évidemment, remplacez le nom de l'interface, les adresses IP et les adresses MAC par ceux de votre réseau. J'espère que cela sera utile à quelqu'un, au moins comme source d'inspiration.
