Как правильно разблокировать IP с помощью Fail2Ban

Я использую Fail2Ban на сервере, и мне интересно, как правильно разблокировать IP.

Я знаю, что могу работать с IPTables напрямую: iptables -D fail2ban-ssh <number>

Но нет ли способа сделать это с fail2ban-client?

В руководствах говорится что-то вроде: fail2ban-client get ssh actionunban <IP>, Но это не работает.

Кроме того, я не хочу /etc/init.d/fail2ban restart поскольку это потеряло бы все запреты в списке.

16 ответов

Решение

С Fail2Ban до v0.8.8:

fail2ban-client get YOURJAILNAMEHERE actionunban IPADDRESSHERE

С Fail2Ban v0.8.8 и выше:

fail2ban-client set YOURJAILNAMEHERE unbanip IPADDRESSHERE

Трудная часть - найти правильную тюрьму:

  1. использование iptables -L -n найти имя правила...
  2. ... тогда используйте fail2ban-client status чтобы получить реальные имена тюрем. Имя правила и имя тюрьмы могут не совпадать, но должно быть ясно, какое из них связано с каким.

Начиная с v0.8.8 существует unbanip вариант (actionunban не для этой цели) Это может быть вызвано set Команда, если вы посмотрите на список параметров, вы увидите синтаксис. Так и будет (наизусть, пожалуйста, проверьте):

fail2ban-client set ssh-iptables unbanip IPADDRESSHERE 

более общий:

fail2ban-client set JAILNAMEHERE unbanip IPADDRESSHERE

работает для меня

Пример для SSH в интерактивном режиме.

введите bash:

fail2ban-client -i

затем в интерактивном режиме наберите статус тюрьмы:

status sshd

ты получишь:

Status for the jail: ssh
|- Filter
|  |- Currently failed: 0
|  |- Total failed: 6
|  `- File list:    /var/log/auth.log
`- Actions
   |- Currently banned: 1
   |- Total banned: 2
   `- Banned IP list:   203.113.167.162

затем введите в интерактивном режиме fail2ban:

set sshd unbanip 203.113.167.162

ты получишь:

203.113.167.162

это значит больше не 203.113.167.162 в списке банов.

Ответ укода неправильный

Вызов fail2ban-client без параметров и вы увидите список возможных команд:

get JAIL actionunban ACT             

Это получает команду unban для действия ACT для JAIL.

Посмотрите на параметр action определенной вами тюрьмы, возможно, у вас есть действие iptables и, возможно, еще что-то вроде sendmail, whois или что-то еще. так что если ваше действие было iptables, оно будет выглядеть так:

fail2ban-client get JAIL actionunban iptables

и ответ будет:

iptables -D fail2ban-NAME -s IP -j DROP

Он покажет вам только то, что вы должны написать для банера. Сама команда unban не существует.

Если вы используете версию v0.10.2:

sudo fail2ban-client unban YOUR_IP_ADDRESS

Это из справки:

unban <IP> ... <IP> unbans <IP> (in all jails and database)

Подтвердил работу в моем случае, когда меня, скорее всего, забанили из-за повторного входа клиента ssh с неверным паролем.

Если 192.168.2.1 забанен

sudo iptables -L

Проверьте, в какой цепочке он запрещен, например

Цепочка fail2ban-sasl (1 ссылок)

DROP all - 192.168.2.1 где угодно

Затем:

# to view the proper command for un-banning
sudo fail2ban-client get sasl actionunban
# actual command
iptables -D fail2ban-sasl -s 192.168.2.1 -j DROP

Сначала нужно получить название тюрьмы. Вы можете получить список (в большинстве случаев это будет только ssh jail):

fail2ban-client status

После получения имени тюрьмы вы можете проверить, какие IP-адреса игнорируются.

fail2ban-client get ssh ignoreip

Если ваш IP находится в списке игнорируемых, вы можете удалить его через:

fail2ban-client set ssh delignoreip your_ip_address
vi /etc/hosts.deny

Удалите запись вашего хоста:

fail2ban-client reload

Использование fail2ban v.0.8.6:

$ sudo fail2ban-client status # to reveal your JAIL name (mine is ssh)
$ sudo fail2ban-client set ssh delignoreip your_ip_address
$ sudo nano /etc/hosts.deny # delete your ip address
$ sudo fail2ban-client reload

Начиная с версии 0.8.8, это может быть удобный сценарий для вас - его можно легко настроить, чтобы разблокировать из всех тюрем.

Я просто называю это "getf2bstatus.sh"

Пример использования ./getf2bstatus.sh 1.2.3.4

#!/bin/bash
echo "Jails where $1 is locked up:"
JAILS=`fail2ban-client status | grep "Jail list" | sed -E 's/^[^:]+:[ \t]+//' | sed 's/,//g'`
for JAIL in $JAILS
do
  currentjail=`fail2ban-client status $JAIL | grep -B 8 $1 | grep Status | awk '{printf $5}'`
  if [[ ${#currentjail} -gt a ]] ; then
        echo $currentjail
  fi
done
echo
echo "To unban $1 use the following commands:"
for JAIL in $JAILS
do
  currentjail=`fail2ban-client status $JAIL | grep -B 8 $1 | grep Status | awk '{printf $5}'`
  if [[ ${#currentjail} -gt a ]] ; then
        echo "fail2ban-client set $currentjail unbanip $1"
   fi
done

Вывод?

Jails where 1.2.3.4 is locked up:
ssh

To unban 1.2.3.4 use the following commands:
fail2ban-client set ssh unbanip 1.2.3.4
fail2ban-client set sshd unbanip ip_here

должно сработать.

К сожалению, с версией 0.8.2 fail2ban-client команда:

fail2ban-client get jail actionunban ipaddress

не работает. Чтобы решить эту проблему, лучше всего обновить fail2ban до последней версии и использовать новую опцию:

unbanip

Самый простой способ для всех тюрем выглядит так:

      fail2ban-client unban 10.20.30.40

Он вернет целое число:

      0 = ip was not banned (no action was performed)
1 = ip was cleared from the ban list (if ip was in more than 1 jail this number will increase)

Хорошая идея — добавить IP-адрес в список игнорируемых (перезапуск не требуется), чтобы вы больше не столкнулись с этой проблемой:

      fail2ban-client set JAILNAME addignoreip 10.20.30.40

Когда закончите работу с этим IP:

      fail2ban-client set JAILNAME delignoreip 10.20.30.40

Вы можете использовать мой простой скрипт:D

echo "Display all service"
#Edit and Add/Del your service
sudo fail2ban-client status phpmyadmin-syslog
sudo fail2ban-client status apache-fakegooglebot
sudo fail2ban-client status apache-noscript
sudo fail2ban-client status apache-overflows
sudo fail2ban-client status apache-auth
sudo fail2ban-client status  apache-badbots
sudo fail2ban-client status  mysqld-auth
sudo fail2ban-client status  proftpd
sudo fail2ban-client status  sshd
echo "Choose service to unban"
read service
echo "Status of Service"
sudo fail2ban-client status $service
echo "Enter ip to be unban"
read ip
sudo fail2ban-client set $service unbanip $ip
echo "Status of service after unban"
sudo fail2ban-client status $service

Сохраните и введите sh yourfilename.sh

Необязательно, если вы хотите получить результат по почте, вы можете использовать это:)

#Empty file log
echo "" > /home/pi/Scripts/log/ban.log
#Add Date to log
date >> /home/pi/Scripts/log/ban.log

#Add status service on log
sudo fail2ban-client status phpmyadmin-syslog >> /home/pi/Scripts/log/ban.log
sudo fail2ban-client status apache-fakegooglebot >> /home/pi/Scripts/log/ban.log
sudo fail2ban-client status apache-noscript >> /home/pi/Scripts/log/ban.log
sudo fail2ban-client status apache-overflows >> /home/pi/Scripts/log/ban.log
sudo fail2ban-client status apache-auth >> /home/pi/Scripts/log/ban.log
sudo fail2ban-client status  apache-badbots >> /home/pi/Scripts/log/ban.log
sudo fail2ban-client status  mysqld-auth >> /home/pi/Scripts/log/ban.log
sudo fail2ban-client status  proftpd >> /home/pi/Scripts/log/ban.log
sudo fail2ban-client status  sshd >> /home/pi/Scripts/log/ban.log

#Send mail 
mutt -b "yourname@gmail.com" -s "Sujet: Log Fail2Ban" < /home/pi/Scripts/log/ban.log ```


