我应该如何自定义 fail2ban 过滤器以结合在容器中运行并使用 systemd 记录的 sshd 的使用?
How should I customize a fail2ban filter for a usage in conjunction of a sshd that runs in a container and logs with systemd?
我是 运行 容器中的 SSH 守护进程 Docker。由于后者由 systemd
管理并且 sshd 记录到 stdout
,因此检测攻击者的相关数据出现在 systemd
的日志中,但其条目有一个额外的前缀,如下所示:
Feb 13 21:51:25 my.example.com dockerd[427]: Feb 13 18:51:25 sshd[555]: Invalid user ts3bot from 180.166.17.122 port 43474
监狱是用这个片段配置的:
[sshd]
enabled = true
mode = aggressive
filter = sshd[mode=%(mode)s]
port = ssh
filters.d/sshd.conf
中的这一行似乎包含我要更改的内容:
journalmatch = _SYSTEMD_UNIT=sshd.service + _COMM=sshd
但是我找不到任何关于 journalmatch
配置的有用文档。我正在使用 fail2ban
0.10.
谁能解释一下等号右边的部分是怎么解释的?
当我希望弄清楚如何调整该值时,我应该直接编辑 filters.d/sshd.conf
(它由 Arch 软件包提供)还是其他地方?
要保留为主机系统本身设置额外 sshd 监狱的选项,我会这样做:
Version – 使用支持使用 systemd
作为后端的 fail2ban 版本 >= 0.9。 (顺便说一句:0.11 版很新,可能还不稳定,但我喜欢新功能自动增加来自同一 IP 的每场新比赛的禁令时间。)
Jail – 创建一个单独的监狱 jail.d/sshd-docker
。根据需要采用原始 sshd jail 中的设置。也许首先为了安全起见先降低禁令时间,然后再增加。将 backend = systemd
添加到那个新的 sshd-docker
监狱。可能看起来像这样:
[sshd-docker]
enabled = true
filter = sshd-docker
action = iptables
backend = systemd
maxretry = 5
findtime = 1d
bantime = 2w
Filter – 我更喜欢保留过滤器文件和原始 jail.conf 文件不变,这样我就可以轻松升级到更新的 fail2ban 版本。因此,我建议将过滤器文件 filter.d/sshd.conf
复制到 filter.d/sshd-docker.conf
并在 sshd-docker
监狱中引用该新过滤器(如上所示)。
Filter/regex – 在 filter.d/sshd-docker.conf
中采用正则表达式来匹配您的日志条目。可以像改变这个一样简单
_daemon = sshd
至
_daemon = docker
因为 _daemon
指令用于构造 __prefix_line 正则表达式,如您在 filter.d/common.conf
.
中所见
Filter/journalmatch – 据我从 fail2ban-regex 手册页中看到的,journalmatch
指令会覆盖其他过滤器。因此,您可能还需要在 filter.d/sshd-docker.conf
中更改此行
journalmatch = _SYSTEMD_UNIT=sshd.service + _COMM=sshd
到
journalmatch =
(在 fail2ban 0.11 中,您也可以删除此行。不确定以前的版本何时停止要求过滤器文件中的 journalmatch =
条目。)
测试 – 重新加载 fail2ban 并检查它是如何工作的。
我是 运行 容器中的 SSH 守护进程 Docker。由于后者由 systemd
管理并且 sshd 记录到 stdout
,因此检测攻击者的相关数据出现在 systemd
的日志中,但其条目有一个额外的前缀,如下所示:
Feb 13 21:51:25 my.example.com dockerd[427]: Feb 13 18:51:25 sshd[555]: Invalid user ts3bot from 180.166.17.122 port 43474
监狱是用这个片段配置的:
[sshd]
enabled = true
mode = aggressive
filter = sshd[mode=%(mode)s]
port = ssh
filters.d/sshd.conf
中的这一行似乎包含我要更改的内容:
journalmatch = _SYSTEMD_UNIT=sshd.service + _COMM=sshd
但是我找不到任何关于 journalmatch
配置的有用文档。我正在使用 fail2ban
0.10.
谁能解释一下等号右边的部分是怎么解释的?
当我希望弄清楚如何调整该值时,我应该直接编辑 filters.d/sshd.conf
(它由 Arch 软件包提供)还是其他地方?
要保留为主机系统本身设置额外 sshd 监狱的选项,我会这样做:
Version – 使用支持使用
systemd
作为后端的 fail2ban 版本 >= 0.9。 (顺便说一句:0.11 版很新,可能还不稳定,但我喜欢新功能自动增加来自同一 IP 的每场新比赛的禁令时间。)Jail – 创建一个单独的监狱
jail.d/sshd-docker
。根据需要采用原始 sshd jail 中的设置。也许首先为了安全起见先降低禁令时间,然后再增加。将backend = systemd
添加到那个新的sshd-docker
监狱。可能看起来像这样:[sshd-docker] enabled = true filter = sshd-docker action = iptables backend = systemd maxretry = 5 findtime = 1d bantime = 2w
Filter – 我更喜欢保留过滤器文件和原始 jail.conf 文件不变,这样我就可以轻松升级到更新的 fail2ban 版本。因此,我建议将过滤器文件
filter.d/sshd.conf
复制到filter.d/sshd-docker.conf
并在sshd-docker
监狱中引用该新过滤器(如上所示)。Filter/regex – 在
filter.d/sshd-docker.conf
中采用正则表达式来匹配您的日志条目。可以像改变这个一样简单_daemon = sshd
至
_daemon = docker
因为
_daemon
指令用于构造 __prefix_line 正则表达式,如您在filter.d/common.conf
. 中所见
Filter/journalmatch – 据我从 fail2ban-regex 手册页中看到的,
中更改此行journalmatch
指令会覆盖其他过滤器。因此,您可能还需要在filter.d/sshd-docker.conf
journalmatch = _SYSTEMD_UNIT=sshd.service + _COMM=sshd
到
journalmatch =
(在 fail2ban 0.11 中,您也可以删除此行。不确定以前的版本何时停止要求过滤器文件中的
journalmatch =
条目。)测试 – 重新加载 fail2ban 并检查它是如何工作的。