====== 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 laisse 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 **!!!
Si la commande iptables n'existe pas, il faut l'installer !
apt install iptables
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
Ici, eth1 est la carte NATée qui sort sur internet.
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|http://ipset.netfilter.org/iptables.man.html]]
[[https://wiki.centos.org/HowTos/Network/IPTables|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|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|http://blog.sephirots.fr/?p=123]] ou [[https://www.cyberciti.biz/faq/how-to-save-iptables-firewall-rules-permanently-on-linux/|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
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