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

Получите Fail2Ban, чтобы проверять время поиска каждые X минут

у меня есть fail2ban настроить со следующими настройками:

bantime  = 86400
findtime  = 600
maxretry = 2

Это замечательно, так как он останавливает любые IP-адреса, которые 3 раза перебирают в течение 10 минут. Однако есть IP-адреса, которые запрашиваются каждые 30 минут или около того. Чтобы поймать эти IP-адреса, я изменил настройки на:

bantime  = 86400
findtime  = 3600
maxretry = 2

Теперь он проверяет каждый час и ловит некоторые из тех IP-адресов, которые пытались проверить каждые 20-30 минут. Однако теперь мой VPS не улавливает IP-адреса, которые могут быть переброшены на высоком уровне в течение одного часа.

Таким образом, есть ли способ установить findtime = 3600 а также иметь fail2ban проверять каждые 10 минут?

Как упоминал Майкл Хэмптон в нескольких комментариях, время реакции, Как часто fail2ban проверяет логи, не имеет никакого отношения к findtime параметр. fail2ban ожидается, что новые данные журнала будут считываться каждую секунду или около того (это будет зависеть от загрузки вашего компьютера, но это должно быть очень быстро, поскольку в большинстве случаев новые данные журнала все еще будут в памяти, в буфере ядра).

В findtime=... определяет, как далеко проверяются журналы. Фильтр сравнивается с вводом с датой между now - findtime и now. Если фильтр найден maxretry или несколько совпадающих строк журнала (не считая тех, которые также соответствуют ignoreregex) в течение этого периода времени (now - findtime к now), то он испускает ban действие.

  ancient past  |     past       |       ban         |   future
----------------+--*--*-*--*---*-+-------------------+------------->
                |                |                   |
                |                |                   +--> now + bantime
                |                +--> now
                +--> now - findtime

Есть график, показывающий временную шкалу. Журналы часть древнее прошлое игнорируются. Журналы между now - findtime и now, раздел с именем прошлое, проверяются на совпадения. Если количество совпадений (обозначено звездочками) равно >= maxretry тогда бан начинается в now. Запрет действует до now + bantime. Обратите внимание, что совпадения с одним и тем же IP-адресом после блокировки IP-адреса не должны происходить для порта, для которого он был заблокирован. Однако это все еще может произойти для других портов.

Итак, увеличивая findtime=... вы не влияете на время реакции, однако вы увеличиваете вероятность того, что IP будет забанен соответствующим фильтром.

Вы можете добавить тюрьму в jail.conf проверять, кто применяет брутфорс каждые 30 минут. Пример рабочей конфигурации:

[ssh] # first jail: check every 10 minutes 

enabled  = true
port     = ssh
filter   = sshd
action   = %(action_)s
logpath  = /var/log/auth.log
maxretry = 3
bantime  = 600

[fail2ban-ssh] # second jail: check every hour

enabled = true
filter = fail2ban-ssh
logpath = /var/log/fail2ban.log
action = iptables-multiport
maxretry = 3
findtime = 3600    
bantime = 86400     # ban for a day

Создать файл fail2ban-ssh.conf и положи это в filter.d чтобы соответствовать тому, что вы хотите, например:

[Definition]

failregex = fail2ban.actions: WARNING \[ssh\] Unban <HOST>