Как удалить из fail2ban заблокированный ip

Как удалить из fail2ban заблокированный ip

Хочу рассказать в своей теме «Удалить из fail2ban заблокированный ip» как удалить из fail2ban заблокированный ip. Процедура очень простая и сейчас я покажу на готовых примерах как я это выполнял.

Проверим список ip адресов:

 iptables -L -n

Вот что имеем:

┌(captain-notes)─(✓)─(11:54 AM Tue Mar 17)
└─(/etc/fail2ban)─(12 files, 88Kb)─> iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination 
f2b-ReqLimit tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443
f2b-phpmyadmin tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443
[...]
Chain f2b-phpmyadmin (1 references)
target prot opt source destination 
REJECT all -- 194.150.168.95 0.0.0.0/0 reject-with icmp-port-unreachable
REJECT all -- 178.151.40.243 0.0.0.0/0 reject-with icmp-port-unreachable
RETURN all -- 0.0.0.0/0 0.0.0.0/0
┌(captain-notes)─(✓)─(11:54 AM Tue Mar 17)
└─(/etc/fail2ban)─(12 files, 88Kb)─> iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination 
f2b-ReqLimit tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443
f2b-phpmyadmin tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443

Chain f2b-phpmyadmin (1 references)
target prot opt source destination 
REJECT all -- 194.150.168.95 0.0.0.0/0 reject-with icmp-port-unreachable
REJECT all -- 178.151.40.243 0.0.0.0/0 reject-with icmp-port-unreachable
RETURN all -- 0.0.0.0/0 0.0.0.0/0

Удалить, например, из таблицы fail2ban-roundcube ip можно с помощью команды:

 # iptables -D fail2ban-roundcube -s xxx.xxx.xxx.xxx -j DROP

где xxx.xxx.xxx.xxx — ip адрес который надо разблокировать.

Если брать мой пример, то стоит выполнить:

# iptables -D f2b-phpmyadmin  -s 194.150.168.95 -j REJECT

f2b-phpmyadmin — это цепочка. 194.150.168.95, 178.151.40.243 — заблокированные ИП. REJECT, DROP… — означает (говорит) что ИП был заблокирован.

Можно еще раз вызвать команду:

# iptables -L -n

Есть еще 1 способ это сделать, средствами самого fail2ban. Сейчас покажу как это можно сделать. Выводим список всех наших клеток (jail):

# fail2ban-client status

Вывод списка IP для конкретной клетки ( для конкретного jail):

 # fail2ban-client status asterisk-udp

Вывод:

Status for the jail: asterisk-udp
|- filter
|  |- File list:    /var/log/asterisk/fail2ban 
|  |- Currently failed: 0
|  `- Total failed: 9813
`- action
|- Currently banned:    5
|  `- IP list:  212.83.132.65 139.196.7.141 107.21.142.70 198.1.127.53 109.248.65.231 
`- Total banned:    5

То для того чтобы разбанить ( удалить ИП с заблокированного листа) необходимо выполнить следующую команду:

# fail2ban-client set asterisk-udp unbanip 212.83.132.65

asterisk-udp – имя клетки. 212.83.132.65 – заблокированный IP (меняем на свой).

Создадим скрипт для подчета количиства забаненных ИП во всех jail-ах:

# nano /root/checklist_ban
#!/bin/bash
JAILS=$(fail2ban-client status | grep " Jail list:" | sed 's/`- Jail list:\t\t//g' | sed 's/,//g')
for j in $JAILS
do
echo "$j $(fail2ban-client status $j | grep " Currently banned:" | sed 's/ |- Currently banned:\t//g')"
done

Выставим права на данный файл:

 # chmod +x checklist_ban

запускаем данный скрипт:

# ./checklist_ban

Генерация простых отчетов.

Все из следующих команд можно запустить из командной строки или с помощью скрипта. Они написаны для систем Linux / UNIX, но может работать и на других платформах.

Группировка по IP адресу:

 # awk '($(NF-1) = /Ban/){print $NF}' /var/log/fail2ban.log | sort | uniq -c | sort -n

