Iptables - Netfilter - Fail2Ban
Le filtrage réseau consiste en l'examen des paquets réseaux et à prendre des décisions sur le traitement à leur appliquer. C'est ce que fait un firewall. Avec un système GNU/Linux, pour configurer des règles de parefeu, il faudra donc simplement utiliser Netfilter à l'aide d'iptables.
Présentation de Netfilter
Netfilter travaille sur des paquets réseaux. Il s'agit de parties des informations transmises. Chacun de ces
paquets comporte en plus des données, des informations ajoutées par les couches réseaux. Ce sont sur ces
informations que s'effectueront les tests de filtrage.
La couche réseau Linux présente plusieurs points d'accès (en anglais hook). Netfilter dispose de fonctions
de rappel (callback). Celles-ci sont des suites d'instructions qui précisent ce qui doit être fait lorsque
survient un événement.
Concrètement, lorsqu'un paquet réseau atteint un de ces points d'accès, il est passé à Netfilter par l'intermédiaire de sa fonction de rappel. Il est alors examiné pour prendre une décision concernant son traitement futur.
Netfilter se comporte comme un automate qui compare le paquet successivement à plusieurs règles. Et selon le résultat du test, le paquet est traité ou transmis au test suivant.
Les tables, chaînes et cibles
Aux points d'accès sont associées des chaînes de traitement. C'est dans celles-ci que sont effectués les tests.
Elles sont regroupées par tables selon le type de traitement.
Les tables sont ajoutées par des modules. Il en existe 3 principales pouvant être utilisées. Voici ci-après leurs noms et la tâche à laquelle elles sont destinées.
Tables principales de Netfilter
| Table | Description |
| filter | Cette table permet de filtrer les paquets. Typiquement ce sera pour les accepter ou non. nat Avec cette table, on peut réaliser des translations d'adresse (ou de ports). Ceci sera notamment utile pour partager une connexion. |
| mangle | Elle sert pour modifier les en-têtes des paquets. On la rencontrera parfois pour marquer des paquets afin que d'autres applications puissent les reconnaître. |
A l'intérieur d'une table, on peut trouver plusieurs chaînes. Ce sont elles qui contiendront les règles à appliquer aux paquets. Ces règles seront évaluées séquentiellement. On trouve deux types de chaînes.
Tout d'abord celles qui sont associées aux différents points d'entrées existants. Un paquet atteignant un de ces points sera envoyé vers la chaîne associée. Ce sont les fonctions de rappel évoquées précédemment qui réalisent cela. Elles effectuent les uns après les autres les tests que contient la chaîne. Ces chaînes sont en nombre fini et ne sont pertinentes que pour certaines tables. Le tableau suivant les liste, en indiquant quelle table a une chaîne de ce type.
Chaînes de Netfilter
| Chaîne | Table | Description |
| PREROUTING | nat, mangle | Par cette chaîne passeront les paquets entrant dans la machine avant routage. |
| INPUT | filter | Cette chaîne traitera les paquets entrants avant qu'ils ne soient passées aux couches supérieures (les applications). |
| FORWARD | filter | Ce sont les paquets uniquement transmis par la machine sans que les applications n'en aient connaissance. |
| OUTPUT | filter, nat, mangle | Cette chaîne sera appelée pour des paquets envoyés par des programmes présents sur la machine. |
| POSTROUTING | nat | Les paquets prêts à être envoyés (soit transmis, soit générés) seront pris en charge par cette chaîne. |
On trouve aussi des chaînes utilisateurs. Elles peuvent librement être créées mais ne seront pas associées à un point d'accès. En fait on ne pourra rentrer dans une de ces chaînes que si une règle d'une des chaînes existantes dirige le paquet vers celle-ci.
Enfin, le dernier élément important est la notion de cible. Il s'agit du traitement que l'on décide d'appliquer au paquet. C'est la cible qui se chargera de faire les opérations nécessaires. En plus de celles prédéfinies, il est possible d'indiquer comme cible une chaîne utilisateur. Cela permet d'imbriquer différents tests et traitements.
Chaque chaîne peut être vue comme un ensemble de tests, chacun ayant pour résultat l'envoi du paquet vers la cible spécifiée si la condition est vérifiée. Si ce n'est pas le cas, on passe à la suivante. En arrivant à la fin d'une des chaînes du tableau précédent, une cible par défaut est utilisée. A la fin d'une chaîne utilisateur, si aucune décision n'a été prise, on revient à la chaîne appelante.
Voici les cibles prédéfinies les plus courantes :
Cibles prédéfinies
| Cible | Description |
| ACCEPT | Les paquets envoyés vers cette cible seront tout simplement acceptés et pourront poursuivre leur cheminement au travers des couches réseaux. |
| DROP | Cette cible permet de jeter des paquets qui seront donc ignorés. |
| REJECT | Permet d'envoyer une réponse à l'émetteur pour lui signaler que son paquet a été refusé |
| LOG | Demande au noyau d'enregistrer des informations sur le paquet courant. |
| MASQUERADE | Cible valable uniquement dans la chaîne POSTROUTING de la table nat. Elle change l'adresse IP de l'émetteur par celle courante de la machine pour l'interface spécifiée. |
| SNAT | Également valable pour la chaîne POSTROUTING de la table nat seulement. Elle modifie aussi la valeur de l'adresse IP de l'émetteur en la remplaçant par la valeur fixe spécifiée |
| DNAT | Valable uniquement pour les chaînes PREROUTING et OUTPUT de la table nat. Elle modifie la valeur de l'adresse IP du destinataire en la remplaçant par la valeur fixe spécifiée |
| RETURN | Utile dans les chaînes utilisateurs. Cette cible permet de revenir à la chaîne appelante. |
Présentation d'iptables
Iptables est l'outil qui est fourni pour agir sur tous les concepts vus précédemment et donc pour modifier les règles de filtrage.
La première option à connaître est -t qui permet de spécifier le nom de la table sur laquelle porteront les autres paramètres. Si cette option n'est pas spécifiée, ce sera par défaut la table filter.
Il faut ensuite indiquer une commande pour indiquer par exemple qu'une nouvelle règle doit être ajoutée dans la chaîne spécifiée (- A). Ci-après la liste des options les plus courantes pour spécifier une commande. Une seule à la fois peut être présente, et toutes devront être suivies du nom de la chaîne à prendre en compte.
options d'iptable
exemples
Fail2Ban
Fail2ban est un service qui va aller lire les logs d’autres services comme par exemple ceux d’apache, de ssh, ou FTP et bien d’autre à la recherche de tentative d’authentification infructueuses répétée. Une fois que fail2ban va détecter une tentative d’intrusion, il va ajouter une règle dans iptables pour bannir l’adresse IP de la source pendant une période définie.
Fail2ban ne doit pas être considéré comme un outil de sécurisation absolu d'un service. Ses objectifs sont d'éviter de surcharger les logs du système avec des milliers de tentatives de connexion et de limiter la portée des attaques répétées provenant d'une même machine
Un serveur avec un accès SSH sur le port standard, par exemple, recevra très rapidement des centaines, voire des milliers de tentatives de connexions provenant de différentes machines. Ce sont généralement des attaques par force brute lancées par des robots.
Fail2ban en analysant les logs permet de bannir les IP au bout d'un certain nombre de tentatives ce qui limitera le remplissage des logs et l'utilisation de la bande passante.
Ceci va également rendre les attaques par force brute ou par dictionnaire beaucoup plus difficiles mais ce n'est pas une sécurité absolue contre ce type d'attaque. Mais cela n'améliore en rien la sécurité du service concerné. Si l'accès SSH n'est pas suffisamment sécurisé (mot de passe faible par exemple) fail2ban n'empêchera pas un attaquant d'arriver à ses fins.
Autrement dit, utilisez votre temps de travail pour analyser vos configurations et sécuriser vos services plutôt que d'installer et paramétrer des outils d'analyse de logs plus ou moins gourmands en ressources système.



No comments to display
No comments to display