iptables
no way to compare when less than two revisions
Différences
Ci-dessous, les différences entre deux révisions de la page.
— | iptables [2018/11/17 12:53] (Version actuelle) – créée - modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Définition by Wikipedia ====== | ||
+ | Netfilter est le module qui fournit à Linux les fonctions de pare-feu, de traduction d' | ||
+ | |||
+ | iptables est la commande qui permet à un administrateur réseaux de configurer Netfilter en espace utilisateur. | ||
+ | |||
+ | ====== Installation ====== | ||
+ | |||
+ | En principe, le paquet ' | ||
+ | |||
+ | < | ||
+ | |||
+ | Sous Debian, c’est NetFilter qui est installé par défaut, et il n’y a pas de règles actives. | ||
+ | Il y a la commande " | ||
+ | |||
+ | Pour cela il y a 2 options : | ||
+ | |||
+ | * 1. utiliser un script de démarrage, par exemple / | ||
+ | * 2. utiliser un script lié aux interfaces réseaux | ||
+ | |||
+ | ==== Un script lié aux interfaces réseaux ==== | ||
+ | |||
+ | La seconde méthode correspond aux nouvelles recommandations de Debian depuis Sarge. Elle consiste à ré-initialiser les règles du firewall à chaque rechargement de l’interface réseau. Cependant, elle est un peu moins connue et pratiquée que la première. | ||
+ | |||
+ | ==== Un script de démarrage ==== | ||
+ | La première méthode est la plus classique. Elle consiste à créer un script shell dans le dossier / | ||
+ | |||
+ | < | ||
+ | |||
+ | Le rendre exécutable : | ||
+ | |||
+ | < | ||
+ | |||
+ | ====== Configuration ====== | ||
+ | |||
+ | Ensuite nous avons encore 2 choix : | ||
+ | |||
+ | * 1. placer directement les règles iptables dans le fichier / | ||
+ | * 2. placer les règles dans des fichiers séparés qui seront utilisés par le script / | ||
+ | |||
+ | ==== Directement dans le fichier firewall ==== | ||
+ | |||
+ | < | ||
+ | # | ||
+ | # Regles netfilter | ||
+ | # | ||
+ | ## Variables | ||
+ | ipt="/ | ||
+ | net=" | ||
+ | lan=" | ||
+ | |||
+ | ## Script | ||
+ | # Vidage table FILTER | ||
+ | iptables -F | ||
+ | iptables -X | ||
+ | |||
+ | # Vidage table NAT | ||
+ | iptables -t nat -F | ||
+ | iptables -t nat -X | ||
+ | |||
+ | # Vidage table MANGLE | ||
+ | iptables -t mangle -F | ||
+ | iptables -t mangle -X | ||
+ | |||
+ | ## Activation du mode " | ||
+ | echo 1> / | ||
+ | |||
+ | # Interdire tout par defaut | ||
+ | $ipt -P INPUT DROP | ||
+ | $ipt -P OUTPUT DROP | ||
+ | $ipt -P FORWARD DROP | ||
+ | |||
+ | # Autoriser la boucle locale | ||
+ | $ipt -A INPUT -i lo -j ACCEPT | ||
+ | $ipt -A OUTPUT -o lo -j ACCEPT | ||
+ | |||
+ | # Autoriser tout traffic depuis internet mais filtre en entree | ||
+ | $ipt -A INPUT -i $net -m state --state ESTABLISHED, | ||
+ | $ipt -A OUTPUT -o $net -m state --state NEW, | ||
+ | |||
+ | # Autoriser tout traffic sur intranet | ||
+ | $ipt -A INPUT -i $lan -j ACCEPT | ||
+ | $ipt -A OUTPUT -o $lan -j ACCEPT | ||
+ | # Autorisation traffic entre internet et intranet | ||
+ | $ipt -A FORWARD -i $lan -o $net -j ACCEPT | ||
+ | $ipt -A FORWARD -i $net -o $lan -j ACCEPT | ||
+ | # Activation du NAT | ||
+ | $ipt -t nat -A POSTROUTING -o $net -j MASQUERADE | ||
+ | |||
+ | # Autoriser le multiposte Free | ||
+ | $ipt -t nat -A PREROUTING -i $net -p udp --dport 31336:31337 -s 212.27.38.253 -j DNAT --to 192.168.20.10 | ||
+ | $ipt -A FORWARD -i $net -p udp --dport 31336:31337 -s 212.27.38.253 -d 192.168.20.10 -j ACCEPT | ||
+ | |||
+ | # Autoriser SSH | ||
+ | #$ipt -A INPUT -i $net -p tcp --dport 22 -m state --state NEW, | ||
+ | |||
+ | # Autoriser client torrent sur port 17478 | ||
+ | $ipt -t nat -A PREROUTING -i $net -p tcp --dport 17478 -j DNAT --to-destination 192.168.20.10 | ||
+ | $ipt -A FORWARD -i $net -p tcp -d 192.168.20.10 --dport 17478 -j ACCEPT</ | ||
+ | |||
+ | |||
+ | ==== Dans des fichiers séparés ==== | ||
+ | |||
+ | < | ||
+ | |||
+ | ## Activation du mode " | ||
+ | echo 1> / | ||
+ | |||
+ | ruleset_dir=/ | ||
+ | |||
+ | case " | ||
+ | start) | ||
+ | / | ||
+ | echo -n " | ||
+ | ;; | ||
+ | stop) | ||
+ | / | ||
+ | echo -n " | ||
+ | ;; | ||
+ | force-reload|restart) | ||
+ | $0 stop | ||
+ | sleep 1 | ||
+ | $0 start | ||
+ | ;; | ||
+ | save) | ||
+ | cp $ruleset_dir/ | ||
+ | echo -n "Copie de sauvegarde des anciennes règles: | ||
+ | / | ||
+ | echo -n " | ||
+ | |||
+ | ;; | ||
+ | *) | ||
+ | echo " | ||
+ | exit 1 | ||
+ | esac | ||
+ | |||
+ | exit 0</ | ||
+ | |||
+ | On a donc un script qui permet de **// | ||
+ | Enfin, il permet de sauvegarder la configuration des règles courantes, avec l’option **save**, très utile quand on a testé des règles via la ligne de commande et qu’on souhaite les rendre persistantes. | ||
+ | |||
+ | Il reste donc à mettre en place les fichiers de stockage des règles. | ||
+ | |||
+ | Par défaut le dossier // | ||
+ | < | ||
+ | # cd / | ||
+ | # touch active | ||
+ | # touch inactive</ | ||
+ | |||
+ | Nous pouvons donc lancer une première fois la sauvegarde des règles courantes (s’il y en a) : | ||
+ | < | ||
+ | Le fichier vide // | ||
+ | |||
+ | < | ||
+ | |||
+ | Exemple pour **active** (équivalent du script manuel cité plus haut) | ||
+ | |||
+ | < | ||
+ | :PREROUTING ACCEPT [2514: | ||
+ | : | ||
+ | :OUTPUT ACCEPT [5:380] | ||
+ | -A PREROUTING -s 212.27.38.253 -i eth0 -p udp -m udp --dport 31336:31337 -j DNAT --to-destination 192.168.20.10 | ||
+ | -A PREROUTING -i eth0 -p tcp -m tcp --dport 17478 -j DNAT --to-destination 192.168.20.10 | ||
+ | -A POSTROUTING -o eth0 -j MASQUERADE | ||
+ | COMMIT | ||
+ | *filter | ||
+ | :INPUT DROP [636: | ||
+ | :FORWARD DROP [0:0] | ||
+ | :OUTPUT DROP [0:0] | ||
+ | -A INPUT -i lo -j ACCEPT | ||
+ | -A INPUT -i eth0 -m state --state RELATED, | ||
+ | -A INPUT -i eth1 -j ACCEPT | ||
+ | -A FORWARD -i eth1 -o eth0 -j ACCEPT | ||
+ | -A FORWARD -i eth0 -o eth1 -j ACCEPT | ||
+ | -A FORWARD -s 212.27.38.253 -d 192.168.20.10 -i eth0 -p udp -m udp --dport 31336:31337 -j ACCEPT | ||
+ | -A FORWARD -d 192.168.20.10 -i eth0 -p tcp -m tcp --dport 17478 -j ACCEPT | ||
+ | -A OUTPUT -o lo -j ACCEPT | ||
+ | -A OUTPUT -o eth0 -m state --state NEW, | ||
+ | -A OUTPUT -o eth1 -j ACCEPT | ||
+ | COMMIT</ | ||
+ | |||
+ | Exemple pour **inactive** (dans le cas présent, laisse tout ouvert et fait du NAT entre le LAN et INTERNET) | ||
+ | |||
+ | < | ||
+ | :PREROUTING ACCEPT [292: | ||
+ | :INPUT ACCEPT [60:4116] | ||
+ | :FORWARD ACCEPT [232: | ||
+ | :OUTPUT ACCEPT [46:4960] | ||
+ | : | ||
+ | COMMIT | ||
+ | *nat | ||
+ | :PREROUTING ACCEPT [2539: | ||
+ | : | ||
+ | :OUTPUT ACCEPT [5:380] | ||
+ | -A POSTROUTING -o eth0 -j MASQUERADE | ||
+ | COMMIT | ||
+ | *filter | ||
+ | :INPUT ACCEPT [60:4116] | ||
+ | :FORWARD ACCEPT [232: | ||
+ | :OUTPUT ACCEPT [46:4960] | ||
+ | COMMIT</ | ||
+ | |||
+ | |||
+ | ====== Démarrage automatique du firewall ====== | ||
+ | |||
+ | |||
+ | Pour que le firewall soit lancé à chaque démarrage du serveur, il faut utiliser la commande // | ||
+ | |||
+ | < |
iptables.txt · Dernière modification : 2018/11/17 12:53 de 127.0.0.1