Я только что установил 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 поможет кому-то в будущем.