INSTALLATION D'UN FIREWALL/MASQUERADING SOUS LINUX EN QUELQUES CLICS !

 Le but de cet article n'est pas de fournir une description détaillée du fonctionnement des firewalls , pour cela je ne saurais trop conseiller les lectures très instructives que sont le Firewall-HOWTO et le IP-Masquerade mini HOWTO. Vous pouvez trouver ces documents, entre autres, sur les CD de distribution RedHat ou Mandrake.

Nous allons plutôt tenter de présenter un logiciel pouvant aider grandement à la mise en place d'un firewall sous Linux.

Généralités sur les Firewalls

 Un firewall est un ordinateur ou appareil munie de deux interfaces réseau qui sert à protéger et isoler les réseaux les uns des autres. Le cas le plus courant d'utilisation est de protéger un réseau interne d'une entreprise ou d'un particulier du réseau Internet, mais il peut tout aussi bien servir pour séparer les réseaux de deux entreprises ou deux services.

On s'aperçoit sur ce schéma que le seul moyen pour une machine sur un des réseau, d'accéder à l'autre est de passer par la machine firewall, ce qui permet de contrôler totalement ce qui s'échange entre les deux réseaux en ouvrant ou fermant les "robinets" sur le firewall.

Il existe deux types de firewall :

  1. les firewalls IP ou filtrants.
    Ils fonctionnent au niveau paquet. Ils sont conçus pour contrôler le flux de paquets en fonction de l'origine, la destination, le port et l'information de type de paquet contenue dans chacun de ceux-ci.
  2. les serveurs proxy.
    Ils utilisent un soft particulier pour faire passer les requêtes d'un réseau à l'autre, ils permettent l'accès indirect a Internet depuis l'arrière d'un firewall.

Les serveurs proxy , on peut citer notamment SOCKS , et TIS Firewall Toolkit (FWTK), présentent l'inconvénient d'être plus difficile à configurer et surtout de ne pas être transparent pour l'utilisateur, en effet il faut configurer son navigateur ou son client ftp pour passer par le proxy.

Au contraire, un firewall filtrant permet un accès transparent pour l'utilisateur , tout en assurant une bonne sécurité puisque l'on peut totalement contrôler ce qui passe et vers quoi !

Nous nous concentrerons donc sur ce type de firewall , qui combiné au fonction de masquerading permettent également l'accès indirect à Internet depuis l'arrière d'un firewall.

Généralités sur le Masquerading

 Pour qu'une machine puisse accéder à Internet il faut que le fournisseur d'accès lui fournisse un numéro IP, si vous désirez connecter plusieurs machines il vous faudra obtenir autant de numéros ! Le masquerading aussi appelé Network Address Translation permet de cacher un ensemble de machines ( un réseau ) derrière une passerelle, qui apparaît comme étant le seul système utilisant la connexion Internet.

Ceci à pour double avantage , d'une part un coût moindre car il suffit d'avoir une seule connexion à Internet pour plusieurs machines, d'autre part une sécurité accrue car il n'existe aucun moyen pour quelqu'un de l'extérieur, d'accéder aux machines internes , en effet l'extérieur ne voit qu'une seule machine : le firewall!

Configurer Linux pour pouvoir jouer le rôle d'un firewall filtrant

 Le noyau Linux inclut nativement un logiciel de filtrage de paquets ainsi que la fonction de masquerading ! Il faut juste employer un utilitaire appelé ipfwadm permettant de configurer ces fonctions dans le noyau ! ipfwadm est compris dans les distributions RedHat ou Mandrake , et probablement dans les autres !

Pour utiliser ces fonctions , il vous faudra recompiler votre noyau comme suit :
Allez dans le répertoire /usr/src/linux puis faites make xconfig:
Vous voyez apparaître l'utilitaire de configuration du noyau :

Sélectionnez networking options et dans le menu networking options sélectionnez :

Voila vous pouvez sauver, faite make zImage et make modules pour recompiler le noyau et les modules associés, puis réinstallez le noyau et redémarrez.

Ne perdez pas de vue qu'une machine firewall doit, pour jouer son rôle de protection, posséder deux interfaces réseau. En effet si ce n'est pas le cas, rien 'empêche une station sur le réseau externe d'accéder directement au réseau interne sans passer par le firewall, le rendant ainsi inutile !

Si les 2 interfaces réseau sont des cartes ethernet , il faudra également configurer le noyau pour qu'il puisse gérer les 2 cartes. Ce sujet n'est pas traité ici , se reporter au Multi-Ethernet mini-HOWTO pour plus de précisions.

Cependant une configuration plus modeste et probablement plus répandue peut se limiter à une seule carte ethernet pour le réseau local, et une connexion ppp vers Internet . Dans ce cas il n'y a rien de plus à rajouter à la config Linux que la connexion ppp classique vers le fournisseur d'accès !

Un dernier point est à contrôler : Linux possède un interrupteur général autorisant (ou non) le passage des trame IP d'une interface à l'autre. Si cet interrupteur est à off , aucun passage ne sera autorisé quelque soit la configuration que vous appliquerez ! Il faut donc le mettre à on , quitte à interdire quand même le passage mais de manière plus sélective au moyen de l'utilitaire ipfwadm !

Vous pouvez contrôler l'état de cet interrupteur au moyen de la commande suivante :

cat /proc/sys/net/ipv4/ip_forward
si l'on obtient 0 : pas de passage, 1 : passage autorisé selon la configuration.
On peut changer l'état grâce à la commande :
echo 1 > /proc/sys/net/ipv4/ip_forward
Les distributions RedHat et Mandrake forcent cet interrupteur à off par défaut. Ceci est configurable dans le fichier /etc/sysconfig/network où il suffit de changer FORWARD_IPV4=false par true !

