fwbuilder
.
iptables
et ip6tables
permettent de le configurer. La différence entre ces deux outils se limite à ce que le premier agit sur le réseau IPv4 alors que le second intervient sur le réseau IPv6. Les deux piles réseau étant amenées à cohabiter pendant de nombreuses années, il faudra faire usage des deux outils en parallèle.
filter
pour les règles de filtrage (accepter, refuser, ignorer un paquet) ;
nat
pour modifier les adresses IP et les ports sources ou destinataires des paquets ;
mangle
pour modifier d'autres paramètres des paquets IP (notamment le champ ToS — Type Of Service — et les options) ;
raw
pour effectuer des manipulations manuelles sur les paquets avant que le suivi de connexion entre en jeu.
security
is used for Mandatory Access Control networking rules, implemented by Linux Security Modules such as SELinux.
filter
compte trois chaînes standards :
INPUT
: concerne les paquets destinés au pare-feu ;
OUTPUT
: concerne les paquets émis par le pare-feu ;
FORWARD
: appliquée aux paquets transitant via le pare-feu (et dont il n'est donc ni la source ni le destinataire).
nat
dispose également de trois chaînes standards :
PREROUTING
: modifie les paquets dès qu'ils arrivent ;
POSTROUTING
: modifie les paquets alors qu'ils sont prêts à partir ;
INPUT
: to modify packets destined for local sockets;
OUTPUT
: modifie les paquets générés par le pare-feu lui-même.
-j
vient de jump) à l'emplacement indiqué pour continuer le traitement. Certains de ces emplacements sont standardisés et correspondent aux actions les plus courantes. Une fois une de ces actions enclenchée, le parcours de la chaîne est interrompu parce que le sort du paquet est normalement décidé (sauf exception explicitement mentionnée ci-après) :
ACCEPT
: autoriser le paquet à poursuivre son parcours ;
REJECT
: rejeter le paquet (ICMP signale une erreur, l'option --reject-with type
d'iptables
permet de choisir le type d'erreur renvoyée) ;
DROP
: supprimer (ignorer) le paquet ;
LOG
: enregistrer (via syslogd
) un message de log contenant une description du paquet traité (cette action retourne après exécution à sa position dans la chaîne appelante — celle qui a invoquée l'action — c'est pourquoi il est nécessaire de la faire suivre par une règle REJECT ou DROP si l'on veut simplement enregistrer la trace d'un paquet qui doit être refusé) ;
NFLOG
: log a message via the loaded logging backend (usually nfnetlink_log), which can be better adapted and more efficient than syslogd
for handling large numbers of messages; note that this action, like LOG, also returns processing to the next rule in the calling chain;
RETURN
: stopper l'évaluation de la chaîne courante et revenir sur la chaîne appelante (si la chaîne courante est une chaîne standard, dépourvue de chaîne appelante, effectuer l'action par défaut — il s'agit d'une action particulière qui se configure avec l'option -P
de iptables
) ;
SNAT
(seulement dans la table nat
: effectuer du Source NAT (des options précisent les modifications à effectuer) ;
DNAT
(seulement dans la table nat
) : effectuer du Destination NAT (des options précisent les modifications à effectuer) ;
MASQUERADE
(seulement dans la table nat
) : effectuer du masquerading
(SNAT particulier) ;
REDIRECT
(seulement dans la table nat
) : rediriger un paquet vers un port particulier du pare-feu lui-même ; action notamment utile pour mettre en place un mandataire (ou proxy) web transparent (il s'agit d'un service pour lequel aucune configuration côté client n'est nécessaire, puisque le client a l'impression de se connecter directement au destinataire alors que ses échanges avec le serveur transitent systématiquement par le mandataire).
mangle
, ne sont pas mentionnées ici. Vous en trouverez la liste exhaustive dans les pages de manuel iptables(8) et ip6tables(8).
iptables
et ip6tables
permettent de manipuler les tables, les chaînes et les règles. L'option -t table
indique la table sur laquelle opérer (par défaut, c'est filter
).
-N chain
option creates a new chain. The -X chain
deletes an empty and unused chain. The -A chain rule
adds a rule at the end of the given chain. The -I chain rule_num rule
option inserts a rule before the rule number rule_num. The -D chain rule_num
(or -D chain rule
) option deletes a rule in a chain; the first syntax identifies the rule to be deleted by its number, while the latter identifies it by its contents. The -F chain
option flushes a chain (deletes all its rules); if no chain is mentioned, all the rules in the table are deleted. The -L chain
option lists the rules in the chain; if no chain is mentioned, all chains are listed. Finally, the -P chain action
option defines the default action, or “policy”, for a given chain; note that only standard chains can have such a policy.
conditions -j action options_de_l'action
. En écrivant bout à bout plusieurs conditions dans la même règle, on en produit la conjonction (elles sont liées par des et logiques), donc une condition plus restrictive.
-p protocole
sélectionne selon le champ protocole du paquet IP, dont les valeurs les plus courantes sont tcp
, udp
, icmp
et icmpv6
. Préfixer la condition par un point d'exclamation inverse la condition (qui correspond alors à tous les paquets n'ayant pas le protocole indiqué). Cette manipulation est possible pour toutes les autres conditions énoncées ci-dessous.
-s adresse
ou -s réseau/masque
vérifie l'adresse source du paquet ; -d adresse
ou -d réseau/masque
en est le pendant pour l'adresse de destination.
-i interface
sélectionne les paquets provenant de l'interface réseau indiquée ; -o interface
sélectionne les paquets en fonction de leur interface réseau d'émission.
-p tcp
peut par exemple être accompagnée de conditions sur les ports TCP avec --source-port port
et --destination-port port
.
--state état
indique le statut du paquet dans une connexion (le module ipt_conntrack
, qui implémente le suivi des connexions, lui est nécessaire). L'état NEW
désigne un paquet qui débute une nouvelle connexion. L'état ESTABLISHED
concerne les paquets d'une connexion existante et l'état RELATED
les paquets d'une nouvelle connexion liée à une connexion existante (c'est le cas des connexions ftp-data
d'une session ftp
en mode "actif").
LOG
dispose ainsi de plusieurs options visant à :
syslog
(--log-level
, dont la valeur par défaut est warning
) ;
--log-prefix
) ;
--log-tcp-sequence
pour le numéro de séquence TCP, --log-tcp-options
pour les options TCP et --log-ip-options
pour les options IP).
DNAT
dispose de l'option --to-destination adresse:port
pour indiquer la nouvelle adresse IP et/ou le nouveau port de destination. De la même manière, l'action SNAT
dispose de l'option --to-source adresse:port
pour indiquer la nouvelle adresse et/ou le nouveau port source.
REDIRECT
(seulement disponible si le NAT est disponible) a une option --to-ports port(s)
pour indiquer le port ou l'intervalle de ports vers lesquels rediriger les paquets.
iptables
/ip6tables
une fois par règle à créer ; c'est pourquoi on consigne habituellement tous les appels à cette commande dans un fichier de script pour mettre en place la même configuration à chaque redémarrage de la machine. On peut écrire ce script à la main mais il est souvent intéressant de le préparer à l'aide d'un outil de plus haut niveau, tel que fwbuilder
.
#
apt install fwbuilder
fwbuilder
traduire les règles adéquates en fonction des différentes adresses assignées aux objets manipulés.
fwbuilder
peut alors générer un script de configuration du pare-feu selon les règles saisies. Son architecture modulaire lui permet de générer des scripts pour les pare-feu de différents systèmes (iptables
pour Linux, ipf
pour FreeBSD et pf
pour OpenBSD).
up
du fichier /etc/network/interfaces
. Dans l'exemple ci-dessous, ce script s'appelle /usr/local/etc/arrakis.fw
.
Exemple 14.1. Fichier interfaces
avec appel du script de pare-feu
auto eth0 iface eth0 inet static address 192.168.0.1 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 up /usr/local/etc/arrakis.fw