Назад | Перейти на главную страницу

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

Рассмотрите возможность создания списка заблокированных 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>