Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédente | |||
999-archives:132netfilter-plus:40-file2ban [le 30/05/2025 à 13:58] – supprimée - modification externe (Date inconnue) 127.0.0.1 | 999-archives:132netfilter-plus:40-file2ban [le 30/05/2025 à 13:58] (Version actuelle) – ↷ Page déplacée de 132netfilter-plus:40-file2ban à 999-archives:132netfilter-plus:40-file2ban prof | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Réaction dynamique : fail2ban ====== | ||
+ | Nous allons continuer avec '' | ||
+ | Nous considérons que le port 22 ne peut être modifié, ce qui nous rapprochera du cas d' | ||
+ | * détecter une action malveillante ; | ||
+ | * agir dynamiquement sur le pare-feu en conséquence. | ||
+ | ===== Fail2Ban ===== | ||
+ | Cet outil répond aux besoins. Son principe est le suivant : | ||
+ | * il analyse certains fichiers de logs ; | ||
+ | * lorsqu' | ||
+ | Le tout est bien entendu configurable à souhait, ce qui en fait un outil pas si évident que ça à mettre en œuvre. La configuration par défaut peut cependant répondre à la plupart des cas, mais mieux vaut avoir bien compris le fonctionnement d cet outil. | ||
+ | |||
+ | Tout ce qui va suivre s' | ||
+ | ==== Les prisons ==== | ||
+ | Les « prisons » sont en fait des tables iptables qui seront ajoutées pour chaque protocole que l'on souhaite protéger. Fail2ban ajoutera dans ces tables des règles de bannissement de façon dynamique. | ||
+ | |||
+ | Il existe un fichier ''/ | ||
+ | < | ||
+ | [ssh] | ||
+ | <span class=" | ||
+ | port = ssh | ||
+ | <span class=" | ||
+ | <span class=" | ||
+ | <span class=" | ||
+ | </ | ||
+ | |||
+ | Le filtre est activé, il utilise un filtre nommé '' | ||
+ | |||
+ | Lorsque '' | ||
+ | * créer une table nommée '' | ||
+ | * y ajouter la règle '' | ||
+ | * insérer en tête de '' | ||
+ | Ce qui correspondrait à : | ||
+ | < | ||
+ | iptables -N fail2ban-ssh | ||
+ | iptables -A fail2ban-ssh -j RETURN | ||
+ | iptables -I INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh | ||
+ | </ | ||
+ | |||
+ | Lorsqu' | ||
+ | < | ||
+ | iptable -A fail2ban-ssh -s 192.168.10.34/ | ||
+ | </ | ||
+ | Il supprimera cette règle au bout d'un « certain temps » dont nous rechercherons la valeur plus tard. | ||
+ | ==== jail.conf ==== | ||
+ | Il n'y a pas que des prisons définies dans ce fichier. Nous y trouvons aussi une section '' | ||
+ | < | ||
+ | Il y a possibilité de dire à '' | ||
+ | < | ||
+ | Par défaut, un bannissement ne durera que 600 secondes (ce qui est peu) | ||
+ | < | ||
+ | C'est l' | ||
+ | < | ||
+ | trois fois (par défaut) pour que le bannissement ait lieu. Nous avons vu que cette valeur a été portée à 6 pour '' | ||
+ | < | ||
+ | L' | ||
+ | |||
+ | Il y a d' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | D' | ||
+ | |||
+ | Ces paramètres par défaut peuvent être surchargés dans chaque définition de prison. Il est tout à fait déconseillé d'agir sur le fichier '' | ||
+ | * copier '' | ||
+ | * modifier selon ses besoins le '' | ||
+ | Dans Debian/ | ||
+ | |||
+ | ==== Les filtres ==== | ||
+ | il y a un dossier ''/ | ||
+ | < | ||
+ | # Fail2Ban filter for openssh | ||
+ | # | ||
+ | |||
+ | [INCLUDES] | ||
+ | |||
+ | # Read common prefixes. If any customizations available -- read them from | ||
+ | # common.local | ||
+ | before = common.conf | ||
+ | |||
+ | |||
+ | [Definition] | ||
+ | |||
+ | _daemon = sshd | ||
+ | |||
+ | failregex = ^%(__prefix_line)s(?: | ||
+ | ^%(__prefix_line)s(?: | ||
+ | ^%(__prefix_line)sFailed \S+ for .*? from < | ||
+ | ^%(__prefix_line)sROOT LOGIN REFUSED.* FROM < | ||
+ | ^%(__prefix_line)s[iI](?: | ||
+ | ^%(__prefix_line)sUser .+ from < | ||
+ | ^%(__prefix_line)sUser .+ from < | ||
+ | ^%(__prefix_line)sUser .+ from < | ||
+ | ^%(__prefix_line)srefused connect from \S+ \(< | ||
+ | ^%(__prefix_line)sUser .+ from < | ||
+ | ^%(__prefix_line)sUser .+ from < | ||
+ | |||
+ | ignoreregex = | ||
+ | |||
+ | # DEV Notes: | ||
+ | # | ||
+ | # " | ||
+ | # it is coming before use of < | ||
+ | # and later catch-all' | ||
+ | # | ||
+ | # | ||
+ | # Author: Cyril Jaquier, Yaroslav Halchenko, Petr Voralek, Daniel Black | ||
+ | </ | ||
+ | Il s'agit principalement d'une liste d' | ||
+ | |||
+ | Notons que ce filtre en inclut un autre qui est lu **avant** et qui s' | ||
+ | |||
+ | Vous le voyez, plus on fouille, plus on découvre que c'est compliqué, et ce n'est pas fini... | ||
+ | ==== Les actions ==== | ||
+ | De même que pour les filtres, nous avons un ''/ | ||
+ | < | ||
+ | # Fail2Ban configuration file | ||
+ | # | ||
+ | # Author: Cyril Jaquier | ||
+ | # Modified by Yaroslav Halchenko for multiport banning | ||
+ | # | ||
+ | |||
+ | [INCLUDES] | ||
+ | |||
+ | <span class=" | ||
+ | <span class=" | ||
+ | |||
+ | [Definition] | ||
+ | |||
+ | # Option: | ||
+ | # Notes.: | ||
+ | # Values: | ||
+ | # | ||
+ | <span class=" | ||
+ | iptables -A fail2ban-& | ||
+ | iptables -I & | ||
+ | |||
+ | # Option: | ||
+ | # Notes.: | ||
+ | # Values: | ||
+ | # | ||
+ | <span class=" | ||
+ | | ||
+ | | ||
+ | |||
+ | # Option: | ||
+ | # Notes.: | ||
+ | # Values: | ||
+ | # | ||
+ | actioncheck = iptables -n -L & | ||
+ | |||
+ | # Option: | ||
+ | # Notes.: | ||
+ | # command is executed with Fail2Ban user rights. | ||
+ | # Tags: See jail.conf(5) man page | ||
+ | # Values: | ||
+ | # | ||
+ | <span class=" | ||
+ | |||
+ | # Option: | ||
+ | # Notes.: | ||
+ | # command is executed with Fail2Ban user rights. | ||
+ | # Tags: See jail.conf(5) man page | ||
+ | # Values: | ||
+ | # | ||
+ | <span class=" | ||
+ | |||
+ | [Init] | ||
+ | |||
+ | # Default name of the chain | ||
+ | # | ||
+ | name = default | ||
+ | |||
+ | # Option: | ||
+ | # Notes.: | ||
+ | # Values: | ||
+ | # | ||
+ | port = ssh | ||
+ | |||
+ | # Option: | ||
+ | # Notes.: | ||
+ | # Values: | ||
+ | # | ||
+ | protocol = tcp | ||
+ | |||
+ | # Option: | ||
+ | # Notes specifies the iptables chain to which the fail2ban rules should be | ||
+ | # added | ||
+ | # Values: | ||
+ | chain = INPUT | ||
+ | |||
+ | </ | ||
+ | Nous trouvons : | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | Pour savoir ce qu'est ce ''< | ||
+ | < | ||
+ | # Fail2Ban configuration file | ||
+ | # | ||
+ | # Author: Daniel Black | ||
+ | # | ||
+ | # This is a included configuration file and includes the defination for the blocktype | ||
+ | # used in all iptables based actions by default. | ||
+ | # | ||
+ | # The user can override the default in iptables-blocktype.local | ||
+ | |||
+ | [INCLUDES] | ||
+ | |||
+ | after = iptables-blocktype.local | ||
+ | |||
+ | [Init] | ||
+ | |||
+ | # Option: | ||
+ | # Note: This is what the action does with rules. This can be any jump target | ||
+ | # as per the iptables man page (section 8). Common values are DROP | ||
+ | # REJECT, REJECT --reject-with icmp-port-unreachable | ||
+ | # Values: | ||
+ | <span class=" | ||
+ | </ | ||
+ | Comme nous pouvons le constater, nous avons ici un formidable jeu de piste. | ||
+ | ==== En résumé ==== | ||
+ | Une prison définit principalement : | ||
+ | * un fichier de logs à observer ; | ||
+ | * un filtre pour en extraire les signes d'une attaque ; | ||
+ | * une action à mener en fonction du constat d' | ||
+ | Cette version de '' | ||
+ | |||
+ | Si l'on se contente de la plupart des valeurs par défaut, en agissant essentiellement sur les durées de bannissement et le nombre de tentatives avant action défensive, '' | ||
+ | |||
+ | Si l'on souhaite modifier plus en profondeur le comportement, | ||
+ | |||
+ | Enfin, n' | ||
+ | ==== Exercice pratique ==== | ||
+ | //En fonction de ce qui a été vu, éventuellement en créant de nouveaux fichiers dans '' | ||
+ | |||
+ | Souvenez-vous que la cible '' | ||
+ | |||
+ | Considérez que d' | ||
+ | |||
+ | Jetez un œil (au figuré n' |
Réaction dynamique : fail2ban: Dernière modification le: 01/01/1970 à 00:00 par