Vous n'êtes pas identifié.
Cela fait un moment que j'utilise fail2ban et j'en suis relativement content.
Ce que je trouve frustrant est qu'il n'y à AUCUNE information sur le net sur le comment écrire ses propres règles.
Fail2ban utilise Python .....
Bon, dans le répertoire /etc/fail2ban/filter.d on trouve tous les fichiers avec les filtres.
Si je prend par exemple le fichier "apache-noscript.conf" je trouve cette régle
failregex = [[]client <HOST>[]] (File does not exist|script not found or unable to stat): /\S*(\.php|\.asp|\.exe|\.pl) [[]client <HOST>[]] script '/\S*(\.php|\.asp|\.exe|\.pl)\S*' not found or unable to stat *$
Il y à certains détails de ce "charabia" qui n'est pas facilement compréhensible pour moi! Par exemple /\S*
OU peut on trouver des informations permettant l'apprentissage du "codage" de failregex?
En quel langage sont les fichier .conf .... .php , phython, autre???
Je vue qu'il y à une commande pour tester les règles ....
Exemple:
fail2ban-regex /var/log/apache*/*error.log /etc/fail2ban/filter.d/apache-noscript.conf
Bref c'est grace à fail2ban-regex que je me suis aperçu qu'il y quelques règles qui doivent être mis à jour ... sur mon serveur Debian 5 ... et je pas envie de demander aux autres de m'écrire les règles.... Je préfère apprendre la syntaxe de "fail2ban" ...
J'ai aussi regardé sur http://www.fail2ban.org/wiki/index.php/FAQ_french (Questions fréquentes) mais rien sur le sujet de l'écriture des règles.
Merci d'avance.
Dernière modification par Didier100 (18 Aug 2009 09:39:32)
Hors ligne
Hello,
Ce charabia s'appelle une regex, tu peux en apprendre plus en:
- http://fr.wikipedia.org/wiki/Expression_rationnelle
- man 7 regex
- man perlre
- google
La seule chose spécifique à fail2ban est le tag <HOST>, comme expliqué dans les commentaires des fichiers de conf:
# Notes.: regex to match the password failure messages in the logfile. The # host must be matched by a group named "host". The tag "<HOST>" can # be used for standard IP/hostname matching and is only an alias for # (?:::f{4,6}:)?(?P<host>\S+)
Hors ligne
Salut BOFH,
AHHHH regex !
Sans ton aide j'ai pu encore chercher longtemps ... J'ai pense que regex été une variable ...
... Il me semble qu'on utilise le "regex" aussi dans le fichier .htaccess .... c'est bien ça?
Encore GRAND Merci ... Je vais garder les sources que tu à cité.
Dernière modification par Didier100 (18 Aug 2009 19:38:03)
Hors ligne
Je pu enfin écrire et tester "mon" premier filtre pour fail2ban ... grâce à l'aide de BOFH.
Nom du filtre named-zone-transfer.conf
Dans mon fichier /var/log/named/security.log j'ai trouve des très nombreuses lignes de ce type
17-Aug-2009 21:55:17.774 client 82.146.38.160#52372: zone transfer 'mon_nom_de_domaine.fr/AXFR/IN' denied
qui ne sont pas pris en charge par le filtre named-refused.conf.
J'ai décide d'écrire un nouveau filtre ...
Le filtre repose sur celui de named-refused.conf ... légèrement modifie pour qu'il répond aux attaques de "zone transfer".
Le fichier named-zone-transfer.conf doit être crée dans le répertoire /etc/fail2ban/filter.d
# Fail2Ban configuration file for named (bind9). Trying to generalize the # structure which is general to capture general patterns in log # lines to cover different configurations/distributions # # Author: Yaroslav Halchenko # # Adaptation and changement made by Dieter Fleischer 19th of August 2009 # Filter Name : named-zone-transfer.conf # [Definition] # # Daemon name _daemon=named # # Shortcuts for easier comprehension of the failregex __pid_re=(?:\[\d+\]) __daemon_re=\(?%(_daemon)s(?:\(\S+\))?\)?:? __daemon_combs_re=(?:%(__pid_re)s?:\s+%(__daemon_re)s|%(__daemon_re)s%(__pid_re)s?:) # hostname daemon_id spaces # this can be optional (for instance if we match named native log files) __line_prefix=(?:\s\S+ %(__daemon_combs_re)s\s+)? # Option: failregex # Notes.: regex to match the password failures messages in the logfile. # Values: TEXT # failregex = %(__line_prefix)sclient <HOST>#\S+: zone transfer '.*' denied\s*$ # Option: ignoreregex # Notes.: regex to ignore. If this regex matches, the line is ignored. # Values: TEXT # ignoreregex =
Puis ajoutez ceci dans le contenu du fichier /etc/fail2ban/jail.conf
[named-zone-transfer] enabled = true port = domain,953 # protocol = tcp filter = named-zone-transfer logpath = /var/log/named/security.log maxretry = 2
Voici la commande pour un petit test du filtre:
fail2ban-regex /var/log/named/security.log /etc/fail2ban/filter.d/named-zone-transfer.conf
à 'écran je reçois ceci ... extraît des dernières lignes:
82.146.38.160 (Tue Aug 18 23:53:36 2009) 82.146.38.160 (Tue Aug 18 23:54:32 2009) 82.146.38.160 (Tue Aug 18 23:59:04 2009) 82.146.38.160 (Tue Aug 18 23:59:51 2009) 82.146.38.160 (Wed Aug 19 00:00:23 2009) 82.146.38.160 (Wed Aug 19 00:01:06 2009) 82.146.38.160 (Wed Aug 19 00:01:48 2009) 82.146.38.160 (Wed Aug 19 00:02:09 2009) 82.146.38.160 (Wed Aug 19 00:03:03 2009) 82.146.38.160 (Wed Aug 19 00:04:25 2009) 82.146.38.160 (Wed Aug 19 00:04:56 2009) 82.146.38.160 (Wed Aug 19 00:15:23 2009) 82.146.38.160 (Wed Aug 19 00:15:58 2009) 82.146.38.160 (Wed Aug 19 00:26:18 2009) 82.146.38.160 (Wed Aug 19 00:29:13 2009) Date template hits: 0 hit(s): Month Day Hour:Minute:Second 0 hit(s): Weekday Month Day Hour:Minute:Second Year 0 hit(s): Weekday Month Day Hour:Minute:Second 0 hit(s): Year/Month/Day Hour:Minute:Second 0 hit(s): Day/Month/Year Hour:Minute:Second 0 hit(s): Day/Month/Year:Hour:Minute:Second 0 hit(s): Year-Month-Day Hour:Minute:Second 1829 hit(s): Day-Month-Year Hour:Minute:Second[.Millisecond] 0 hit(s): TAI64N 0 hit(s): Epoch 0 hit(s): ISO 8601 Success, the total number of match is 899 However, look at the above section 'Running tests' which could contain important information. sd-1xxxx:/etc/fail2ban/filter.d#
Bon reste qu'à activer le filtre avec la commande /etc/init.d/fail2ban restart
Et voici l'attaquant pris au piège ... on vérifié avec la commande iptables -L -n
Chain fail2ban-named-zone-transfer (1 references) target prot opt source destination DROP all -- 82.146.38.160 0.0.0.0/0 RETURN all -- 0.0.0.0/0 0.0.0.0/0
Un dernier Conseil
============
Avant d'activer les filtres "# DNS Servers" dans le fichier jail.conf vous devez copier ceci dans votre fichier /etc/bind/named.conf.local
logging { channel security_file { file "/var/log/named/security.log" versions 3 size 30m; severity dynamic; print-time yes; }; category security { security_file; }; };
puis vous devez créer le répertoire named ( il n'existe pas ... et c'est pas mentionnée? Surement un oublie)
mkdir /var/log/named
J'ai trouvé les informations sur la page http://www.debian-administration.org/articles/623
Puis il faut redémarrer bind /etc/init.d/bind9 restart si non votre fichier log reste vide!
J'ai trouvé ce lien http://www.perl.com/doc/manual/html/pod/perlre.html qui me semble être intéressant aux sujet d'une expression rationnelle ou expression régulière.
Dernière modification par Didier100 (19 Aug 2009 08:51:05)
Hors ligne
Je avoue qu'il n'est pas très facile d'apprendre la syntaxe des Regex .... qoui...que....
J'ai trouvé ce tutoriel en deux parties, très bien fait: Les expressions régulières avec des nombreux exemples .... Le tutoriel et des exemples sont "calque" sur le langage de programmation Php.
Dernière modification par Didier100 (05 Nov 2009 21:45:47)
Hors ligne
Et voici un superbe site pour écrire et tester en même temps ses regex ....
http://regex.larsolavtorvik.com/
L'écriture des regex devient donc facilement accessible aux débutants "regex" comme moi!
Exemple pour filtrer un enregistrement qui se trouve dans le fichier /var/log/syslog
Nov 15 17:18:22 sd-16xxx named[15734]: client 68.59.189.51#59177: query (cache) 'credixxxx.com/MX/IN' denied
Et voici le Pattern (que j'ai écrit) PHP PCRE
^[A-Z][a-z]{2,3}\s[0-9]{2}\s[0-9]{2}[:][0-9]{2}[:][0-9]{2}\s[A-Za-z0-9-]{2,9}\snamed[\[][0-9]{1,5}[\]]:\sclient\s[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\#[0-9]{1,5}:\squery\s\(cache\)\s'[a-zA-Z-\.\/]{2,120}'\sdenied$
Certes il n'est pas optimisé mais c'est un début ....
Maintenant il me reste qu'à tester le "Pattern" s'il fonctionne dans fail2ban ...
Dernière modification par Didier100 (16 Nov 2009 09:57:05)
Hors ligne
bonjour à tous,
je déterre un peu, mais j'aurais besoin d'aide pour créer un failregex pour cet extrait de log:
Sep 23 09:23:31 server pure-ftpd: pam_unix(pure-ftpd:auth): authentication failure; logname= uid=0 euid=0 tty=pure-ftpd ruser=Administrator rhost=89-105-115-146.fluidata.co.uk
je veux bannir l'IP 89-105-115-146
Hors ligne
Salut !
# iptables -A INPUT -s 89.105.115.146 -j DROP # iptables-save
Hors ligne
merci beaucoup!
Hors ligne
De rien !
Hors ligne