Если IP находится в нескольких тюрьмах, это становится проблемой.

одна строка для удаления 192.168.1.2 из всех тюрем:

 for jail in $(fail2ban-client status | grep 'Jail list:' | sed 's/.*Jail list://' | sed 's/,//g'); do fail2ban-client set $jail unbanip 192.168.1.2; done

скрипт для того же https://gist.github.com/yolabingo/c810db6fe7f8bfcb9eb4f6ffc531e474

Если вас не интересует снятие бана с конкретной тюрьмы, текущая версия Fail2Ban позволяет выполнить очень простую команду:

Fail2ban-client разблокирует IPADDRESS

Это удалит IP из всех тюрем. Супер легко!

Я нахожу неудачу, делаяgrep 10.20.30.40 /var/log/fail2ban.log

который дает результат вроде

      2021-08-23 10:09:17,394 fail2ban.filter         [581]: INFO    [ssh] Found 10.20.30.40 - 2021-08-23 10:09:17
2021-08-23 10:09:17,395 fail2ban.filter         [581]: INFO    [sshd] Found 10.20.30.40 - 2021-08-23 10:09:17
2021-08-23 10:09:20,936 fail2ban.filter         [581]: INFO    [sshd] Found 10.20.30.40 - 2021-08-23 10:09:20
2021-08-23 10:09:20,940 fail2ban.filter         [581]: INFO    [ssh] Found 10.20.30.40 - 2021-08-23 10:09:20
2021-08-23 10:09:22,654 fail2ban.filter         [581]: INFO    [ssh] Found 10.20.30.40 - 2021-08-23 10:09:22
2021-08-23 10:09:22,655 fail2ban.filter         [581]: INFO    [sshd] Found 10.20.30.40 - 2021-08-23 10:09:22
2021-08-23 10:09:22,917 fail2ban.actions        [581]: NOTICE  [ssh] Ban 10.20.30.40
2021-08-23 10:09:23,085 fail2ban.filter         [581]: INFO    [recidive] Found 10.20.30.40 - 2021-08-23 10:09:22
2021-08-23 10:09:23,384 fail2ban.actions        [581]: NOTICE  [sshd] Ban 10.20.30.40
2021-08-23 10:09:24,084 fail2ban.actions        [581]: NOTICE  [recidive] Ban 10.20.30.40
2021-08-23 10:09:24,099 fail2ban.filter         [581]: INFO    [recidive] Found 10.20.30.40 - 2021-08-23 10:09:23

Из этого я вижу, что мне нужно разбанить IP из трёх джейлов:
fail2ban-client set sshd unbanip 10.20.30.40
fail2ban-client set ssh unbanip 10.20.30.40
fail2ban-client set recidive unbanip 10.20.30.40

Другие вопросы по тегам