Un firewall simple

La configuration nécessaire

J'ai testé ce qui suit sur une Debian 3.0 Woody, noyau 2.4.18bf, noyau 2.4 standard à l'installation de cette distribution, qui permet pleinement, et sans recompilation, l'utilisation d'IPtables, firewall standard de cette génération.

La démarche décrite ci-dessous est sûrement valable avec les noyaux d'installation standard de toutes les distributions classiques récentes.

Le texte du firewall

Cliquez ici pour le voir.

Une brève explication

La philosophie de ce firewall est simple : on commence par tout ignorer puis on accepte ce qui concerne une connection établie par notre propre machine. Sur la boucle locale (interface lo), par contre, toutes les opérations sont autorisées.

On notera que les paquets indésirables ne sont pas rejetés mais ignorés (cible DROP au lieu de REJECT). Ainsi, la machine qui l'a envoyé ne peut déterminer si son paquet a été refusé, perdu, si le bon protocole est utilisé pour communiquer avec notre machine, si le port qu'elle visait existe ou non sur notre machine, est fermé ou non, etc...

Inutile de trop faciliter la prise de renseignements à la moindre tentative d'intrusion.

Plus de détails

Ce firewall a été conçu dans le but de protéger un machine se connectant à internet par modem ADSL Ethernet. Il laisse aussi la possibilité de partager sa connection au travers d'un réseau local. Au-délà de ces deux fonctions, il sera de peu d'utilité, en particulier si vous utilisez déjà un de ces combinés switch-routeur-firewall-modem ADSL.

Les interfaces : le nom de l'interface de connection côté net est ppp0 ; celui de la première carte Ethernet, à laquelle le modem est relié, eth0. Ce sont donc les premiers éléments à contrôler en cas d'échec avec votre installation, en particulier si vous possédez plusieurs cartes réseaux ou si vous obtenez votre connection d'une autre machine sur un réseau local.

Un biais pour faire des tests facilement : introduire de nouvelles variables en début de fichier par les deux lignes :


ETH=eth0
NET=ppp0

et remplacer, dans la suite du fichier, toute apparition de eth0 par $ETH et de ppp0 par $NET (n'oubliez surtout pas les $ !). Dès lors, changer le nom de vos interfaces dans tout le fichier revient à changer ces deux lignes du début.

Notons enfin que ce firewall refuse les pings (protocole ICMP).

Mise en oeuvre

Toutes les opérations décrites ici doivent être effectuées en tant que root.

Le texte de ce firewall est à enregistrer tel que sous /etc/init.d/firewall (il faut être root pour ce faire). Comme il s'agit d'un script, il ne faut pas oublier de le rendre exécutable, par exemple par la commande chmod 744 /etc/init.d/firewall. Ce qui, au passage, laisse aux utilisateurs autres que root l'accès en lecture seule à ce fichier et le loisir de se rendre compte à quel point ils sont bien protégés.

Le lancement du firewall se fait maintenant par la commande :

# /etc/init.d/firewall start

l'arrêt, le redémarrage et l'interrogation par la même commande mais avec stop, restart ou status.

Quoi qu'il en soit, je vous laisse détailler le texte dudit firewall.

Lancement au démarrage

Voyons mainteant comment n'avoir pas à lancer soi-même le firewall et aussi comment être protégé dès le démarrage de la machine, où, du moins, au moment adéquat au cours du processus de démarrage.

Le fichier étant enregistré à l'emplacement sus-mentionné, reste à créer les liens de lancement dans les dossiers ad hoc, c'est à dire /etc/rc0.d à /etc/rc6.d .

Ce qui se fait, sous Debian par :

# update-rc.d firewall start 20 2 3 4 5 . stop 20 0 1 6 .

ce qui signifie que le firewall sera actif ou démarré à l'ordre 20 aux niveaux d'exécution 2, 3, 4 et 5 et arrêté ou inactif aux niveaux d'exécution 0, 1 et 6. Soyons logiques : en cas de connection au démarrage ou de connection permanente, on prendra soin de démarrer le firewall... avant ! Et de l'arrêter... après la déconnection !

En ce qui me concerne, la connection démarre dès le niveau 2 en 20ième position (existence du lien /etc/rc2.d/S20ppp) et s'arrête au même ordre au niveau d'exécution 6. J'ai donc souhaité que le firewall commence à fonctionner à l'ordre 14, que j'ai choisi arbitrairement, et stoppe à l'ordre 25. J'ai donc tapé :

# update-rc.d firewall start 14 2 3 4 5 . stop 25 0 1 6 .