[Debian Etch] Configurer le firewall iptables avec fail2ban

Publié le 8 décembre 2008 - Administration Serveur. Tags : , ,

L’un des points cruciaux de l’administration de serveur web consiste à le protéger efficacement de toute intrusion extérieure.

Si cette prévention est loin d’être évidente pour qui n’est pas administrateur serveur de formation, elle présente l’avantage d’avoir des solutions pour néophytes assez efficaces pour peu que l’on prenne le temps d’y consacrer un minimum de temps.

Pour faire simple sachez que nous allons devoir utiliser 2 logiciels :

  • Un firewall (IpTables puisqu’il est installé par défaut sur la Debian Etch),
  • Un automate de gestion des règles du firewall,

En ce qui me concerne je vous propose d’installer le logiciel fail2ban, ce dernier étant largement plébiscité et totalement gratuit. Son principe de fonctionnement est relativement simple : Fail2ban lit des fichiers de log et bannit les adresses IP qui ont obtenu un trop grand nombre d’échecs lors de l’authentification. Il met à jour les règles du pare-feu pour rejeter cette adresse IP. Ces règles sont définies par l’utilisateur.

1- Téléchargez et installez fail2ban :

apt-get install fail2ban

2- Configurez fai2ban (en éditant le fichier /etc/fail2ban/jail.conf) :

Différentes options sont possibles, voici celles que j’utilise :

a) Modification de l’email de l’Admin. (pour un envoi des banissements par email) :

destemail = nom@domaine.com

b) Modification des paramètres de configuration par défaut :

[DEFAULT]
bantime = 3600 (durée du ban, ici 1h)
findtime = 600 (laps de temps entre chaque tentatives)

c) Modification de l’action par défaut (ban + envoi email) :

– > Ajouter un # devant la commande relative à :

#Default action to take : ban only

-> Enlever les # devant la commande :

iptables[name=%(__name__)s, port=%(port)s]
mail-whois[name=%(__name__)s, dest=%(destemail)s]

d) Vérifier que les surveillances SSH et Apache sont bien actives (true) par défaut (et à l’occaz mettre le nombre de tentatives au niveau désiré) :

[SSH]
enabled = true (actif par défault)
maxretry = 3 (5 par défaut)
 
[Apache]
enabled = true (non actif par défault)
maxretry = 3 (5 par défaut)

3- Activez la surveillance FTP :

Passer à « true » (surveillance active) le serveur FTP installé sur votre machine si celui-ci est disponible dans la listepar défaut

Dans mon cas j’utilise pure-ftp, ce dernier n’étant pas disponible dans la liste de base de fail2ban, il est necessaire de l’ajouter manuellement. Pour ceux qui seraient dans le même cas, voici la procédure à suivre passer directement à l’étape 4 pour les autres) :

– Ajout de la règle dans le fichier de configuration de fail2ban (penser à vérifier les chemins des logs.) :

[pure-ftpd]
 
enabled = true
port = ftp
filter = pure-ftpd
logpath = /var/log/pure-ftpd.log
maxretry = 3

– Création d’un fichier de logs séparé. Editez /etc/syslog.conf et ajoutez les lignes suivantes :

ftp.*    /var/log/pure-ftpd.log

– Redémarrage du daemon pour que la modification soit prise en compte :

/etc/init.d/sysklogd restart

– Ajout d’un nouveau filtre /etc/fail2ban/filter.d/pure-ftpd.conf :

# Fail2Ban configuration file#
# Author: Cyril Jaquier
# Modified: Yaroslav Halchenko for pure-ftpd
#
# $Revision: 3$
#[Definition]
# Error message specified in multiple languages
__errmsg = (?:Authentication failed for user|Erreur d'authentification pour l'utilisateur)
#
# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
#          host must be matched by a group named "host". The tag "" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P\S+)
# Values: TEXT
#
failregex = pure-ftpd: (.+?@) \[WARNING\] %(__errmsg)s \[.+\]$
 
# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

Voilà, votre pure-ftp est sous surveillance ;)

4- Activez la surveillance des serveurs des emails :

a) Passez à « true » les serveurs d’email de la liste par défaut si utilisés

b) Ajoutez des règles de surveillance si besoin (penser à vérifier les chemins des logs), du style :

[courierpop3]
 
enabled  = true
port     = pop3
filter   = courierlogin
failregex = courierpop3login: LOGIN FAILED.*ip=\[.*:\]
logpath  = /var/log/mail.log
maxretry = 3
 
[courierimap]
 
enabled  = true
port     = imap2
filter   = courierlogin
failregex = imapd: LOGIN FAILED.*ip=\[.*:\]
logpath  = /var/log/mail.log
maxretry = 3
 
[sasl]
 
enabled  = true
port     = smtp
filter   = sasl
failregex = warning: [-._\w]+\[\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed
logpath  = /var/log/mail.log
maxretry = 2

5- Redémarrez fail2ban (comme après après toute modif. sur la configuration):

/etc/init.d/fail2ban restart

6- Vérifiez que fail2ban fonctionne :

/etc/init.d/fail2ban status

Voilà, vous êtes parés! ATTENTION cependant à ne pas mettre de règles trop restrictives ou cela pourrait être plus contre-productif qu’autre chose. Par ailleurs, si vous vous connectez via une IP fixe je vous conseille fortement de vous mettre sur la liste blanche, cela vous éviterait un éventuel auto-ban désagréable…

Pour info :

*les logs se trouvent dans /var/log/fail2ban.log
*pour connaître les IP blacklistées : iptables –L
*Pour vérifier les REGEX : fail2ban-regex FICHIER_LOG FICHIER_FILTRE

En pour finir, la FAQ Fail2ban en français


Articles sur ce thème :