Примечание: переменная NF равна числу полей в каждой строке в лог файле. $NF является значением для последнего поля. В конце вывода Вы получите:

  1 109.248.65.231
  2 109.248.70.174
  2 216.158.235.208
  3 107.21.142.70
  3 198.1.127.53
  8 139.196.7.141
 14 212.83.132.65

Чтобы запустить этот отчет для всех логов нужно небольшое изменение:

 # zgrep -h "Ban " /var/log/fail2ban.log* | awk '{print $NF}' | sort | uniq -c

И получите следующий вывод:

   3 107.21.142.70
  1 109.248.65.231
  2 109.248.70.174
  8 139.196.7.141
  3 198.1.127.53
 14 212.83.132.65
  2 216.158.235.208

Какие конкретные IP-адреса участвуют:

# zcat /var/log/fail2ban.log* | awk '(NF == 6 && $NF ~ /^91\.201\./){print $NF}' | sort | uniq -c

Выход этого будет список IP-адресов, начинающихся с 91.201. Если они выглядят, как будто они частью подсети (или нескольких подсетей).

Группировка по IP адрес и имеми хоста:

Команда для включения хостов в списке немного сложнее. Вы также должны вставить правильный путь к программе logresolve, который преобразует IP-адресов для хостов (например /usr/sbin/logresolve ):

 # awk '($(NF-1) = /Ban/){print $NF,"("$NF")"}' /var/log/fail2ban.log | sort | logresolve | uniq -c | sort -n

Примечание:

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

  1 host65-231.lanoptic.ru (109.248.65.231)
  2 216.158.235.208 (216.158.235.208)
  2 host70-174.lanoptic.ru (109.248.70.174)
  3 ec2-107-21-142-70.compute-1.amazonaws.com (107.21.142.70)
  3 server.libertarian.ca (198.1.127.53)
  8 139.196.7.141 (139.196.7.141)
 14 212-83-132-65.rev.poneytelecom.eu (212.83.132.65)

Группировка по IP адресу и в разделе Fail2ban:

# grep "Ban " /var/log/fail2ban.log | awk -F[\ \:] '{print $10,$8}' | sort | uniq -c | sort -n

Это показывает нам, какие услуги каждый IP-адрес пытается открыть / использовать:

  1 107.21.142.70 [asterisk-tcp]
  1 109.248.65.231 [asterisk-udp]
  1 109.248.70.174 [asterisk-tcp]
  1 109.248.70.174 [asterisk-udp]
  1 198.1.127.53 [asterisk-tcp]
  1 216.158.235.208 [asterisk-tcp]
  1 216.158.235.208 [asterisk-udp]
  2 107.21.142.70 [asterisk-udp]
  2 198.1.127.53 [asterisk-udp]
  3 139.196.7.141 [asterisk-tcp]
  5 139.196.7.141 [asterisk-udp]
  7 212.83.132.65 [asterisk-tcp]
  7 212.83.132.65 [asterisk-udp]

Отчет о «сегодняшней деятельности»:

Вот отчет я считаю, полезно запускать до полуночи каждого дня, чтобы генерировать итоги деятельности за день:

# grep "Ban " /var/log/fail2ban.log | grep `date +%Y-%m-%d` | awk '{print $NF}' | sort | awk '{print $1,"("$1")"}' | logresolve | uniq -c | sort -n

Группировка по дате и раздел Fail2ban:

Этот отчет проверяет все Fail2ban лог-файлов и дает вам краткую информацию о том, сколько запрет мероприятия были для каждого раздела на каждый день:

# zgrep -h "Ban " /var/log/fail2ban.log* | awk '{print $5,$1}' | sort | uniq -c

Вывод:

  3 [asterisk-tcp] 2016-04-22
 11 [asterisk-tcp] 2016-04-23
  3 [asterisk-udp] 2016-04-22
 16 [asterisk-udp] 2016-04-23

И убедится что все работает.

 
comments powered by Disqus