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

Aller à la navigation Aller à la recherche
aucun résumé des modifications
Aucun résumé des modifications
 
(14 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
[[Category:serveur]]
[[Category:serveur]]
[[Category:debian]]
[[Category:debian]]
[[Category:security]]
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.
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.


Ligne 24 : Ligne 25 :
maxretry = 3
maxretry = 3


destemail = CSNU-security@list.csnu.org
destemail = security@list.domain.tld


action = %(action_mwl)s
action = %(action_mwl)s
</pre>
</pre>


=Compléments=
Si vous souhaitez modifier d'autres fichiers de configuration de fail2ban, copiez le fichier en question en changeant l'extension de <code>.conf</code> à <code>.local</code>. Vous pourrez ensuite modifier le fichier .local et éviter de toucher à la configuration par défaut de fail2ban.


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 :
=Faire tourner fail2ban en tant qu'utilisateur plutot que root=
 
<pre>aptitude install fail2ban sudo</pre>
 
==Si vous êtes sous debian squeeze==
Modifiez le fichier <code>/etc/init.d/fail2ban</code> : localisez la ligne contenant <code>start-stop-daemon</code> et modifiez comme suit (on ajoute 3 lignes et on modifie l'option du --chuid de la ligne start-stop-daemon) :
<pre>
        chown fail2ban /var/run/fail2ban
        touch /var/log/fail2ban.log
        chown fail2ban /var/log/fail2ban.log
 
        start-stop-daemon --start --quiet --chuid fail2ban --exec $DAEMON -- \
</pre>
 
==Si vous êtes sous debian wheezy ou jessie==
Modifiez <code>/etc/default/fail2ban</code> :
<pre>FAIL2BAN_USER="fail2ban"</pre>
 
==Suite quelque soit votre distribution==
 
Créez l'utilisateur :
<pre>useradd --system --no-create-home --home-dir / --groups adm fail2ban
chown fail2ban /var/log/fail2ban.log
</pre>
 
Modifiez <code>/etc/logrotate.d/fail2ban</code> :
<pre>create 640 fail2ban adm</pre>
 
Créez le fichier <code>/etc/sudoers.d/fail2ban</code> contenant :
<pre>
<pre>
#! /bin/sh
fail2ban ALL=(root) NOPASSWD:/sbin/iptables -N fail2ban-[A-Za-z0-9]*
#conf
fail2ban ALL=(root) NOPASSWD:/sbin/iptables -A fail2ban-[A-Za-z0-9]* -j RETURN
banned_file=/srv/link/banned.list
fail2ban ALL=(root) NOPASSWD:/sbin/iptables -I INPUT -p [A-Za-z0-9]* -m multiport --dports [A-Za-z0-9]* -j fail2ban-[A-Za-z0-9]*
 
fail2ban ALL=(root) NOPASSWD:/sbin/iptables -D INPUT -p [A-Za-z0-9]* -m multiport --dports [A-Za-z0-9]* -j fail2ban-[A-Za-z0-9]*
fail2ban ALL=(root) NOPASSWD:/sbin/iptables -F fail2ban-[A-Za-z0-9]*
fail2ban ALL=(root) NOPASSWD:/sbin/iptables -X fail2ban-[A-Za-z0-9]*


#script
fail2ban ALL=(root) NOPASSWD:/sbin/iptables -n -L INPUT
me=`dirname $0`/


if [ "$2" = "quiet" ]; then quiet=1; else quiet=0; fi
#debian wheezy/squeeze
fail2ban ALL=(root) NOPASSWD:/sbin/iptables -I fail2ban-[A-Za-z0-9]* 1 -s * -j DROP
fail2ban ALL=(root) NOPASSWD:/sbin/iptables -D fail2ban-[A-Za-z0-9]* -s * -j DROP


case "$1" in
#debian jessie
        start)
fail2ban ALL=(root) NOPASSWD:/sbin/iptables -I fail2ban-[A-Za-z0-9]* 1 -s * -j REJECT --reject-with icmp-port-unreachable
                /sbin/iptables -N morales
fail2ban ALL=(root) NOPASSWD:/sbin/iptables -I fail2ban-[A-Za-z0-9]* 1 -s * -j REJECT --reject-with icmp-port-unreachable
                /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
</pre>
</pre>
<pre>chmod 0440 /etc/sudoers.d/fail2ban</pre>
Enfin, modifiez le fichier <code>/etc/fail2ban/action.d/iptables-multiport.conf</code> en remplaçant toutes les occurences à <code>iptables</code> par <code>sudo iptables</code>
Ajoutez un alias pour l'utilisateur iptables :
<pre>
echo fail2ban:root >> /etc/aliases
postalias /etc/aliases</pre>
4 203

modifications

Menu de navigation