如何发送 systemd ssh 错误以便被 fail2ban 发现

如何发送 systemd ssh 错误以便被 fail2ban 发现

我有一个使用 ansible 和 vagrant 的设置来测试安装和配置 fail2ban 的自定义角色。

我已经编写了一个简单的测试剧本,它使用角色fail2ban并按预期应用必要的配置。但我的意图是还编写几行代码来执行集成测试,例如模拟几次“登录失败”尝试。

据我所见如何从命令行向 systemd 日志发送消息?,应该能够做这样的事情:

echo "Failed password for root from 1.2.3.4 port 35720 ssh2" | systemd-cat -t sshd -p err

这确实出现在journalctl -f日志中,但不知何故根本没有出现fail2ban

fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 1
|  |- Total failed: 7
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 0
   |- Total banned: 1
   `- Banned IP list:   

上面的统计数据来自我自己的登录失败。

我也尝试了不同的日志级别(例如,,,,crit等),但没有任何效果。我在这里做错了什么吗?errinfowarning

答案1

经过无数个小时的阅读和大量文档后,我终于弄清楚了这一点man

  1. logger
  2. systemd.journal-fields

一旦您浏览文档中的大量页面,您就会发现您可以执行如下操作:

journalctl --facility=auth --since -5m --output=export

这将显示原始消息及其所有元数据。以 开头的属性_被视为“受信任”且无法操纵(它们由 syslog 或 journald 指定)。

以下是示例消息:

_SYSTEMD_SLICE=system.slice
_CAP_EFFECTIVE=3fffffffff
SYSLOG_FACILITY=4
_TRANSPORT=syslog
SYSLOG_IDENTIFIER=sshd
_COMM=sshd
_EXE=/usr/sbin/sshd
_SYSTEMD_CGROUP=/system.slice/ssh.service
_SYSTEMD_UNIT=ssh.service
_SYSTEMD_INVOCATION_ID=f29bc3ffcdce4a2dbeb18fe53ac7fea9
_CMDLINE=sshd: root [priv]
SYSLOG_PID=7021
SYSLOG_TIMESTAMP=Aug  6 11:18:42 
_PID=7021
MESSAGE=Connection closed by authenticating user root 192.168.121.1 port 54666 [preauth]
_SOURCE_REALTIME_TIMESTAMP=1659784722477758

fail2ban日志匹配过滤器中是_SYSTEMD_UNIT=sshd.service + _COMM=sshd。因此,我无法模拟登录失败。因此,我不得不将过滤器更改为journalmatch = SYSLOG_IDENTIFIER=sshd + SYSLOG_FACILITY=4(位于filers/sshd.conf)。

完成此操作后,我就可以使用以下命令轻松模拟登录失败消息:

logger --journald <<END
SYSLOG_FACILITY=4
SYSLOG_IDENTIFIER=sshd
MESSAGE=Failed password for root from 172.31.255.254 port 54666 ssh2
PRIORITY=6
END

瞧——集成测试完成了。

Every 2.0s: fail2ban-client status sshd                                                                  localhost: Sat Aug  6 12:00:22 2022

Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     1110
|  `- Journal matches:  SYSLOG_IDENTIFIER=sshd + SYSLOG_FACILITY=4
`- Actions
   |- Currently banned: 1
   |- Total banned:     8
   `- Banned IP list:   172.31.255.254

相关内容