у меня есть 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>