Un filtre à paquets est un programme qui regarde
l'en-tète des paquets qui passent, et décide du sort du
paquet entier. Il peut décider de DROPer le paquet (p.e.,
faire comme si il n'avait jamais été reçu), ACCEPT le paquet
(p.e. le laisser passer), ou quelque chose de plus compliqué.
Sous Linux, le filtrage de paquets est dans le noyau (comme un
module, ou directement dedans), et il y a un tas de trucs qu'on
peut faire avec les paquets, mais le principe de base qui est de
regarder les en-tètes et de décider du sort du paquet est toujours
la.
quand tu utilises une machine linux pour connecter ton réseau
interne à un autre réseau (on va dire Internet), tu as la
possibilité de permettre certains types de traffic et de prohiber
d'autres. Par exemple, l'en-tète du paquet contient l'adresse de
destination du paquet, donc tu peux empecher les paquets d'aller
vers une certaine partie du réseau externe. Comme autre exemple,
j'utilise netscape pour accèder à l'archive de Dilbert. Il y a des
pubs de doubleclick.net sur la page, et netscape perds mon temps à
les télécharger. Dire au filtre de paquets de ne pas permettre de
paquets de et vers doubleclick.net résout ce problème (il y a de
meilleures façons de faire ça : voir Junkbuster).
Securité:
quand ta machine Linux est la seule chose entre le chaos
d'internet et ton beau réseau bien ordonné, c'est intéressant de
savoir que tu peux limiter ce qui frappe à ta porte. Par exemple,
tu peux permettre à tout de sortir de ton réseau, mais tu peux être
embèté par le bien connu `Ping of Death' venant d'étrangers
malicieux. Comme autre exemple tu ne voudrais pas qu'un étranger
telenette dans ta machine Linux, même si tout tes comptes ont un
mot de passe. Peut être que tu veux (comme la pluspart des gens)
être un observateur sur internet et pas un serveur (voulu ou pas).
Simplement ne laisses personne se connecter, en utilisant le
filtrage de paquets pour rejeter les paquets entrants qui utilisés
pour établir des connections.
Prévention:
Parfois une machine mal configurée sur le reseau local décidera
d'envoyer des paquets au monde extérieur. C'est intéressant de dire
au filtrage de paquets de te dire si quelque chose d'anormal se
produit; peut être veux tu y faire quelque chose ou peut être est
tu curieux par nature.
Les Noyaux Linux ont le filtrage de paquet depuis la série des
1.1. La première génération, basée sur ipfw de BSD, a été portée
par Alan Cox fin 1994. Ca a été amélioré par Jos Vos et d'autres
pour Linux 2.0; le logiciel `ipfwadm' controllait les régles de
filtrage du noyau. A la mi-1998, pour Linux 2.2, j'ai méchamment
retravaillé le noyau, avec l'aide de Michael Neuling, et ai
introduit un logiciel appelé `ipchains'. Finallement, le logiciel
de 4ème génération, `iptables', et une autre réécriture du kernel
sont arrivés a la mi-1999 pour Linux 2.4. C'est cet iptables sur
lequel se concentre ce HOWTO.
Tu as besoin d'un noyau qui a l'infrastructure netfilter en lui
: netfilter est une infrastructure générale dans le noyau sur
laquelle d'autres choses (comme le module iptables) viennent se
greffer. ça veut dire que tu as besoin de Linux 2.3.15 ou plus, et
de répondre `Y' à CONFIG_NETFILTER dans la configuration du
noyau.
L'outil iptables parle au noyau et lui dit quels
paquets filtrer. A moins que tu ne sois programmeur ou bien
vachement curieux c'est comme ça que tu vas controller les
paquets.
iptables
L'outil iptables insère et retire des règles de la
table de filtrage des paquets du noyau. Ca veut dire que quoi que
tu configures, ca sera perdu au reboot; vois Faire des Règles Permanentes pour comment être sûr
que tes règles seront restaurées au prochain démarrage.
iptables est un remplacement ipfwadm
et ipchains : voir Utiliser ipchains et
ipfwadm pour comment éviter de peiner sur iptables si tu
utilises un des ces 2 derniers.
Faire des Règles Permanentes
Ta config de firewall courante est stockée dans le noyau, et
donc sera perdue au redémarrage. Ecrire iptables-save et
iptables-restore est dans ma liste de choses à faire. Quand ils
existeront ils seront cools, je le promets.
En attendant, mets les commandes de configuration nécessaires
dans un script d'initialisation. Sois sûr de faire quelque chose
d'intelligent si une des commandes venait à foirer (habituellement
`exec /sbin/sulogin').