IP forwarding ou commment transformer linux en passerelle

Contexte

Vous avez un réseau privé interne. Vous avez une machine linux qui peut aller sur le web (ou sur un autre réseau). Cette machine est aussi sur votre réseau interne. Vous voulez qu'elle fasse tampon entre le web et votre réseau privé, qu'elle joue le role de passerelle.

le web ——(eth1) Machine linux (eth0)———réseau privé

Pour tester, vous pouvez utiliser 2 machines virtuelles (VM) avec Virtualbox.

web —- reseau NAT —- (eth1) VM1 passerelle (eth0) —- reseau interne —- (eth0) VM2

Pré-requis

Il est préférable et fortement conseillé que la machine linux soit en IP fixe. Dans un pemier temps il faut s'assurer que la machine linux accède bien au web (ping, navigation web, etc…) ici via eth1 (ou enpXsY ou wifi).

Ensuite que cette machine puisse au moins pinguer une machine du réseau interne et vis et versa.

A cette étape les machines du réseau interne ne peuvent dialoguer qu'entre elles (dont la futur passerelle puisse qu'elle fait partie du réseau interne), mais pas avec un autre réseau comme le web. Seule la passerelle peut communiquer à la fois avec le web et le réseau interne.

On va maintenant configurer la passerelle pour qu'elle laise passer (forward) les communications des machines du réseau interne vers le web. Cela se fait en 2 étapes.

Etape 1: IP Forwarding

L'ip forwarding permet au noyau linux de laisser passer les requêtes réseau qui vient d'une carte vers l'autre et ce dans les 2 sens. Pour vérifier si l'ip forwarding est activé

sysctl net.ipv4.ip_forward

actif: net.ipv4.ip_forward=1

non actif : net.ipv4.ip_forward=0

Paramétrage temporaire

On peut l'activer de façon temporaire

sysctl -w net.ipv4.ip_forward=1

ou désactiver de façon temporaire

sysctl -w net.ipv4.ip_forward=0

Paramétrage permanent

Pour que ce paramètre soit permanent meme après un reboot, il faut modifier le fichier /etc/sysctl.conf en y ajoutant :

net.ipv4.ip_forward=1

et on charge la modification avec:

sysctl -p /etc/sysctl.conf

Etape 2: Iptables

Le noyau peut laisser passer les requetes… mais pas le parefeu! en l'occurence IPTABLES/Firewalld. Donc si les machines du réseau interne ne peuvent toujours pas aller sur le web il faut modifier les règles iptables. INUTILE de le désactiver… il faut une règle de NAT !!!

Par contre on peut vider les règles existantes pour partir d'une configuration vierge.

iptables -F
iptables -t nat -F

On est pas là pour faire du filtrage fin hein? Alors on laisse TOUT passer:

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Maintenant les machines du réseau interne, si elles sont correctemement paramétrées, doivent pouvoir aller sur le web. Les machines doivent avoir en adresse de passerelle l'adresse IP la machine linux du réseau interne et un DNS public (free , OpenDNS, autre)

Les machines du réseau interne doivent avoir l'adresse IP du réseau interne de notre passerelle comme passerelle/gateway.

Pas de passerelle sur la carte du réseau interne (eth0) de la machine linux qui joue le role de passerelle

Un peu plus de sécurité ... quand meme

On autorise l'extérieur (web) à entrer dans le réseau interne QUE si c'est pour répondre à une machine interne qui lui a demandé une connexion (type FTP).

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

On autorise explicitement tout ce qui ne vient pas de l'interface connecté à internet.

iptables -A INPUT -m state --state NEW -i ! eth1 -j ACCEPT

par défaut on interdit tout

iptables -P INPUT DROP

source:

http://ipset.netfilter.org/iptables.man.html

https://wiki.centos.org/HowTos/Network/IPTables

http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-sg-fr-4/s1-firewall-ipt-fwd.html

Règles iptables permanentes

à chaque reboot, vous perdez la config de iptable. Pour rendre permanent les modifications de l'iptables: http://blog.sephirots.fr/?p=123 ou https://www.cyberciti.biz/faq/how-to-save-iptables-firewall-rules-permanently-on-linux/

Après avoir créé la règle iptable manuellement, on sauvegarde les règles:

sudo /sbin/iptables-save> /etc/iptables/rules.v4

Ensuite on restaure les règles avec un script qui contient:

sudo /sbin/iptables-restore </etc/iptables/rules.v4

Soit on utilise un service fourni avec iptable-persistent:

sudo apt-get install iptables-persistent

on vérifie si le démarrage automatique est activé

sudo systemctl is-enabled netfilter-persistent.service

Sinon on l'active

sudo systemctl enable netfilter-persistent.service

On peut vérifier l'état du service avec:

sudo systemctl status netfilter-persistent.service
Dernière modification: le 2020/12/27