Différences entre versions de « Iptables »

De The Linux Craftsman
Aller à la navigation Aller à la recherche
 
(12 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 
= Introduction =
 
= Introduction =
  
Soit une passerelle entre un LAN et Internet. Le LAN à le plan d'adressage 192.168.1.0/24 (192.168.1.254 pour la passerelle) et la passerelle à l'adresse publique 1.2.3.4.
+
Soit une passerelle entre un LAN et Internet. Le LAN a le plan d'adressage 192.168.1.0/24 (192.168.1.254 pour la passerelle) et la passerelle a l'adresse publique 1.2.3.4.
  
 
Sur le LAN, il  y a également un serveur Web à l'adresse 192.168.1.253.
 
Sur le LAN, il  y a également un serveur Web à l'adresse 192.168.1.253.
Ligne 12 : Ligne 12 :
 
</pre>
 
</pre>
  
Pourquoi inséré à la deuxième ligne (''-I INPUT 2'') plutôt que d'ajouter à la fin ?? Si vous regarder bien les règles d'un pare-feu Iptables sur une CentOS:
+
Pourquoi insérer à la deuxième ligne (''-I INPUT 2'') plutôt que d'ajouter à la fin ?? Si vous regardez bien les règles d'un pare-feu Iptables sur une CentOS:
  
 
<pre>
 
<pre>
Ligne 19 : Ligne 19 :
  
 
On s'aperçoit que:
 
On s'aperçoit que:
* la première règle autorise tout le trafic initier depuis la machine;
+
* la première règle autorise tout le trafic initié depuis la machine;
 
* la dernière règle ''drop'' tous les paquets
 
* la dernière règle ''drop'' tous les paquets
  
Ligne 26 : Ligne 26 :
 
= Translation d’adresses =
 
= Translation d’adresses =
  
Pour les machine sur le LAN, il faut faire du camouflage (MASQUERADE en anglais) c'est à dire que les adresses du LAN (privées et donc non routables sur Internet)seront remplacées "à la volées" par l'adresse publique de la passerelle.
+
Pour les machines sur le LAN, il faut faire du camouflage (MASQUERADE en anglais), c'est-à-dire que les adresses du LAN (privées et donc non routables sur Internet) seront remplacées "à la volée" par l'adresse publique de la passerelle.
 +
Pour cela il faut:
 +
* Faire du NAT sur les paquets en provenance du LAN (réseau source 192.168.1.0/24):
 
<pre>
 
<pre>
# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
+
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
 +
</pre>
 +
* Vider la table ''FORWARD''
 +
<pre>
 +
# iptables -F FORWARD
 +
</pre>
 +
* Activer le routage sur la machine...
 +
... en positionnant le paramètre ''ip_forward'' à ''1''...
 +
<pre>
 +
# vi /etc/sysctl.conf
 +
</pre>
 +
... et en rechargant les paramètres du noyau.
 +
<pre>
 +
# sysctl -p
 
</pre>
 
</pre>
  
 
= Translation de port =
 
= Translation de port =
  
Pour que les clients sur Internet puisse joindre le serveur Web, il faut rediriger le port TCP/80 de la passerelle sur le port TCP/80 du serveur Web
+
Pour que les clients sur Internet puissent joindre le serveur Web, il faut rediriger le port TCP/80 de la passerelle sur le port TCP/80 du serveur Web (eth0 est l'interface WAN)
  
 
<pre>
 
<pre>
# iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.1.253
+
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.253
 
</pre>
 
</pre>
  
= Modification d'entête =
+
= Mapping de réseau =
 +
 
 +
''NETMAP est une nouvelle implémentation des cibles SNAT et DNAT où la partie hôte de l'adresse IP n'est pas changée. Elle procure une fonction NAT 1:1 pour l'ensemble des réseaux qui n'ont pas de fonctions SNAT et DNAT standard''.
 +
 
 +
[https://www.inetdoc.net/guides/iptables-tutorial/netmaptarget.html inetdoc.net]
 +
 
 +
Prenons le cas de figure d'un client VPN se trouvant sur un réseau avec le même plan d'adressage que celui destination: 192.168.1.0/24
 +
[[Fichier:Netmap_vpn_diagram.png|centré]]
 +
 
 +
Il est impossible pour un ordinateur de l'entreprise 1 de joindre un ordinateur de l'entreprise 2 car, comme les adresses IP sont dans le même réseau, les requêtes ne seront pas adressées à la passerelle VPN.
 +
 +
L'idée est de mapper le réseau de l'entreprise 2 sur un autre plan d'adressage grâce a la cible NETMAP. Dans ce cas de figure on peut utiliser le réseau 192.168.2.0/24 qui n'est pas utilisé dans l'entreprise 1 pour faire ce mapping :
 +
 
 +
<pre>
 +
#iptables -t nat -A PREROUTING -d 192.168.2.0/24 -j NETMAP --to 192.168.1.0/24
 +
#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j NETMAP --to 192.168.2.0/24
 +
</pre>
 +
 
 +
*La première règle dit à la passerelle de convertir les adresses du réseau 192.168.2.0/24 en 192.168.1.0/24.
 +
*La deuxième règle dit à la passerelle de convertir dans l'autre sens les messages qui reviennent.
 +
 
 +
Maintenant, pour joindre un ordinateur de l'entreprise 2, il faut utiliser les adresses du réseau 192.168.2.0/24 !
 +
 
 +
= Un peu de sécurité =
 +
On peut limiter le nombre de requêtes pour ne pas se succomber à un déni de service (DoS) :
 +
<pre>
 +
# iptables -I INPUT 2 -p tcp --dport 80 -m limit --limit 20/minute --limit-burst 100 -j ACCEPT
 +
</pre>
 +
On peut également limiter le scan de port :
 +
<pre>
 +
# iptables -I INPUT 2 -p tcp —tcp-flags SYN,ACK,FIN,RST RST -m limit —limit 1/s -j RETURN
 +
</pre>
 +
 
 +
= Sauvegarde =
 +
Pour rendre les règles que vous venez de rentrer persistentes, n'oubliez pas de les sauvegarder:
 +
<pre>
 +
# service iptables save
 +
iptables : Sauvegarde des règles du pare-feu dans /etc/sysconfig/iptables : [  OK  ]
 +
</pre>

Version actuelle datée du 12 octobre 2023 à 16:35

Introduction

Soit une passerelle entre un LAN et Internet. Le LAN a le plan d'adressage 192.168.1.0/24 (192.168.1.254 pour la passerelle) et la passerelle a l'adresse publique 1.2.3.4.

Sur le LAN, il y a également un serveur Web à l'adresse 192.168.1.253.

Filtrage

Sur le serveur Web, on voudra autoriser le service HTTP (TCP/80)

# iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT

Pourquoi insérer à la deuxième ligne (-I INPUT 2) plutôt que d'ajouter à la fin ?? Si vous regardez bien les règles d'un pare-feu Iptables sur une CentOS:

# iptables -nvL INPUT

On s'aperçoit que:

  • la première règle autorise tout le trafic initié depuis la machine;
  • la dernière règle drop tous les paquets

Il faut donc insérer notre règle entre les deux règles précédentes (e.g. en deuxième position).

Translation d’adresses

Pour les machines sur le LAN, il faut faire du camouflage (MASQUERADE en anglais), c'est-à-dire que les adresses du LAN (privées et donc non routables sur Internet) seront remplacées "à la volée" par l'adresse publique de la passerelle. Pour cela il faut:

  • Faire du NAT sur les paquets en provenance du LAN (réseau source 192.168.1.0/24):
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  • Vider la table FORWARD
# iptables -F FORWARD
  • Activer le routage sur la machine...

... en positionnant le paramètre ip_forward à 1...

# vi /etc/sysctl.conf

... et en rechargant les paramètres du noyau.

# sysctl -p

Translation de port

Pour que les clients sur Internet puissent joindre le serveur Web, il faut rediriger le port TCP/80 de la passerelle sur le port TCP/80 du serveur Web (eth0 est l'interface WAN)

# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.253

Mapping de réseau

NETMAP est une nouvelle implémentation des cibles SNAT et DNAT où la partie hôte de l'adresse IP n'est pas changée. Elle procure une fonction NAT 1:1 pour l'ensemble des réseaux qui n'ont pas de fonctions SNAT et DNAT standard.

inetdoc.net

Prenons le cas de figure d'un client VPN se trouvant sur un réseau avec le même plan d'adressage que celui destination: 192.168.1.0/24

Netmap vpn diagram.png

Il est impossible pour un ordinateur de l'entreprise 1 de joindre un ordinateur de l'entreprise 2 car, comme les adresses IP sont dans le même réseau, les requêtes ne seront pas adressées à la passerelle VPN.

L'idée est de mapper le réseau de l'entreprise 2 sur un autre plan d'adressage grâce a la cible NETMAP. Dans ce cas de figure on peut utiliser le réseau 192.168.2.0/24 qui n'est pas utilisé dans l'entreprise 1 pour faire ce mapping :

#iptables -t nat -A PREROUTING -d 192.168.2.0/24 -j NETMAP --to 192.168.1.0/24
#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j NETMAP --to 192.168.2.0/24
  • La première règle dit à la passerelle de convertir les adresses du réseau 192.168.2.0/24 en 192.168.1.0/24.
  • La deuxième règle dit à la passerelle de convertir dans l'autre sens les messages qui reviennent.

Maintenant, pour joindre un ordinateur de l'entreprise 2, il faut utiliser les adresses du réseau 192.168.2.0/24 !

Un peu de sécurité

On peut limiter le nombre de requêtes pour ne pas se succomber à un déni de service (DoS) :

# iptables -I INPUT 2 -p tcp --dport 80 -m limit --limit 20/minute --limit-burst 100 -j ACCEPT

On peut également limiter le scan de port :

# iptables -I INPUT 2 -p tcp —tcp-flags SYN,ACK,FIN,RST RST -m limit —limit 1/s -j RETURN

Sauvegarde

Pour rendre les règles que vous venez de rentrer persistentes, n'oubliez pas de les sauvegarder:

# service iptables save
iptables : Sauvegarde des règles du pare-feu dans /etc/sysconfig/iptables : [  OK  ]