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é

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 moin 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 communique à 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

Etape 2: Iptables

Le noyau peut laisser passer les requetes… mais pas le parefeu! en l'occurence IPTABLES. 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 !!!

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

iptables  -F

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

iptables -A POSTROUTING -t nat -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)

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

à chaque reboot, vous perdez la config de iptable. Pour rendre permanent les modifications de l'iptables: http://blog.sephirots.fr/?p=123

Dernière modification: le 2019/03/13