[article] Ajout du début de l'article sur la migration vers nftables
This commit is contained in:
		
							parent
							
								
									2635c3b6cc
								
							
						
					
					
						commit
						4fb38ca1d4
					
				
					 1 changed files with 90 additions and 0 deletions
				
			
		
							
								
								
									
										90
									
								
								content/migration_nftables.mdown
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								content/migration_nftables.mdown
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -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 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue