Dernière mise à jour : 14/04/2004
De la même manière que je vous avait créé une page sur la méthode pour installer un firewall/routeur sous un Linux à base de kernel 2.2, voici venue la mise à jour vers le kernel 2.4 avec iptables. Voici donc la quatrième édition qui fête ainsi ses 3 ans, j'y ai inclu le choix entre deux scripts, celui d'origine (très facile à mettre en place) et un nouveau script en mode parano qui demande plus de compétences.. La dernière révision de cette page corrige des problèmes de paquets bloqués sur les ports bittorrent et le protocole ipv6 (second script).
Il vous faudra pour commencer vous assurer que vous possédez les outils nécessaires sous votre Linux. Le mieux est de dédier une machine qui deviendra routeur/firewall. Le routeur a pour but de router (délire non ?!?) des paquets IP à travers le réseau vers une interface interne (second réseau interne) ou externe (internet, modem). Personnellement, pour des raisons financières, j'ai juste utilisé ma machine principale qui pilote le modem externe afin de router les paquets vers mon portable, c'est donc cette machine qui contient le firewall. Le firewall sert à vous protéger (mais aussi votre réseau) du monde extérieur et de bloquer des appels non solicités (et voyant mes logs, je peux vous dire que cela sert).
Dans la théorie, vous devez donc préparer votre kernel pour avoir les bonnes options, vous assurez que vous avez iptables (du projet netfilter) installé et il ne reste alors plus qu'à faire un script que nous appellerons firewall. Pour IPtables, vous pouvez soit le récupérer du lien ci-dessous mais je préconise plutôt d'utiliser la version fournie avec votre distribution, il ne reste alors plus que la partie kernel à régler.
- Netfilter/IPtables - Site Officiel du projet
Allez dans les sources de votre kernel favori et faîtes un make menuconfig. Allez ensuite dans la partie Network et activez les options suivantes :
[*] Packet socket: mmapped IO
[*] Network packet filtering (replaces ipchains)
[*] Socket Filtering
<*> Unix domain sockets
[*] TCP/IP networking
[*] IP: multicasting
[*] IP: broadcast GRE over IP
[*] IP: multicast routing
[*] IP: PIM-SM version 1 support
[*] IP: PIM-SM version 2 support
[*] IP: TCP Explicit Congestion Notification support
Allez ensuite dans le sous-menu Netfilter et passez tout en module sauf les deux dernières options. Regardez la capture d'écran ci-dessous si vous avez un doute.
Il ne reste ensuite qu'à recompiler votre kernel. Vous pouvez pour cela suivre la procédure disponible dans la section système et intitulée : kernel 2.4.x. Elle devrait vous donner une idée assez précide de l'affaire. Redémarrez ensuite votre machine sur le nouveau kernel. Vérifiez ensuite que vous possédez la comande iptables en faisant : iptables -v. Dans le cas contraire, téléchargez le ou installez le à partir de vos CDs Linux.
Le script ci-dessous vous donne les bases pour démarrer votre routeur/firewall de façon simple, les ports http (80), ftp (20,21) et quake (27960) sont commentés pour plus de sécurité, si vous en avez besoin, décommentez les.
Dans le script qui va suivre, j'ai configuré un petit firewall qui bloque tout accès depuis l'extérieur lorsqu'il n'est pas solicité. L'interface ${INTERFACE_LOCALE} nomme ma carte du réseau interne qui communique sur un réseau de type 192.168.0.x et de netmask 255.255.255.0. J'utilise également sur la même machine l'interface ${INTERFACE_INTERNET} qui est un modem se connectant de temps en temps à internet. On va dire que ma machine possédant le modem tourne en 192.168.0.254 (ce qui est normal pour un routeur). La configuration décrite ici bloque tout accès extérieur, autorise ensuite la carte réseau et forwarde les paquets du modem vers le réseau interne. Téléchargez ensuite le script suivant que vous placerez dans : vi /etc/init.d/firewall.
Le second script requiert une bonne compréhension du réseau et du concept de paquets entrants et sortants. J'ai tenté de commenter au mieux possible ce second exemple mais je vous conseille la lecture de quelques ouvrages réseau si des difficultés surviennent. Je ne compte pas fournir d'aide sur ce script. Etant donné que votre /var/log/messages enregistrera tous les paquets bloqués, il vous sera facile de diagnostiquer le problème. Ainsi pour diagnostiquer un port que vous essayez d'accéder, en cas d'échec, utilisez : tcpdump -i eth0 port 'numero_de_port'. Après ce petit avertissement, vous pouvez télécharger le second script. Dans ce script, j'ai ouvert les ports ssh, smtp, http, https, imap-ssl et bittorrent.
Voilà , vous avez à présent un script en état de marche, un simple /etc/init.d/firewall start devrait vous sécuriser votre machine. Vous n'êtes bien sûr pas à l'abri d'attaques potentielles sur iptables ou sur les logiciels dont les ports sont ouverts (apache, ftp, etc ...). Il vous appartient donc de vérifier la sécurité de ceux-ci à intervalles régulières.
La prochaine mise à jour de cette page incluera des informations sur l'ipv6.