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

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

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

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

Но разве нельзя сделать это с помощью fail2ban-client?

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

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

С Fail2Ban до версии 0.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.

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

fail2ban-client get JAIL actionunban iptables

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

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

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

Если 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.2 fail2ban-client команда:

fail2ban-client get jail actionunban ipaddress

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

unbanip
fail2ban-client set sshd unbanip ip_here

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

Если 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

Вы можете использовать мой простой скрипт: 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 ```


Начиная с версии 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

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

sudo fail2ban-client разблокировать YOUR_IP_ADDRESS

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

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

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