#!/bin/sh ## # ASR8 - TP1 : firewall - iptables # Alexis Akial - Arnaud Jullemier - Édouard Lumet - Dorian Pigeau ## IPTABLES=/sbin/iptables # On remet à zéro le pare-feu en supprimant toutes les règles. On peut également écrire $IPTABLES -X et $IPTABLES -F. Cette façon de faire permet de rendre compte de toutes les chaînes et tables. $IPTABLES -t filter -F $IPTABLES -t nat -F $IPTABLES -t mangle -F $IPTABLES -t raw -F $IPTABLES -t filter -P INPUT ACCEPT $IPTABLES -t filter -P OUTPUT ACCEPT $IPTABLES -t filter -P FORWARD ACCEPT $IPTABLES -t nat -P PREROUTING ACCEPT $IPTABLES -t nat -P POSTROUTING ACCEPT $IPTABLES -t nat -P OUTPUT ACCEPT $IPTABLES -t nat -P INPUT ACCEPT $IPTABLES -t mangle -P PREROUTING ACCEPT $IPTABLES -t mangle -P OUTPUT ACCEPT $IPTABLES -t mangle -P POSTROUTING ACCEPT $IPTABLES -t mangle -P FORWARD ACCEPT $IPTABLES -t mangle -P INPUT ACCEPT $IPTABLES -t raw -P OUTPUT ACCEPT $IPTABLES -t raw -P PREROUTING ACCEPT echo "Pare-feu - Remise à zéro" ; sleep 1 echo "Pare-feu - Suppression des règles" ; sleep 1 # Interdictions : on commence par appliquer la politique DROP pour les trois chaînes $IPTABLES -t filter -P INPUT DROP $IPTABLES -t filter -A INPUT -j LOG --log-level info $IPTABLES -t filter -P FORWARD DROP $IPTABLES -t filter -A FORWARD -j LOG --log-level info $IPTABLES -t filter -P OUTPUT DROP $IPTABLES -t filter -A OUTPUT -j LOG --log-level info echo "Pare-feu - Interdictions générales établies" ; sleep 1 echo "Pare-feu - Activation de la journalisation (log)" ; sleep 1 # Loopback $IPTABLES -t filter -A INPUT -i lo -j ACCEPT # on accepte tout le trafic entrant de l'interface de loopback (lo) echo "Pare-feu - Autorisation loopback établie" ; sleep 1 # Modprob : on charge les modules modprobe pour statefull modprobe ip_conntrack modprobe ip_conntrack_ftp echo "Pare-feu - Chargement des modules modprobe" ; sleep 1 # Trafic d'entrée : $IPTABLES -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # on accepte sur la chaîne FORWARD (toutes interfaces) toutes les connexions établies (SYN), notre machine faisant office de routeur $IPTABLES -t filter -A FORWARD -p tcp --tcp-flags ALL SYN,ACK,FIN,RST -m limit --limit 5/second -j ACCEPT echo "Pare-feu - Autorisation des connexions établies en entrée (statefull)" ; sleep 1 echo "Pare-feu - Limitation de la fréquence des flags TCP (SYN flood)" ; sleep 1 # Pings (ICMP) $IPTABLES -A INPUT -p icmp -m limit --limit 5/second -j ACCEPT # on accepte en entrée sur la chaîne INPUT (interface d'entrée) tous les paquets ICMP en y appliquant une fréquence de réception max $IPTABLES -A FORWARD -p icmp -j ACCEPT # on accepte aussi les pings sur la chaîne FORWARD (toutes interfaces) echo "Pare-feu - Autorisation des pings (ICMP) établie" ; sleep 1 echo "Pare-feu - Limitation de la fréquence de réception des pings" ; sleep 1 # Sortie autorisée $IPTABLES -t filter -A OUTPUT -j ACCEPT # on accepte tout en sortie, sur la chaîne OUTPUT (table filter) echo "Pare-feu - Autorisations générales en sortie établies" ; sleep 1 # Services à autoriser en entrée # Autoriser HTTP/HTTPS/SMTP/DNS pour la DMZ $IPTABLES -A FORWARD -p tcp -d 192.168.10.0/24 --dport 80 -j ACCEPT $IPTABLES -A FORWARD -p tcp -d 192.168.10.0/24 --dport 443 -j ACCEPT $IPTABLES -A FORWARD -p tcp -d 192.168.10.0/24 --dport 25 -j ACCEPT $IPTABLES -A FORWARD -p tcp -d 192.168.10.0/24 --dport 53 -j ACCEPT $IPTABLES -A FORWARD -p udp -d 192.168.10.0/24 --dport 53 -j ACCEPT echo "Pare-feu - Autorisations particulières vers la DMZ établies" ; sleep 1 #On autorise SSH au niveau du routeur pour une machine de l'Intranet $IPTABLES -A INPUT -p tcp -s 192.168.11.2 --dport 22 -j ACCEPT echo "Pare-feu - Autorisations particulières en entrée depuis l'Intranet établies" ; sleep 1 echo "Pare-feu - Mise en place des règles terminée [OK]" ; sleep 2 # Affiche les règles IPTABLES echo "\n********** Affichage des règles iptables **********" $IPTABLES -L --line-numbers exit 0