Я пытаюсь запустить fail2ban на сервере rsyslog, который собирает журналы авторизации с остальных наших серверов. Мне интересно, чтобы в качестве первого шага работали уведомления.
Моя проблема в том, что fail2ban срабатывает только на строках auth.log, которые поступают с локального компьютера (сервер журнала с именем 'sth-admin-log01'), но не на удаленных серверах. Например, для запуска действий fail2ban достаточно трех вхождений этой строки:
Mar 27 10:21:28 sth-admin-log01 sshd[18516]: Failed password for root from 192.168.1.3 port 34234 ssh2
Эта строка ничего не запускает, сколько бы раз она ни появлялась:
Mar 27 11:20:19 test-vm sshd[9772]: Failed password for root from 192.168.1.3 port 34631 ssh2
Я попытался проверить фильтр sshd.conf (по умолчанию) с помощью fail2ban-regex, и он отлично соответствует обеим строкам журнала.
Я использую fail2ban 0.8.11-1 на 64-битной Ubuntu 14.0.4.1.
Любые идеи?
Редактировать: Мой ответ отвечает на напротив из чего вопрос: как вы запретите атаки только на локальный хост. Я наткнулся на этот вопрос в поисках ответа на «противоположное», и другие тоже могут.
Вам нужно изменить префикс фильтра fail2ban, чтобы смотреть только строки с локального хоста.
Фильтры ssh (или любой другой службы) могут быть сконструированы в вашей системе по-другому, но в моем случае у меняfail2ban/filter.d/common.conf
, что определяет __prefix_line
, который выглядит так:
__prefix_line = %(__date_ambit)s?\s*(?:%(__bsd_syslog_verbose)s\s+)?(?:%(__hostname)s\s+)?(?:%(__kernel_prefix)s\s+)?(?:%(__vserver)s\s+)?(?:%(__daemon_combs_re)s\s+)?(?:%(__daemon_extra_re)s\s+)?
Ключевым моментом выше является то, как __hostname
определено. Вероятно, по умолчанию будет просто соответствовать любой буквенно-цифровой строке:
__hostname = \S+
Если вы измените его на имя хоста вашего хоста, fail2ban будет соответствовать только строкам, которые включают имя хоста вашего хоста.