我运行的 SSH 服务器上有一些麻烦的主机尝试使用这种方法,我试图使用 fail2ban 禁止它们。问题是,我很少使用正则表达式,更不用说使用 Python 正则表达式了。
以下是我的 auth.log 中有问题的几行:
Nov 19 18:58:17 myhost sshd[48272]: Connection from xxx.xxx.xxx.xxx port 3284 on my.host.ip.address port 22
Nov 19 18:58:21 myhost sshd[48272]: fatal: Read from socket failed: Connection reset by peer [preauth]
我想抓取正则表达式中的两行,我在其他帖子中看到过如何进行多行操作,但目前我甚至无法让它匹配第一行!以下是我的 *.conf 文件中的片段:
[INCLUDES]
# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf
[Init]
maxlines = 2
[Definition]
_daemon = sshd
failregex = ^%(__prefix_line)s^Connection from <HOST>*$
我理解“__prefix_line”旨在捕获第一个“myhost sshd[PID]”位,但是当我运行“fail2ban-regex”时,我得到的只是:
Results
=======
Failregex: 0 total
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [115124] MONTH Day Hour:Minute:Second
`-
Lines: 115124 lines, 0 ignored, 0 matched, 115124 missed
有人有什么想法吗?
提前致谢!
答案1
我在用fail2ban 0.9.5在Ubuntu Server LTS 14.04并使用一个不错的错误用户配置文件禁止我的 ssh 和 squirrelmail(使用“dovecot”)的所有“错误/未经授权”用户的规则,并在 /var/log/auth.log 中查找以下内容:
Aug 15 10:15:25 server auth: pam_unix(dovecot:auth): check pass; user unknown
Aug 15 10:15:25 server auth: pam_unix(dovecot:auth): authentication failure; logname= uid=0 euid=0 tty=dovecot ruser=alumni rhost=14.141.17.167
和
Aug 15 12:39:10 server sshd[5851]: pam_unix(sshd:auth): check pass; user unknown
Aug 15 12:39:10 server sshd[5851]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=91.224.160.106
以及 ssh 的单行根用户禁令:
Aug 15 05:50:20 server sshd[20677]: Failed password for root from 62.147.227.164 port 55253 ssh2
规则是:
[INCLUDES]
before = common.conf
[Definition]
_daemon = (?:sshd|postfix/smptd)
failregex = ^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from <HOST>\s*$
^%(__prefix_line)sFailed (?:password|publickey) for root from <HOST>(?: port \d*)?(?: ssh\d*)?$
dovecot.*user unknown\n.*dovecot.*authentication failure.*rhost\=<HOST>
ingoreregex =
[Init]
maxlines = 2
它包含在 jail.local 中,如下所示:
[wronguser]
enabled = true
port = 1:65535
filter = wronguser
logpath = /var/log/auth.log
maxretry = 1
bantime = -1
默认 apt-get失败2ban在Ubuntu LTS 14.04是 0.8.11,不支持多行正则表达式。因此,您应该手动安装最新的稳定版 fail2ban。我直接从他们的 git repo 中安装。
答案2
我在 Ubuntu 上与多行正则表达式斗争了很长时间。结果发现我需要更新到 v 0.9.1 才能使其工作,这需要从 fail2ban 下载最新的 tar.gz。对于 Ubuntu 14.04 LTS 版本,上限为 0.8.11
此后一切如预期般运作。