Le principe de base d'un système de filtrage est de décider si un paquet réseau (souvent un paquet IP) doit traverser le filtre ou s'il doit être bloqué. Cette décision est prise en tenant compte de certaines informations du paquet, comme l'adresse IP source et l'adresse IP destination, le protocole utilisé ou les ports source et destination.
La mise en place d'un système de règles de filtrage est une opération délicate, qui peut vite devenir complexe, mais qui peut être rendue plus simple en opérant avec méthodologie. Voici donc quelques conseils pour vous aider à mettre en place vos règles de filtrage en évitant les pièges courants:
Bloquez par défaut: cette règle qui vaut en général dans la sécurité informatique est particulièrement importante ici.
Utilisez de préférence des actions telles que DROP (littéralement << laisser tomber >> [le paquet]) plutot que REJECT (qui envoie à l'emmeteur un message indiquant que le port n'est pas ouvert): dans la plupart des cas, il vaut mieux faire croire à votre correspondant que la machine ou le service ne répond pas plutot que de lui confirmer que la machine est bien la, mais que le service est bloqué.
Prenez le temps de réfléchir à ce qui est nécessaire, et essayez toujours de restreindre le plus possible le traffic concerné: si vous devez autoriser des requêtes depuis ou vers une machine seulement, inutile d'autoriser ce traffic depuis ou vers n'importe quelle machine.
Prenez soin de logger tout paquet "anormal", par exemple un paquet arrivant sur votre machine mais dont l'adresse de destination n'est pas cohérente. Il s'agira peut-être d'erreurs, mais peut-être pas.
La protection d'une machine peut paraitre relativement simple: il suffit de déterminer ce que la machine est autorisée à faire en tant que client, ce qu'elle fait en tant que serveur et, dans les deux cas, qui sont les correspondants concernés.
Il n'y a pas ici de piège supplémentaire, mais n'oubliez pas de tout bloquer par défaut et de restreindre toujours au maximum les traffics autorisés.
La protection d'un réseau est une opération beaucoup plus délicate, car il y a beaucoup plus de choses à vérifier. Voici quelques conseils qui pourront vous aider dans cette tache particulière:
Faites un plan clair de votre réseau. Précisez l'adresse IP de chaque machine, ce qu'elle est autorisée à faire en tant que client comme en tant que serveur.
Assurez-vous que votre firewall est le seul point de sortie du réseau: il ne servira à rien s'il est possible de le contourner.
Passez par un bastion interne quand cela est possible: cela vous permettra alors de réduire le traffic à autoriser, de limiter les accès directs intérieur vers extérieur, et éventuellement de vérifier la validité des requètes.
Réduisez au maximum les services proposés par le firewall, pour le réseau interne comme pour l'extérieur. Tout service proposé est une faille potentielle qui permettrait d'obtenir un accès au firewall et de le désactiver. Dans l'idéal, le firewall n'assure aucun service lui-même.
Une DMZ (DeMilitarized Zone, ou Zone DéMilitarisée) est un segment physiquement séparé du reste du réseau dans lequel se trouvent des machines sensibles. Il s'agit généralement de serveurs publiquement accessibles, mais d'autres types de machines peuvent se trouver dans une DMZ.
L'intéret d'une telle segmentation est de restreindre au strict nécessaire les accès entre le réseau interne et les serveurs sensibles. Ainsi, si un de ces serveurs venait à être controllé par un intrus, celui-ci ne disposerait que de peu d'accès pour tenter de s'infiltrer sur le réseau interne.
La même logique de découpage peut bien entendu d'appliquer entre différents serveurs sensibles: dans l'idéal, chaque serveur sensible est seul sur son segment, et ne dispose que des accès qui lui sont indispensables vers les autres serveurs, vers le réseau interne et vers l'exterieur.
Actuellement (noyau 2.4.11), un firewall basé sur une installation de GNU/Linux ne peut pas être considéré comme aussi fiable que les meilleures solution << professionelle >> ou qu'une solution basée sur un système de filtrage tel qu' ipfilter: ces solutions utilisent souvent des moteurs de filtrage plus évolués que le noyau Linux, ce qui leur permet d'intercepter et de bloquer un plus grand nombre d'attaques et de paquets anormaux.
Les solutions << hardware >>[1] présentent généralement l'avantage supplémentaire d'être dédiées et épurées de tout ce qui est inutile au travail du firewall. Cela permet d'éviter bon nombre de failles de sécurité. Il est bien entendu possible de faire la même chose avec une installation de GNU/Linux, mais cela demande un temps et des compétences non négligeables.
Certaines solutions proposent en outre une interface de configuration qui peut simplifier la mise en oeuvre des règles de filtrage, ce qui peut contribuer à éviter les erreurs de configuration.
Il ne sera fait ici aucune recommandation pour une solution << professionelle >>dans la mesure où l'auteur travaille pour l'un des concurrents.
L'objectif n'est pas ici d'expliquer la syntaxe des outils de filtrage, mais de vous aider à mettre en place de "bonnes règles", ou du moins des règles pas trop mauvaises...
IPChains et NetFilter proposent une gestion des règles de filtrage par tables, et vous permettent de créer vos propres tables. Cette possibilité vous permet d'y gagner en clarté et en performances. Vous pouvez par exemple définir une table qui correspond aux règles de filtrage des paquets "interieur vers extérieur", puis envoyer à cette règle tous les paquets correspondants.
IPChains est un système de filtrage dit "statique". Il se base uniquement sur le profil du paquet pour déterminer s'il doit passer ou non.
Ce mode de fonctionnement oblige l'administrateur à mettre en place des règles de filtrage généralement beaucoup trop permissives. Par exemple, si une machine doit être autorisée à faire des connexions http, il faudra autoriser les paquets de cette machine (port éphémère) vers n'importe quel serveur (port http) et autoriser les paquets de n'importe quel serveur (port http) vers cette machine (port éphémère).
Il est cependant possible de restreindre un peu les paquets autorisés en ne laissant pas passer les paquets vers cette machine s'ils sont des paquets SYN, c'est à dire des paquets de demande de connexion TCP.
Pour plus d'informations, consultez le IPChains HowTo.
Netfilter est un système de filtrage à états[2]: il tient à jour une table des connexions en cours, et peut ainsi savoir si un paquet qui prétend faire partie d'une connexion existante fait vraiment partie d'une connexion validée par le filtre.
Dans notre exemple précédent, il suffit alors d'autoriser les paquets 'nouvelle connexion' depuis la machine interne (port éphémère) vers n'importe quel serveur, mais en précisant au filtre de maintenir l'état des connexions (option -m state --STATE NEW d' iptables), et d'autoriser tout paquet faisant partie d'une connexion existante (option -m state --STATE ESTABLISHED d'iptables).
[1] | Toute solution de firewall repose en partie sur du logiciel. On appelle << hardware >> une solution intégrant le matériel et le logiciel. |
[2] | Communément appelé "filtrage Stateful". |
Précédent | Sommaire | Suivant |
Assurer une bonne sécurité | Niveau supérieur | Faire des backups |