0

Firewall GNU/Linux avec iptables

Iptables est le nom de la commande qui contrôle le firewall Netfilter, qui est un module du noyau GNU/Linux. Ensemble, ils permettent de filtrer des paquets (IPv4, IPv6..) en configurant des règles et des chaînes  définis par l’administrateur système.

Introduction

Architecture

 

Table FILTER

La table FILTER contient les règles de filtrage des paquets en général.

 

Chaîne INPUT : Cette chaîne décide du sort des paquets entrants à destination des hôtes locaux.

Chaîne OUTPUT : Celle-ci décide du sort des paquets sortants, émis par les hôtes locaux.

Chaîne FORWARD : Ici, ce sont les paquets qui traversent et qui suivent les routes (passerelles).

 

Table NAT

La table NAT permet de faire de la translation d’adresse réseau (NAT) avec les différents paquets circulants.

 

Chaîne PREROUTING : Permet de faire de la redirection de ports, WAN vers LAN. On peut par exemple rediriger les paquets à destination du port 80 sur notre passerelle/IP public vers un hôte local sur le port 8080.

Chaîne POSTROUTING : Permet de faire du SNAT, MASQUERADE. Masquer les adresses des hôtes locaux avec une IP “officielle” qui elle sera vu des hôtes WAN.

Chaîne OUTPUT : Modifier la destination des paquets générés localement.

 

Table MANGLE

 

La table MANGLE quand à elle, permet de marquer les flux des paquets entrants et générés localement pour un traitement spécifique de ces paquets. On peut privilégier certains flux par rapport à d’autre, ce qui revient à faire de la QoS.

 

Syntaxes

 

ACCEPT : Accepter les paquets.
DROP : Rejeter les paquets sans en avertir le demandeur.
REJECT : Rejeter les paquets en avertissant le demandeur avec un paquet RESET.

Utiliser DROP permet d’éviter de donner des informations supplémentaires en cas de scan réseau par exemple.

En utilisant REJECT, la connexion sera vu comme directement rejetée. C’est utilisé pour indiquer à l’autre extrémité que le port est inacessible.

Tandis qu’avec DROP, elle apparaîtra comme connexion expirée, timed-out. Une adresse IP innocupée. De plus, la vitesse de scan sera considérablement ralentis avec un paquet “dropé”. Un scanner réseau basique attendra qu’une tentative de connexion soit terminée avant de commencer la suivante. Cependant, ceci est à prendre avec des pincettes puisqu’il est possible de fixer un délai de temporisation pour chaque port et de continuer ou non le scan malgré une connexion timed-out.

Plus d’informations ici : Drop versus Reject.

 

Exemples de commande

Autoriser le ping sortant ainsi que la réponse (écho entrant) du destinataire.

iptables -A OUTPUT -p icmp -j ACCEPT

iptables -A INPUT -p icmp -icmp-type echo-reply -j ACCEPT

Autoriser les requêtes vers le service DNS et les réponses

iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

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

Afficher ce que contient la table filter

iptables -L -t filter

Afficher ce que contient la table NAT

iptables -L -t nat

Autoriser les connexions sortantes vers le HTTP, HTTPS et le retour

iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT

iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT

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

Rejeter les paquets à destination du réseau 192.168.1.0/24

iptables -A OUTPUT -d 192.168.1.0/24 -j DROP

Autoriser une connexion SSH provenant du réseau 172.16.0.0/16

iptables -A INPUT -p tcp -s 172.16.0.0/16 --dport 22 -j ACCEPT

Fixer les politiques par défaut

Il s’agit de la politique par défaut quand rien ne “match”. On choisis dans ce cas-là de tout refuser.

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

IP Masquerade et routage

Avec l’IP Masquerade, les adresses privées utilisent toutes la même adresse publique. La translation se fait avec la chaîne POSTROUTING.

On active tout d’abord le routage entre les cartes :

echo > 1 /proc/sys/net/ipv4/ip_forward

On traduiras les adresses provenant du réseau 192.168.1.0/24 avec l’IP de l’interface eth1.

iptables -t nat -f POSTROUTING

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE

Suppression d’une règle iptables

Voici la démarche à suivre pour la suppression d’une règle iptables précise.

Affichage des règles INPUT, OUTPUT et FORWARD avec numéro de lignes :

iptables -L --line-number

Si l’on souhaite au contraire afficher les tables PREROUTING et POSTROUTING avec toujours les numéros de lignes affichés :

iptables -L -t nat --line-number

On choisis de supprimer la ligne, en choisissant la table et le numéro de ligne concernés:

iptables -D [Table] [Numéro]

Je souhaite par exemple supprimer la ligne 6 de la table OUTPUT

iptables -D OUTPUT 6

Supras

S’abonner
Notifier de
guest
0 Commentaires
Inline Feedbacks
View all comments