routeur_nat.sh
Note de lecture générée automatiquement
Le vrai fichier est
scripts/securite/routeur_nat.sh(Obsidian n’affiche pas les scripts eux-mêmes). Ne modifie pas cette note : modifie le script, puis relancepython3 generer_vues_obsidian.pydans le dossierscripts.
- À quoi il sert : VM Debian → routeur NAT + pare-feu
- Lancer (dans le dossier
scripts/securite/) :sudo ./routeur_nat.sh eth0 eth1 172.30.16.0/24 - Fiche : S03 - Pare-feu Linux (iptables et nftables)
- Retour : 00 - Tous les scripts
Code
#!/usr/bin/env bash
# =============================================================================
# routeur_nat.sh — Transforme une VM Debian/Ubuntu en routeur NAT + pare-feu
# (comme la VM routeur du projet transversal B1)
#
# Usage : sudo ./routeur_nat.sh <interface_externe> <interface_interne> <reseau_interne>
# Exemple : sudo ./routeur_nat.sh eth0 eth1 172.30.16.0/24
#
# Ce que fait le script :
# 1. active le routage IPv4 (ip_forward) de façon permanente
# 2. NAT (masquerade) du réseau interne vers l'extérieur
# 3. pare-feu : on autorise SSH/HTTP/HTTPS en entrée, le reste est bloqué
# 4. rend les règles persistantes (iptables-persistent)
# =============================================================================
set -euo pipefail
if $EUID -ne 0; then
echo "Lance ce script avec sudo." >&2
exit 1
fi
interface_externe="${1:?Usage : $0 <iface_externe> <iface_interne> <reseau_interne>}"
interface_interne="${2:?Interface interne manquante}"
reseau_interne="${3:?Réseau interne manquant (ex. 172.30.16.0/24)}"
echo "==> 1. Activation du routage IPv4"
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/99-routeur.conf
sysctl --system > /dev/null
sysctl net.ipv4.ip_forward
echo "==> 2. Remise à zéro des règles existantes"
iptables -F
iptables -t nat -F
iptables -X
echo "==> 3. Politiques par défaut : on bloque l'entrée et le transit"
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
echo "==> 4. Règles INPUT (trafic destiné au routeur lui-même)"
iptables -A INPUT -i lo -j ACCEPT # boucle locale
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # réponses
iptables -A INPUT -p icmp -j ACCEPT # ping (diagnostic)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH (rebond)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP (HAProxy)
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
echo "==> 5. Règles FORWARD (trafic qui traverse le routeur)"
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i "$interface_interne" -o "$interface_externe" -s "$reseau_interne" -j ACCEPT
echo "==> 6. NAT : les machines internes sortent avec l'IP du routeur"
iptables -t nat -A POSTROUTING -s "$reseau_interne" -o "$interface_externe" -j MASQUERADE
echo "==> 7. Sauvegarde persistante"
if ! dpkg -s iptables-persistent > /dev/null 2>&1; then
echo iptables-persistent iptables-persistent/autosave_v4 boolean true | debconf-set-selections
echo iptables-persistent iptables-persistent/autosave_v6 boolean true | debconf-set-selections
DEBIAN_FRONTEND=noninteractive apt-get install -y iptables-persistent
fi
netfilter-persistent save
echo
echo "Terminé. Vérifications :"
iptables -L -n -v --line-numbers
iptables -t nat -L -n -v