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

Как мне отформатировать это регулярное выражение, чтобы оно работало в fail2ban?

Я только что установил fail2ban на свой сервер CentOS в ответ на попытку перебора SSH. Регулярные выражения по умолчанию в файле sshd.conf fail2ban не соответствуют никаким записям в audit.log, где SSH, по-видимому, регистрирует все попытки подключения, поэтому я пытаюсь добавить выражение, которое будет соответствовать.

Строка, которую я пытаюсь сопоставить, выглядит следующим образом:

type=USER_LOGIN msg=audit(1333630430.185:503332): user pid=30230 uid=0 auid=500
 subj=user_u:system_r:unconfined_t:s0-s0:c0.c1023 msg='acct="root": exe="/usr
/sbin/sshd" (hostname=?, addr=<HOST IP>, terminal=sshd res=failed)'

Я пытаюсь использовать следующее регулярное выражение:

^.*addr=<HOST>, terminal=sshd res=failed.*$

Я использовал regextester.com и regexr, чтобы попытаться построить регулярное выражение. Тестеры дают мне совпадение с этим регулярным выражением:^.*addr=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}, terminal=sshd res=failed.*$ но fail2ban-regex жалуется, если я не использую <HOST> тег в регулярном выражении. Однако, используя ^.*addr=<HOST>, terminal=sshd res=failed.*$ дает мне 0 совпадений.

На данный момент я полностью застрял и буду очень признателен за любую помощь. Что я делаю не так в регулярном выражении, которое пытаюсь использовать?

Видимо дело в RTFM. Покопавшись некоторое время, я нашел страницу на fail2ban веб-сайт, в котором указано, что он выполняет два совпадения регулярных выражений в строке: одно для метки времени и одно для остальной части строки, следующей за меткой времени. Отметка времени в audit.log имеет формат Epoch и, по-видимому, не соответствует первому регулярному выражению. Использование fail2ban-regex для сравнения / var / log / secure с моим файлом fail2ban sshd.conf привело к желаемому поведению.

Правильным решением было указать соответствующий раздел моего jail.conf в / var / log / secure.

Для людей, которые все еще хотят создавать свои собственные регулярные выражения, эта секция содержит много полезной информации, включая этот небольшой лакомый кусочек, который в конечном итоге помог мне решить эту проблему:

Чтобы строка журнала соответствовала вашему failregex, она фактически должна совпадать в двух частях: начало строки должно соответствовать шаблону временной метки или регулярному выражению, а оставшаяся часть строки должна соответствовать вашему failregex. Если failregex привязан к началу ^, то привязка относится к началу оставшейся части строки после отметки времени и промежуточного пробела.

Я надеюсь, что мой момент RTFM поможет кому-то в будущем.