Flux rss
Collection CommentÇaMarche.net

[Linux] Installation d'un Firewall

Bookmark Ajouter aux favoris / Partager
Dernière mise à jour le 11 mai 2009 à 13:52 par dyllan
Publié par kilian

Installation d'un Firewall sous Linux




Avant-propos


Ne vous risquez pas à essayer ce que je décris ici si vous avez des tâches importantes en cours. Certaines commandes décrites ici pourraient bloquer certaines applications sur votre machine le temps de votre session. Vous pourriez ne pas savoir tout de suite comment revenir en arrière. Également, si vous avez déjà un firewall sur votre machine, les scripts ci-dessous pourraient dérégler les règles de firewall que vous avez déjà établies. Donc prudence...)
Idem, si vous avez un réseau local chez vous, certains scripts ici peuvent en bloquer les connexions.
Le script évoqué ici concerne un poste unique, non connecté à un réseau local.

Il existe plusieurs façons de configurer un pare-feu sous Linux.

II - Iptables


Il existe un outil intégré la plupart du temps dans le noyau Linux, c'est iptables (pour les noyaux 2.4 et 2.6).
Son administration s'effectue en ligne de commande et en root.

II.1 - Introduction


Il faut d'abord que vous compreniez le concept des tables et des chaînes sous iptables. Imaginez que vous ayez trois tables dans votre salle à manger. Sur chacune d'entre elles, vous avez des cartes qui concernent les routes de vos connexions.
A partir de maintenant, c'est vous qui déciderez des chemins qu'elles devront emprunter. Voyons tout d'abord une description de chaque table :
  • la table NAT. Elle ne nous concerne pas. Elle sert pour le routage (masquerading), c'est en quelque sorte une carte qui permet de définir des déviations pour certaines connexions, de leur dire quel chemin prendre, changer leur destination ou leur provenance. Elle sert, par exemple, pour le très populaire "partage de connexion Internet".
  • la table MANGLE. Elle est rarement employée car elle concerne des fonctions avancées du firewall. Globalement, on dit que cette table concerne la modification des paquets. Elle permet de "marquer" les paquets ou modifier leur en-tête dans le but d'un routage avancé entre plusieurs interfaces, de gestion de bande passante et/ou par services (style ToS, QoS ou encore iproute).
  • la table FILTER. C'est celle qui nous intéresse. Elle permet de dire qui peut passer et qui ne passera pas dans tel ou tel coin.


A chaque fois que nous utiliserons un script iptables ici, nous invoquerons cette table de cette manière :
iptables -t filter

Avec -t comme table. Filter est la table utilisée par défaut, si vous ne précisez rien en invoquant iptables. Vous pouvez donc tout simplement écrire "iptables" tout court si ça vous arrange, mais au moins ça peut vous faire prendre de bonnes habitudes et vous éviter des confusions si vous utilisez les autres tables à l'avenir.

Puis viennent les chaînes. C'est en quelque sorte les grands axes de votre carte de la table filter. Il y en a trois :

La chaîne INPUT. C'est le grand axe des connexions entrantes sur votre machine, celles qui proviennent de l'extérieur.

La chaîne OUTPUT. C'est l'axe des connexions sortantes et générées sur votre machine. Tout simplement, lorsque vous vous connectez sur un site Web, la connexion commence par une requête sortant de chez vous pour aller sur le site Web.

La chaîne FORWARD, pour les connexions qui seront routées, c'est-à-dire les connexions que vous avez demandé de dévier.

Lorsque l'on invoque telle ou telle chaîne, on procède avec ce modèle :
iptables -t <table> -Action <chaîne>

