我在使用Docker的容器中运行SSH守护程序。由于后者由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
使用此代码段配置jail:
[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包中提供)还是其他地方?
答案 0 :(得分:1)
为了保留主机系统本身有额外sshd监狱的选项,这就是我要做的:
版本 - 使用fail2ban版本> = 0.9,支持使用systemd
作为后端。 (顺便说一句:版本0.11很新,可能还不稳定,但我喜欢新功能,可以自动增加来自同一IP的每个新匹配的禁用时间。)
Jail - 创建一个单独的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
过滤器 - 我更喜欢保留过滤器文件和原始jail.conf文件不变,因此我可以轻松升级到较新的fail2ban版本。因此,我建议将过滤器文件filter.d/sshd.conf
复制到filter.d/sshd-docker.conf
并在sshd-docker
jail中引用该新过滤器(如上所示)。
过滤器/正则表达式 - 在filter.d/sshd-docker.conf
中采用正则表达式来匹配您的日志条目。可以像改变这个一样简单
_daemon = sshd
到
_daemon = docker
因为_daemon
指令用于构造__prefix_line正则表达式,如filter.d/common.conf
中所示。
过滤器/ journalmatch - 据我在fail2ban-regex手册页中看到,journalmatch
指令会覆盖其他过滤器。因此,您可能还需要在filter.d/sshd-docker.conf
journalmatch = _SYSTEMD_UNIT=sshd.service + _COMM=sshd
到
journalmatch =
(在fail2ban 0.11中你也可以删除这一行。不确定以前的版本何时停止在过滤器文件中需要journalmatch =
条目。)
测试 - 重新加载fail2ban并检查其工作原理。