Outils pour utilisateurs

Outils du site


netadmin:iptables:start

Ceci est une ancienne révision du document !


Introduction à iptables

iptables est un CLI permettant de configurer Netfilter. C'est le successeur du CLI ipchains (noyaux 2.2.x).

Les règles de filtrages du pare-feu sont définies dans les chaines de la table filter. Lorsqu' on invoque iptables sans l'argument -t c'est la tables filter qui est implicitement utilisée.

filter utilise 3 chaînes de traitements:

  • INPUT: chaine des règles pour les paquets entrant
  • OUTPUT: règles appliquées aux paquets sortants
  • FORWARD: paquets non destinés a la machine

Politique

Afficher les politiques définies:

iptables -L -v | grep policy

Définir les politiques par défaut

Pour chaque chaîne de traitement, les règles sont parcourues séquentiellement, lorsque aucune correspondance n'est trouvée la politique par défaut est appliquée. Pour modifier la politique:

$ sudo iptables --policy INPUT DROP 

Ici la politique par défaut pour les paquets entrants devient DROP, ils seront ignorés si aucune règle ne peut être appliquée.

Ajouter une règle

L'argument -A ou --append (ajouter) permet d'ajouter une règle pour la chaine spécifiée. Il existe également l'argument -I ou --insert pour ajouter une règle en spécifiant sa position.

$ sudo iptables -A INPUT -i em2 -p tcp -s 192.168.0.0/24 --dport ssh -j REJECT

Ici les paquets entrant par l'interface em2 avec une adresse de réseau 192.168.0.0/24 et essayant de contacter le service écoutant sur le port SSH seront rejetés.

On peut ensuite insérer une règle d'exception permettant à une machine particulière de ce réseau de se connecter en ssh:

$ sudo iptables -I INPUT 1 -p tcp -i em2 -s 192.168.0.123 --dport ssh -j ACCEPT

Supprimer une règle

Pour supprimer une règle utiliser l'argument -D ou --delete. L'argument --flush supprimera toutes les règles définies sur une chaîne ou sur l'ensemble des règles.

Les états

La plupart des services ont besoin de communications bidirectionnelles. Il faut donc prévoir des règles traitant les paquets entrant dans la chaine INPUT et des règles pour les paquets sortants dans la chaine OUTPUT. Pour cela il peut être intéressant d'utiliser les états

États:

  • NEW: nouvelle connexion
  • RELATED: la connexion est nouvelle mais est en relation avec une autorisée
  • ESTABLISHED: la connexion est établie
  • INVALID: le trafic ne peut pas être identifié.

La règle ci-dessous permet d'autoriser le trafic en sortie à partir du moment ou il est lié à une connexion autorisée établie en entrée:

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

Le reste de la configuration s'effectuera sur la chaine INPUT. Un exemple avec le service ssh, ici on autorise le trafic pour le service ssh si la connexion est initée depuis l'interface lan:

iptables -A INPUT -i lan -p tcp -s 192.168.0.0/24 -d 192.168.0.254 --dport ssh -j ACCEPT

Broadcast/multicast

Pour ignorer les paquets broadcastés ou les multicast:

iptables -A INPUT -m pkttype –pkt-type broadcast -j DROP
iptables -A INPUT -m pkttype –pkt-type multicast -j DROP

Enregistrer la configuration

Les modifications apportées ne sont pas permanentes. Pour les enregistrer et les retrouver au prochain redémarrage:

$ sudo iptables-save

Lister les tables

Pour lister toutes les tables existantes sur le système:

$ sudo cat /proc/net/ip_tables_names

Références

netadmin/iptables/start.1485421776.txt.gz · Dernière modification : 2021/02/01 21:51 (modification externe)