【问题标题】:fail2ban custom filter on multiline多行上的fail2ban自定义过滤器
【发布时间】:2014-09-08 10:52:47
【问题描述】:
是否可以使用 fail2ban 正则表达式在多行上捕获身份验证失败?
这是一个例子:
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
谢谢
【问题讨论】:
标签:
regex
multiline
fail2ban
【解决方案1】:
是的,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 选项设置为 4,以便 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 测试您的正则表达式。
【解决方案2】:
只是在为同一问题寻找解决方案 - 但我认为 wpoely86 给出的答案可能会导致阻止无辜的 IP - 如果有多个 IP 或多或少同时连接。
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.207815 afpd[99999] {dsi_tcp.c:241} (I:DSI): AFP/TCP session from 10.10.10.10:53864
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
Sep 08 11:55:01.522258 afpd[99999] {uams_dhx2_pam.c:666} (I:UAMS): DHX2: PAM_success: Authentication succeeded
在上面,有问题的连接来自 10.0.71.149。但是,正则表达式会阻止 10.10.10.10。换句话说,正则表达式需要区分 afpd[99999] 和 afpd[16190](它们标识 afpd 进程的 PID)。