Magazine

Sécurité pro-active avec fail2ban

Publié le 17 septembre 2011 par Openwebtech @openwebtechfr

Installation et paramétrage de fail2ban 0.8.4

fail2ban est un programme en python dont la fonctionalité première est de fournir  des filtres (filter.d), utilisés pour  parser les logs de différents services. En fonction du nombre de « matchs » il réagit en poussant des règles iptables (via action.d). De base les logs d’un certain nombre de services sont prêt à etre monitorés (ssh,apache2, postfix, courier-imap….).

Je ne détaillerai bien évidement pas toutes les configurations possibles mais seulement celles qui répondent à mes besoins :

  • Surveillance des logs ssh
  • Surveillance des logs imap
  • Notification des tentatives d’intrusion

Il est possible de réaliser tout cela via iptables sans l’aide de fail2ban mais pas de manière aussi souple. Sécuriser son serveur avec iptables fera l’objet d’un autre billet et prends tout son sens lorsque les ressources à disposition sont limités (plugcomputer) :)

Téléchargement des paquets

apt-get install fail2ban

Fail2ban est constitué de la manière suivante:

  • action.d : contient les actions à mettre en oeuvre à un tentative d’intrusion
  • filter.d : contient les expressions régulières permettant de parser les logs d’un service donné
  • jail.conf : Content les paramètres de chacun des services surveillés (bantime, maxretry, mail etc…)

La surveillance des logs d’un service est activée via /etc/fail2ban/jail.conf.

 Configuration des jails (jail.conf)

Le fichier de conf présent dans le paquet à l’installation est obsolète, nous allons donc le mettre à jour:

Il est conseillé de faire une copie du fichier de configuration jail.conf et de venir modifier un jail.conf.local qui sera lu automatiquement.

 cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.local

Ingore ip est important à configurer pour éviter de se faire bannir par son propre serveur. Cette section permet de définir les paramètres et actions d’un service qui n’aurait pas été « surchargé » (actions personnalisées)

[DEFAULT]

# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not

# ban a host which matches an address in this list. Several addresses can be

# defined using space separator.

ignoreip = 127.0.0.1 ipanepasbannir

 

# "bantime" is the number of seconds that a host is banned.

bantime = 600

# A host is banned if it has generated "maxretry" during the last "findtime"

# seconds.

findtime = 600

# "maxretry" is the number of failures before a host get banned.

maxretry = 3

Activation des services à surveiller

Pour activer une surveillance :

enabled = true

  • filter : filtre utilisé; présent dans filter.d
  • port: port du service
  • action: utilise les actions définis dans action action.d. mail-whois permet d’envoyer des mails via ‘mail’, pour être notifié d’un changement de configuration, le drop d’une ip etc..
  • logpath: emplacement des log à surveiller. Si vous n’utilisez pas une distribution basé sur debian vous devrez surement la modifier
  • findtime: période pendant laquelle il est possbile de faire des tentatives de connexions au nombre <= maxretry

Par défaut tous les services sont à enabled=false. Il faut les passer à true pour les activer. Attention à bien renseigner le fichier de log à surveiller. Par exemple le fichier de log de ssh pour debian/ubuntu est :

/var/log/auth.log

De même pour le port ssh veillez à mettre celui que vous avez configuré (ssh => port=22 par défaut)

[ssh]

enabled = true

port = 22xx

filter = sshd

logpath = /var/log/auth.log

maxretry = 3

findtime = 60

action = iptables-multiport[name=SSH, port=22xx, protocol=tcp]

mail-whois[name=SSH, [email protected], [email protected]]

[courierauth]

enabled = true

port = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s

filter = courierlogin

logpath = /var/log/mail.log

maxretry = 3

findtime = 60

action = mail-whois[name=IMAP, [email protected], [email protected]]

Pour recevoir les mails lors du ban d’ip,  editez le fichier d’action (ici /etc/fail2ban/action.d/mail-whois.conf) :

# Destination/Addressee of the mail

dest = [email protected]

Tester sa conf au niveau des filtres

Après avoir modifié ses filtres, encore faut t-il vérifier que tout est fonctionnel! Pour cela on teste sur un fichier de log (ayant loggué des intrus de préférence) le filtre associé :

fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

fail2ban-regex /var/log/mail.log /etc/fail2ban/filter.d/courierlogin.conf

Fin de l’installation

Après avoir modifié la configuration, il faut la recharger :

fail2ban-client reload ou fail2ban-client stop & fail2ban-client start

Pour avoir la liste des jails active:

fail2ban-client status

Status

|- Number of jail: 2

`- Jail list: courierauth,ssh

Si vous avez ce message d’érreur:

WARNING ‘findtime’ not defined in ‘postfix’. Using default value

La durée utilisée pendant laquelle des connexions « findtime » peuvent être essayées est celle défini au niveau de la balise [DEFAULT]

Il faut la redéfinir pour chaque service :

findtime = 60

Il est interessant de connaitre les ip ayant été bannis par fail2ban. Chaque action est logué dans /var/log/fail2ban.log

2011-09-14 13:41:14,371 fail2ban.actions: WARNING [ssh] Ban x.x.x.x

Ainsi on peu imaginer la récupération des ip des vilains pour la création d’une base et le ban définitif de certaines ip récidiviste.

En conclusion de ce billet je dirais que fail2ban est un projet extrêmement utile et fonctionnel mais ne remplace pas pour autant remplacer une configuration d’iptables appropriée. Un bémol cependant qui m’interpelle….fail2ban ne semble pas avoir évolué depuis 2009/09/07. Il reste efficace mais il est courant de devoir modifier les regex des filtres proposés à l’installation pour suivre les évolutions des logiciels. Si quelqu’un connait un fork de fail2ban qu’il me fasse signe !


Retour à La Une de Logo Paperblog

A propos de l’auteur


Openwebtech 8 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte

Dossier Paperblog