La table, c'est filter, l'action peut être -A , -I , -P ou -D (plus d'autres spécifiques dont on ne parlera pas), ce sont des choses que nous verrons plus loin. Et la chaîne, vous avez le choix entre les trois au-dessus.

Ex :
iptables -t filter -A INPUT (règle à définir)

II.2 - P comme Policy : Politique


Pour commencer, on établit une "politique" générale pour les trois chaînes de la table "filter" (la table qui filtre les paquets).
La politique, c'est la règle majoritaire, la règle par défaut pour une connexion qui concerne telle chaîne.
=> Si le Firewall ne trouve pas de règle pour cette connexion, alors il s'en remet à la politique de cette chaîne.

Pour configurer une politique, on utilise cette syntaxe :
iptables -t <table> -P <chaine> <politique>

(NB : La configuration qui suit ne vous concerne que si vous vous connectez à Internet via une interface ppp0. Renseignez-vous bien sur votre propre configuration. Vous pouvez consulter vos interfaces et leur configuration avec la commande /sbin/ifconfig.)

Tout d'abord, pour faire un firewall basique qui bloque uniquement les connexions entrantes. On construit les politiques des trois chaînes de la table filter :
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD ACCEPT
iptables -t filter -P OUTPUT ACCEPT


Les deux politiques que vous devez connaître sont "ACCEPT" et "DROP".
Pour ACCEPT : j'accepte les connexions ; pour DROP : je ne laisse pas entrer les connexions.

Ici, les connexions sortantes ne seront pas filtrées. Ce n'est donc pas une configuration ultra-sécurisée mais pour bloquer les connexions entrantes. C'est déjà mieux que rien.

II.3 - A comme Append : Ajouter


Ensuite, nous allons laisser les applications qui utilisent la boucle locale s'exécuter sans être bloquées. Car certaines applications utilisent les connexions TCP sur la boucle locale (127.0.0.1) pour s'exécuter. On ajoute donc une règle pour la chaîne INPUT pour lui dire que les connexions en provenance de l'adresse de boucle locale
et entrant vers l'interface locale seront acceptées :
iptables -t filter -A INPUT -s 127.0.0.1 -i lo -j ACCEPT


Ici j'utilise -A pour signifier à iptables que je vais Ajouter une nouvelle règle.
Pour faire une brève traduction, on va décomposer cette ligne.

"-A INPUT" signifie qu'on va ajouter une règle dans la chaîne input. -s 127.0.0.1 signifie que cette nouvelle règle concerne les connexions en provenance de la boucle locale. -i lo pour dire que la règle concerne les connexions arrivant (-i interface entrante) vers l'interface locale désignée par "lo". (Dans les autres interfaces que lo vous avez aussi eth0 pour l'interface ethernet, ppp0 pour l'interface d'un modem (internet) etc... eth0 et ppp0 peuvent aussi bien être eth1 ou ppp1 selon le nombre d'interfaces ethernet ou ppp que vous possédez). Et enfin -j ACCEPT pour préciser que la règle est d'accepter ces connexions.

Avec ce que vous avez là, vous risquez ne pas pouvoir surfer sur Internet car vous pouvez tenter d'accéder à un site Web, s'il vous répond, votre firewall le bloquera. On utilise pour cela un module appelé "state" qui comporte plusieurs options notamment celles qui nous intéresse : ESTABLISHED et RELATED. ESTABLISHED signifie grossièrement que la connexion analysée par le firewall a été vue dans l'autre sens précédemment.

Par exemple, j'envoie une requête vers [www.commentcamarche.net] pour consulter la page d'accueil.
Le firewall a vu passer une requête partant de chez moi pour aller vers CCM. CCM m'envoie une réponse. Ici, le firewall constatera que c'est moi qui ait commencé cette connexion, il considérera alors cette connexion comme "ESTABLISHED". "RELATED" concerne de nouvelles connexions mais qui ont été initialisées par une connexion déjà existante et établie. Seul ce genre de connexions sera autorisé, ça nous donne donc :
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


Pour traduire ces nouveaux éléments (je ne reviens pas sur ce que j'ai expliqué plus haut), ça nous donne :
-m state=> On charge le module state.--state ESTABLISHED,RELATED=> de ce module state, on spécifie les états ESTABLISHED et RELATED, donc seules les connexions de ce genre seront concernées par la règle.

Je récapitule donc l'ensemble des commandes pour écrire notre firewall :
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD ACCEPT
iptables -t filter -P OUTPUT ACCEPT

iptables -t filter -A INPUT -s 127.0.0.1 -i lo -j ACCEPT
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

II.4 - I comme Insert : Insérer


Cette action est semblable à l'action -A (Append) vue précédemment, à ceci près qu'il s'agit là "d'insérer" une règle dans la table de filtrage. Il faut savoir que les règles de filtrage sont parcourues dans un certain ordre lorsqu'un paquet est examiné. Attention : l'ordre des règles peut totalement changer le comportement du firewall !
Une règle définie avec -A va être simplement ajoutée à la suite des règles déjà établies dans la chaîne concernée. Les règles définies avant seront donc prioritaires (si le paquet examiné correspond au descriptif d'une règle, les règles suivantes ne seront alors pas utilisées).
Une règle "insérée" avec -I va se placer au tout début des règles de la chaîne au lieu de s'ajouter après. Cette règle va donc logiquement déplacer toutes les autres "vers le bas". Elle sera prioritaire sur toutes les autres.
Cette action est généralement utilisée dans des cas précis, par exemple si on doit soudainement bloquer ou autoriser un service, et ce, malgré les règles du firewall définies au départ.
On peut également insérer une règle à un emplacement précis (voir la page de manuel) avec -I.

II.5 - L comme List : Lister


Pour lister, consulter les règles de votre firewall :
iptales -t filter -L

Regardons ce bilan. Avec ça, vous avez un petit firewall basique pour la plupart des configurations monopostes avec modem ADSL connecté par USB par exemple (peut-être même pour les modems bas débits). Je dis firewall basique car, je le répète, il ne pose aucune restriction pour les connexions sortantes. De plus, il n'est pas adapté si vous avez un serveur ou une application à l'écoute sur un port. Par exemple, si vous avez un serveur http, il vous faudra probablement débloquer le port 80.
Pour ouvrir le port tcp 80 aux connexions entrantes:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

II.6 - D comme Delete : Effacer


On vient de voir que vous pouviez faire un bilan en utilisant l'argument -L. Il se peut que vous vouliez effacer une règle.
Par exemple, je n'ai plus besoin de mon serveur Http pour aujourd'hui, je vais masquer le port 80, puisque je n'ai plus d'application à l'écoute sur ce port. Donc, je vais effacer la règle d'autorisation de connexion sur le port TCP 80. C'est la politique de ma chaîne INPUT qui prendra le relais avec cette règle par défaut que nous avons définie plus haut => DROP.

On utilisera alors l'argument -D avec cette syntaxe :
iptables -t <table> -D <chaîne> <n° de la règle à effacer>

Alors on va devoir trouver le n° de notre règle. Pour celà, on utilise la commande "iptables -t filter -L" qui nous donne :
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     all  --  localhost.localdomain  anywhere
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

On y retrouve nos politiques et les règles des chaînes. Pour la chaîne INPUT, ma première règle, c'est d'accepter tout ce qui vient de "partout" tant que la connexion est "ESTABLISHED" ou "RELATED".
En 2, j'ai "Accepter les connexions en provenance de localhost".
Et en 3, j'ai "Accepter toutes les connexions sur le port "www", c'est-à-dire le port 80.

C'est donc la règle 3 de la chaîne INPUT qui nous concerne. Pour la supprimer on tape :
iptables -t filter -D INPUT 3


Votre Firewall ne trouvera plus de règle pour les connexions vers le port TCP 80, il s'en remettra ainsi à la politique d'INPUT qui est DROP, donc les connexions seront refusées.

Et voilà :-)

II.7 - F comme Flush : Nettoyer


Si vous voulez remettre à zéro votre firewall et lui demander de ne bloquer aucune connexion (configuration par défaut généralement) il faut taper :
# Pour vider les règles de toute la table "filter"
iptables -t filter -F

# Pour que les politiques acceptent les connexions
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

Cela rendra votre système vulnérable bien évidemment, mais rendra la configuration par défaut si vous n'aviez appliqué aucun firewall avant de tester ces scripts.

Sources et documents largement plus complets :

III - Les alternatives


Il existe beaucoup de logiciels qui pourront faciliter l'administration de votre firewall, bien souvent (si ce n'est toujours ?) des front-end pour iptables, c'est-à-dire des interfaces qui rendent plus facile la configuration d'iptables.
(Sources : quelques discussions ça et là dans le forum GNU/Linux :-)
Installation firewall de checkpoint Est-ce qu'il est aisé d'installé Firewall-1 de chexkpoint et quel livre pouvez-vous me conseillé pour m'aider dans l'installation ? www.commentcamarche.net/forum/affich-57460-installation-firewall-de-checkpoint
Firewall sur Windows Vista (Résolu) Bonjour, D'après vous, le firewall d'origine sur est il correct, ou faut-il en installer un autre, comme par exemple ? www.commentcamarche.net/forum/affich-5929540-firewall-sur-windows-vista
Ralentissement PC du a firewall d'orange (Résolu) Bonjour, je suis utilisateur de windows vista et j'ai un problème de ralentissement très très fréquent de mon ordinateur depuis que j'ai innstallé Firewall dorange, je voulais savoir comment remédier à ce problème sans désinstaller mon antivirus merci www.commentcamarche.net/forum/affich-7377859-ralentissement-pc-du-a-firewall-d-orange
Installer un firewall sous Ubuntu (Firestarter)Avec l'installation par défaut, Ubuntu n'a pas le moindre port ouvert, ce qui est très sûr. Le risque est donc très faible. Vous ne devriez donc pas avoir besoin d'un firewall. Si toutefois vous en voulez un, vous pouvez utiliser Firestarter. Il... www.commentcamarche.net/faq/sujet-5440-installer-un-firewall-sous-ubuntu-firestarter
[Firewall] Installation et configuration de ZoneAlarmPourquoi installer un Pare-Feu ? Lorsqu'un ordinateur est connecté à Internet (ou à n'importe quel réseau), celui-ci est une cible potentielle pour des attaques. De nombreux paquets de données sont envoyés au hasard par des pirates informatiques... www.commentcamarche.net/faq/sujet-2612-firewall-installation-et-configuration-de-zonealarm
Installer un firewall sous Ubuntu (gufw)Linux possède un firewall puissant (netfilter) qu'on peut configurer avec un outil en ligne de commande (iptables). Mais ce n'est pas très intuitif. Ubuntu 8.10 (Intrepid Ibex) est fourni avec un outil simplifié de configuration du firewall, gufw... www.commentcamarche.net/faq/sujet-14400-installer-un-firewall-sous-ubuntu-gufw
Pb d'installation antivirus firewall orangeBonjour, Bonjour, j'ai un probleme je vien de macheter un pc portable et je voudrai installer aussi l'antivirus firewall d'orange mais sa me dit la clé n'est pas la bonne...Aidez moi ces bien possible d'installer l'anti virus sur mon ordi de bureau et... www.commentcamarche.net/forum/affich-7506869-pb-d-installation-antivirus-firewall-orange
Desinstaller firewall orangeBonjour,pour install kaspersky anti virus firewall orange sur xp resiste a ccleaner et desinstal orange a l aide merci www.commentcamarche.net/forum/affich-5959151-desinstaller-firewall-orange
Comment savoir si on est équipé d'un firewallBonjour, Je cherche à installer un firewall sur mon ordinateur, mais j'ai lu que certains messages ici parlaient de "désactiver le pare-feu de Windows". J'ai Windows XP édition familiale, et si ce pack contient déjà un pare-feu, je n'ai pas besoin... www.commentcamarche.net/forum/affich-2341366-comment-savoir-si-on-est-equipe-d-un-firewall
Télécharger PC Tools Firewall PlusPC Tools Firewall Plus est un pare-feu personnel gratuit qui protège votre ordinateur en empêchant les utilisateurs non autorisés de s'y connecter. En surveillant les applications se connectant au réseau, Firewall Plus est capable de bloquer les... www.commentcamarche.net/telecharger/telecharger-34055293-pc-tools-firewall-plus
Télécharger Windows InstallerMicrosoft Windows Installer est un service d'installation et de configuration d'application. Il permet de gérer les applications comportant l'extension MSI. WindowsInstaller-KB893803-v2-x86.exe est le pack pour l'installation ou la mise à jour de... www.commentcamarche.net/telecharger/telecharger-223-windows-installer
Télécharger Comodo FireWallUn pare-feu est indispensable Afin de vous protéger des intrusions et des connexions non autorisées à Internet par vos logiciels. Voici la dernière version de Comodo Firewall Pro (V 3.0.22.349), un pare-feu personnel gratuit proposant la plupart des... www.commentcamarche.net/telecharger/telecharger-34055041-comodo-firewall
Installer un firewall avec ZoneAlarmIntérêt d'un firewall Lorsqu'un ordinateur est connecté à Internet (ou à n'importe quel réseau), celui-ci est une cible potentielle pour des attaques. De nombreux paquets de données sont envoyés au hasard par des hackers afin de repérer des... www.commentcamarche.net/contents/pratique/zonealarm.php3
Installer le firewall Tiny Personal FirewallIntérêt d'un firewall Lorsqu'un ordinateur est connecté à Internet (ou à n'importe quel réseau), celui-ci est une cible potentielle pour des attaques. De nombreux paquets de données sont envoyés au hasard par des hackers afin de repérer des... www.commentcamarche.net/contents/pratique/tinyfirewall.php3
Linux - L'installation de logicielsLes différents types d'archives Basiquement il existe plusieurs façons de récupérer une application fonctionnant sous Linux : Sous forme de paquetage RPM. Il s'agit d'un fichier portant l'extension .rpm permettant une installation automatique,... www.commentcamarche.net/contents/tutlinux/linrpm.php3