Configurer un firewall filtrant sous Linux

 Une fois notre noyau Linux correctement configuré , il est prêt à jouer son rôle de firewall ! Il suffit pour cela d'appliquer les règles de filtrage avec la commande ipfwadm.

Il n'entre pas dans mes intentions de décrire toutes les possibilités de ipfwadm mieux vaut se reporter au manuel pour cela, je vais donc donner juste quelques exemples d'utilisation tirés du Firewall-HOWTO et du IP-Masquerade mini HOWTO.

# Par defaut INTERDIRE tout passage
ipfwadm -F -p deny
# Vider toutes les regles de filtrage : Maintenant, nous avons un
# firewall absolu. Rien ne peut passer au travers.
ipfwadm -F -f
ipfwadm -I -f
ipfwadm -O -f

# Autoriser l'acces de l'e-mail au serveur
ipfwadm -F -a accept -b -P tcp -S 0.0.0.0/0 1024:65535 -D 192.1.2.10 25

# Autoriser les connexions e-mail vers les serveurs exterieurs
ipfwadm -F -a accept -b -P tcp -S 196.1.2.10 25 -D 0.0.0.0/0 1024:65535

# Autoriser les connexions web vers le serveur web
/sbin/ipfwadm -F -a accept -b -P tcp -S 0.0.0.0/0 1024:65535 -D 196.1.2.11 80

# Autoriser les connexions web vers les serveurs web exterieurs
/sbin/ipfwadm -F -a accept -b -P tcp -S 196.1.2.* 80 -D 0.0.0.0/0 1024:65535

# Autoriser le trafic DNS
/sbin/ipfwadm -F -a accept -b -P udp -S 0.0.0.0/0 53 -D 196.1.2.0/24

# masquer un reseau entier par le firewall
ipfwadm -F -p deny
ipfwadm -F -a m -S 192.168.1.0/24 -D 0.0.0.0/0

# ou bien masquer certaines adresse seulement
ipfwadm -F -p deny
ipfwadm -F -a m -S 192.168.1.2/32 -D 0.0.0.0/0
ipfwadm -F -a m -S 192.168.1.8/32 -D 0.0.0.0/0

# ne pas oublier de inserer les modules necessaire au masquage de
# certain protocole
/sbin/modprobe ip_masq_ftp.o
/sbin/modprobe ip_masq_irc.o
/sbin/modprobe ip_masq_cuseeme.o
Comme vous pouvez le voir , tout ceci n'est pas trivial, spécialement quand on ne le pratique pas tous les jours ! Il serait certainement d'une aide précieuse de pouvoir configurer ceci avec une interface graphique !
Voila qui m'amène à présenter :

Easyfw : le firewall facile !

 Easyfw est une interface graphique à ipfwadm permettant de générer un script de commande ipfwadm. vous pouvez ensuite exécuter ce script à votre guise , ou le faire exécuter par easyfw.

Easyfw permet de créer les règles de filtrage de manière visuelle et plus facilement , mais surtout, il permet d'appliquer des configurations prédéfinies , ce qui permet dans ce cas de configurer un firewall en quelques clics !

Easyfw : utilisation

 En premier lieu, il faut définir quel sont les réseaux externes et internes. if faut donc remplir les champs suivants :

easyfw vous propose une boite de dialogue avec les interfaces réseau existantes :

il vous suffit de cliquer sur la ligne voulue , typiquement ppp0 pour le réseau externe et eth0 pour l'interne ! Bien entendu , vous pouvez également entrer l'adresse réseau manuellement !

Ensuite , vous pouvez choisir parmi les configurations prédéfinies une qui convient à vos besoins, par exemple :

Si vous avez trouvé votre bonheur dans les configurations prédéfinies, vous avez fini ! Il suffit d'appuyer sur appliquer et l'on vous propose alors :

Vous pouvez choisir de ne pas appliquer immédiatement, mais attention dans ce cas aux connexions ppp qui peuvent changer d'adresse IP, votre script généré risque de ne plus être valide lors de la prochaine connexion.

Si aucune des configurations prédéfinies ne vous convient, il vous faudra alors spécifier chaque règle de filtrage. Easyfw vous propose 3 tableaux du type :

Le premier menu spécifie le comportement par défaut lorsque aucune règle ne s'applique, généralement pour une fonction de firewall , il vaut mieux interdire par défaut et rajouter des règles pour autoriser tel adresse ou tel protocole ! Ensuite vous pouvez ajouter, modifier ou détruire une règle de filtrage grâce à la boite de dialogue suivante :

Cette boite vous permet donc de rajouter une règle qui accepte/refuse en paramètrant eventuellement les adresses source/destination, le protocole, et les ports.

On agit de la même manière pour :

Puis on applique exactement de la même manière que pour les configurations prédéfinies.

Vous pouvez facilement créer vos propres configurations prédéfinies en éditant les fichiers de config, la syntaxe en est trés simple ! L'avantage de ces configurations prédéfinies est qu'elles permettent en quelques clics d'installer un firewall sans recréer toutes les règles de filtrage , et ce même si les adresses IP ont changées .

Easyfw : conclusion

 Easyfw est un logiciel écrit en tcl/tk, multilingue, qui je pense peut faciliter grandement la mise en place d'un firewall sous Linux.

On peut le trouver à l'adresse suivante : http://www.linux-kheops.com/pub/easyfw/


Page principale