« Protéger son serveur des attaques par brute force avec fail2ban » : différence entre les versions

De Linux Server Wiki
Aller à la navigation Aller à la recherche
Ligne 40 : Ligne 40 :
case "$1" in
case "$1" in
         start)
         start)
                 iptables -N morales
                 /sbin/iptables -N morales
                 iptables -A INPUT -p tcp -m multiport --dports ssh,telnet,ftp,ftp-data,ftps,ftps-data,http,https,pop3,pop3s,imap,imaps,submission -j morales
                 /sbin/iptables -A INPUT -p tcp -m multiport --dports ssh,telnet,ftp,ftp-data,ftps,ftps-data,http,https,pop3,pop3s,imap,imaps,submission -j morales
                 if [ -f "$banned_file" ]; then
                 if [ -f "$banned_file" ]; then
                         for ligne in `cat "$banned_file"`; do
                         for ligne in `cat "$banned_file"`; do
                                 iptables -A morales -s $ligne -j DROP
                                 /sbin/iptables -A morales -s $ligne -j DROP
                         done
                         done
                 else
                 else
Ligne 53 : Ligne 53 :
         ;;
         ;;
         stop)
         stop)
                 iptables -F morales
                 /sbin/iptables -F morales
                 iptables -D INPUT -p tcp -m multiport --dports ssh,telnet,ftp,ftp-data,ftps,ftps-data,http,https,pop3,pop3s,imap,imaps,submission -j morales
                 /sbin/iptables -D INPUT -p tcp -m multiport --dports ssh,telnet,ftp,ftp-data,ftps,ftps-data,http,https,pop3,pop3s,imap,imaps,submission -j morales
                 iptables -X morales
                 /sbin/iptables -X morales
                 if [ $quiet = 0 ]; then echo "Stoped"; fi
                 if [ $quiet = 0 ]; then echo "Stoped"; fi
                 exit 0
                 exit 0
Ligne 69 : Ligne 69 :
                         exit 1
                         exit 1
                 fi
                 fi
                 iptables -A morales -s $2 -j DROP
                 /sbin/iptables -A morales -s $2 -j DROP
                 if [ "$?" = "0" ]; then
                 if [ "$?" = "0" ]; then
                         echo "$2" >> "$banned_file"
                         echo "$2" >> "$banned_file"
Ligne 85 : Ligne 85 :
                         exit 1
                         exit 1
                 fi
                 fi
                 iptables -D morales -s $2 -j DROP
                 /sbin/iptables -D morales -s $2 -j DROP
                 if [ "$?" = "0" ]; then
                 if [ "$?" = "0" ]; then
                         sed /$2/d "$banned_file" > "$banned_file".tmp
                         sed /$2/d "$banned_file" > "$banned_file".tmp
Ligne 98 : Ligne 98 :
         ;;
         ;;
         flush)
         flush)
                 iptables -F morales
                 /sbin/iptables -F morales
                 rm -f "$banned_file"
                 rm -f "$banned_file"
                 touch "$banned_file"
                 touch "$banned_file"
Ligne 106 : Ligne 106 :
         list)
         list)
                 echo "Currently banned ips :"
                 echo "Currently banned ips :"
                 iptables -L morales
                 /sbin/iptables -L morales
                 exit 0
                 exit 0
         ;;
         ;;

Version du 23 février 2011 à 02:03

Fail2ban est un petit outil qui permet de surveiller les erreurs d'authentification répétée dans les fichiers logs de plusieurs services. Après un nombre défini d'authentification ratée, fail2ban banni temporairement l'ip ayant essayé de se loguer.

Installation

Installez fail2ban :

aptitude install fail2ban

Configuration

Le fichier /etc/fail2ban/jail.conf permet de configurer les options par défaut de fail2ban. Ajoutez les adresses ip et ip6 de votre serveur à la directive ignoreip pour éviter que le serveur se bannisse lui même. Entrez l'adresse email à laquelle vous souhaitez envoyer les alertes à la ligne destemail. Personnellement, j'utilise une mailing-list centraliser les mails de fail2ban.
Enfin, changez la ligne action = en :

action = %(action_mwl)s

La suite du fichier de configuration est divisée est section. Voici la configuration de ma section [ssh] :

[ssh]
enabled = true
port    = ssh
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 6

Compléments

Si une ip vous harcèle, vous pouvez la bannir définitivement avec iptables. Pour simplifier les opérations, j'ai créé un petit script bash :

#! /bin/sh
#conf
banned_file=/srv/link/banned.list

#script
me=`dirname $0`/

if [ "$2" = "quiet" ]; then quiet=1; else quiet=0; fi

case "$1" in
        start)
                /sbin/iptables -N morales
                /sbin/iptables -A INPUT -p tcp -m multiport --dports ssh,telnet,ftp,ftp-data,ftps,ftps-data,http,https,pop3,pop3s,imap,imaps,submission -j morales
                if [ -f "$banned_file" ]; then
                        for ligne in `cat "$banned_file"`; do
                                /sbin/iptables -A morales -s $ligne -j DROP
                        done
                else
                        touch "$banned_file"
                fi
                if [ $quiet = 0 ]; then echo "Started"; fi
                exit 0
        ;;
        stop)
                /sbin/iptables -F morales
                /sbin/iptables -D INPUT -p tcp -m multiport --dports ssh,telnet,ftp,ftp-data,ftps,ftps-data,http,https,pop3,pop3s,imap,imaps,submission -j morales
                /sbin/iptables -X morales
                if [ $quiet = 0 ]; then echo "Stoped"; fi
                exit 0
        ;;
        restart)
                $0 stop $2
                $0 start $2
                exit 0
        ;;
        add)
                if [ "$2" = "" ]; then
                        echo "Usage: $0 add <ip>"
                        exit 1
                fi
                /sbin/iptables -A morales -s $2 -j DROP
                if [ "$?" = "0" ]; then
                        echo "$2" >> "$banned_file"
                        echo "Added $2"
                        exit 0
                else
                        echo "Error"
                        exit 1
                fi
                exit 0
        ;;
        del)
                if [ "$2" = "" ]; then
                        echo "Usage: $0 del <ip>"
                        exit 1
                fi
                /sbin/iptables -D morales -s $2 -j DROP
                if [ "$?" = "0" ]; then
                        sed /$2/d "$banned_file" > "$banned_file".tmp
                        mv "$banned_file".tmp "$banned_file"
                        echo "Removed $2"
                        exit 0
                else
                        echo "Error"
                        exit 1
                fi
                exit 0
        ;;
        flush)
                /sbin/iptables -F morales
                rm -f "$banned_file"
                touch "$banned_file"
                echo "ok"
                exit 0
        ;;
        list)
                echo "Currently banned ips :"
                /sbin/iptables -L morales
                exit 0
        ;;
        *)
                echo "Usage: $0 {start|stop|restart|add|del|flush|list} [quiet]"
                exit 1
        ;;
esac