diff --git a/content/migration_nftables.mdown b/content/migration_nftables.mdown new file mode 100644 index 0000000..d1eae50 --- /dev/null +++ b/content/migration_nftables.mdown @@ -0,0 +1,90 @@ +Title: Migration iptables -> nftables +Author: kleph +Email: kleph@kleph.info +Category: Blog +Date: 2015/02/05 +Tags: Linux, Internet +Lang: fr + + +Un article qui va parler de la migration vers nftables de mon routeur. + +# premier test : masquarade +Avant de migrer le firewall du routeur principal, j'ai voulu commencer par plus petit. J'ai un VPN sur une autre machine qui fait de la masquarade en sortie. +Ce qui tombe assez bien, la masquarade vient d'être ajoutée dans la version 3.18 du noyau. + + +## Avant: +Voici le script précédent que je vais remplacer : + +``` +#!/bin/bash + +# On efface les règles définies : +iptables -t filter -F +iptables -t nat -F + +# Efface les chaînes définies : +iptables -X + +# Politique par défaut : +iptables -P INPUT ACCEPT +iptables -P OUTPUT ACCEPT +iptables -P FORWARD ACCEPT + +# forward entre interfaces réseau +echo "1" > /proc/sys/net/ipv4/ip_forward + +# nat VPN (for jabber client on hyperion) +iptables -t nat -o tun0 -A POSTROUTING -j MASQUERADE + +``` + +## Après +On trouve un peu de documentation sur le net [TODO: liens]. +Parmis les changements notables dès le départ, c'est que les tables et les chaînes classiques d'iptables ne sont pas créées par défaut. Ainsi que le système de politique par défaut. +Il faut donc les déclarer. + +Ensuite, la masquarade est un cas particulier de source NAT, l'adresse de remplacement n'est pas définie explicitement, mais c'est l'adresse de sortie qui est remplacée à la volée, une fois la décision de routage prise, donc dans la chaîne postrouting. +[TODO lien vers le fonctionnement d'iptables] +Du fait que les chaînes ne soient pas créer par défault, il faut aussi rajouter la chaîne prerouting, pour que la traduction inverse soit effectuée au retour des paquets. + +Voici donc ce que ça donne : +``` +#!/bin/bash +# activate masquerade + +IF_OUTPUT=tun0 + +# ensure iptable_nat is not loaded +lsmod | grep -q iptable_nat +ret=$? + +if [ ${ret} -eq 0 ]; then + echo "nft usage is not compatible with iptables_nat" + echo "please remove iptable_nat module" + exit 1 +fi + +# remove existing rules +nft flush ruleset + +# masquerade +nft add table nat +# add prerouting to translate back the address when packets come back +nft add chain nat prerouting { type nat hook prerouting priority 0\; } + +# postrouting to translate source address +nft add chain nat postrouting { type nat hook postrouting priority 0\; } + +# masquerade effective rule +nft add rule nat postrouting oif ${IF_OUTPUT} masquerade + +# active packet forwarding between interfaces (routing) +echo "1" > /proc/sys/net/ipv4/ip_forward +# ipv6 +# /proc/sys/net/ipv6/conf/all/forwarding = 1 + +``` + +