From 4fb38ca1d463e4a27af4d48c6c997355413c2f10 Mon Sep 17 00:00:00 2001 From: kleph Date: Thu, 5 Feb 2015 20:34:30 +0100 Subject: [PATCH] =?UTF-8?q?[article]=20Ajout=20du=20d=C3=A9but=20de=20l'ar?= =?UTF-8?q?ticle=20sur=20la=20migration=20vers=20nftables?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/migration_nftables.mdown | 90 ++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 content/migration_nftables.mdown 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 + +``` + +