2014-09-08 3 views
2

Возможно ли уловить ошибку аутентификации на нескольких строках с помощью регулярного выражения fail2ban?fail2ban custom filter on multiline

Вот пример:

Sep 08 11:54:59.207814 afpd[16190] {dsi_tcp.c:241} (I:DSI): AFP/TCP session from 10.0.71.149:53863 
Sep 08 11:54:59.209504 afpd[16190] {uams_dhx2_pam.c:329} (I:UAMS): DHX2 login: thierry 
Sep 08 11:54:59.272092 afpd[16190] {uams_dhx2_pam.c:214} (I:UAMS): PAM DHX2: PAM Success 
Sep 08 11:55:01.522258 afpd[16190] {uams_dhx2_pam.c:666} (I:UAMS): DHX2: PAM_Error: Authentication failure 

Благодаря

ответ

4

Да, конечно, fail2ban использует python regex с многострочной опцией. В вашем случае, попробуйте:

"afpd\[[0-9]+\] {dsi_tcp.c:241} \(I:DSI\): AFP/TCP session from <HOST>:[0-9]+\n.*afpd\[[0-9]+\] {uams_dhx2_pam.c:[0-9]+}.*\n.*afpd\[[0-9]+\] {uams_dhx2_pam.c:[0-9]+}.*\n.*afpd\[[0-9]+\] {uams_dhx2_pam.c:[0-9]+}.*PAM_Error: Authentication failure" 

Как вы можете видеть, вы просто должны поставить \n, где это необходимо. Не забудьте указать опцию maxlines в вашем случае, так что fail2ban использует 4 строки для соответствия регулярному выражению. Ваш файл фильтра должен выглядеть примерно так:

[Init] 
maxlines = 4 

[Definition] 

failregex = "afpd\[[0-9]+\] {dsi_tcp.c:241} \(I:DSI\): AFP/TCP session from <HOST>:[0-9]+\n.*afpd\[[0-9]+\] {uams_dhx2_pam.c:[0-9]+}.*\n.*afpd\[[0-9]+\] {uams_dhx2_pam.c:[0-9]+}.*\n.*afpd\[[0-9]+\] {uams_dhx2_pam.c:[0-9]+}.*PAM_Error: Authentication failure" 

ignoreregex = 

Используйте fail2ban-regex для проверки вашего регулярного выражения.