我有一台小型服务器,它使用存储在 authorized_keys 文件中的 ssh 密钥以 root 身份对用户进行身份验证。我还运行 fail2ban。
我制定了一个约定,在authorized_keys文件中每个用户的public_key后面写上一个昵称。
我想知道是否可以使用 fail2ban 来扫描已接受的连接,而不是监禁用户,而是将他的昵称写入 /var/log/auth.log,也许可以使用 logger -p auth.info “时间戳已接受来自的 SSH 连接昵称“
干杯
答案1
但是我不知道为什么需要它,其中 sshd 已经以如下形式写入真实用户名:
Accepted publickey for username from IP ...
如果您没有,也许您可以尝试将 sshd_config 的日志级别设置为 VERBOSE。
但回到 fail2ban,当然这是可能的。至于 jail,您需要指定类似以下内容(以及其他内容):
[ssh-accept-mon]
failregex = ^\s*\S+ sshd\[\d+\]: Accepted publickey for <F-USER>\S+</F-USER> from <ADDR>
maxretry = 1
findtime = 1
bantime = 1
enabled = true
action = ssh-accept-mon-log
您可以按照以下方法检查 RE 和捕获组:
$ what='Jul 12 19:50:00 srv sshd[274594]: Accepted publickey for admin from 192.0.2.5 port 59120 ssh2: ECDSA-CERT:...'
$ fail2ban-regex -o '<F-USER> : <ip>' "$what" '^\s*\S+ sshd\[\d+\]: Accepted publickey for <F-USER>\S+</F-USER> from <HOST>'
admin : 192.0.2.5
作为一个动作你需要使用如下内容:
[Definition]
actionban = logger -p auth.info "<time> Accepted SSH connection from <F-USER>"
请注意,由于 ,它每秒不会记录每个 IP 超过 1 个条目bantime
,因此您可能需要尝试一些解决方案fail2ban :: wiki :: 如何禁止主机(IP 地址)以外的内容,例如用户或邮件等。
例如,本例中的 RE 将使用“session-ID”(与之匹配<F-ID>\d+</F-ID>
)作为故障 ID,而不是 IP 地址,因此将通过此 ID 进行“禁止”(因此可以防止输入速度过快):
$ fail2ban-regex -o '<F-USER> : <fid> : <ip>' "$what" '^\s*\S+ sshd\[<F-ID>\d+</F-ID>\]: Accepted publickey for <F-USER>\S+</F-USER> from <ADDR>'
admin : 274594 : 192.0.2.5
还请考虑此 RFE - fail2ban#2304用于替代方法(或替代方法ignorecommand
等)。