fail2ban снова пытается забанить

fail2ban снова пытается забанить

У меня проблема с тем, чтобы fail2ban делал то, что я хочу. Я использую действие, которое банит IP на CLoudFlare, это означает, что все еще много запросов проходит, пока все не будет обновлено на стороне Cloudflare (и, следовательно, пользователь больше не может получить доступ к сайту).

Пока этого не произошло, fail2ban пытается снова и снова банить IP-адрес, заставляя его отправлять тысячи (в случае DDoS-атаки) запросов в CloudFlare, что занимает чертовски много времени и, следовательно, не блокирует других злоумышленников, пока не закончит с предыдущими (уже забаненными).

Итак, есть ли способ остановить попытки fail2ban снова их забанить и просто игнорировать их?

#!/bin/bash

# Make sure that the ip-blacklist file exists
# otherwise we go ahead and create it
if [ ! -e "/etc/fail2ban/ip.blacklist" ] ; then
    touch "/etc/fail2ban/ip.blacklist"
fi

if [[ $1 = ban ]]; then
    if ! grep -q "$2" /etc/fail2ban/ip.blacklist; then
        # Store the IP as we need it later to check if the user is already banned
        echo "$2" >> /etc/fail2ban/ip.blacklist

        # Submit the ban request
    fi 
elif [[ $1 = unban ]]; then
    # Remove the IP from the blacklist 
    perl -ni -e "print unless (/^$2$/);" /etc/fail2ban/ip.blacklist
    #sed -i '/^$2$/d' /etc/fail2ban/ip.blacklist

    # Submit the unban request
fi

решение1

Рассмотрите возможность создания списка забаненных IP-адресов и добавления IP-адресов в него при отправке запроса на бан. В сценарии действий игнорируйте запросы на бан, если IP-адрес есть в списке. Вам также потребуется изменить действие разбана, чтобы удалить IP-адрес из списка забаненных IP-адресов. Создайте сценарий, например, такой:

#!/bin/bash

# Define ourbanfile
banFile=ip.blacklist

# Ensure we have a banFile will be created if missing
if [ ! -e ${banFile} ]; then
    touch ${banFile}
fi

# Ban or unban as desired
if [[ $1 = ban ]]; then
    if ! grep -q "$2" ${banFile}; then
        # Store the IP as we need it later to check if the user is already banned
        echo "$2" >> ${banFile}

        # Submit the ban request
    fi
elif [[ $1 = unban ]]; then
    # Remove the IP from the blacklist
    perl -ni -e "print unless (/^$2\$/);" ${banFile}
    #sed -i '/^$2$/d' ${banFile}

    # Submit the unban request
fi

# Cat banfile if running on terminal (testing)
tty -s  && cat ${banFile}

# EOF

Ваши действия будут следующими:

actionban = /path/to/script ban <IP>
actionunban = /path/to/script unban <IP>

Связанный контент