我已经在我控制的服务器上安装了 Debian 打包的 fail2ban。由于我之前有一些失败正则表达式,我将它们放入本地过滤器定义文件中,以便它们也会被考虑。因此,我最终得到了 /etc/fail2ban/filter.d/sshd.conf 和 /etc/fail2ban/filter.d/sshd.local。这是建议设置的方式并且它看起来运行得很好。
然而,在 .local 文件中,我实际上替换.conf 文件中的 failregexes 的完整列表。文档似乎没有表明还有其他方法可以做到这一点,为了使其工作,我只是将分发版提供的 .conf 文件复制到 .local 文件并做了一些添加。
如果我能简单地修正该列表受益于上游和 Debian 维护人员的工作,他们及时了解发行版维护的日志条目过滤器正则表达式的变化。
我能想到的唯一真正的解决方法是实际创建两个 jail,一个使用发行版提供的配置,另一个使用我自己的配置。这似乎有一个(相当明显的)缺点,即它们被视为独立的 jail(在这样的设置下,这是意料之中的)。
当然,我并不是唯一一个想要将自己的一些失败正则表达式添加到现有集合中并尽量减少维护麻烦的人。
是否有可能修正通过站点本地或主机本地文件修改 fail2ban 过滤器定义中的 failregex 和 ignoreregex 列表,而无需对相应的全局或分发提供的文件进行任何更改?如果是,那么该怎么做?
答案1
让我们看一下/etc/fail2ban/filter.d/sshd.conf
文件的一部分。
[INCLUDES]
# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf
因此您可能认为您可以在这里添加:after = sshd.local
并使其读取这样的文件;其中的任何设置都将覆盖此文件中的设置。
并且它确实有效。只是你不能简单地修改条目failregex
或任何其他指令;你只能替换它们。
你的感觉是对的。这绝对是 fail2ban 配置文件格式的一个缺点。我会向开发人员投诉。
答案2
我有同样的要求,并将其发布为问题。作者似乎正在处理它:https://github.com/fail2ban/fail2ban/issues/867。
一旦合并,它应该像这样工作(此示例由开发人员 Serg Brester 提供):
# filter test.conf:
[Definition]
failregex = failure test 1 (filter.d/test.conf) <HOST>
# filter test.local:
[Definition]
failregex = %(known/failregex)s
failure test 2 (filter.d/test.local) <HOST>
并且可以用同样的方式在监狱中添加正则表达式......
# jail.local
[test3known-interp]
filter=test
enabled = true
failregex = %(known/failregex)s
failure test 3 (jail.local) <HOST>
结果是:
$ bin/fail2ban-client -d -c config | grep addfail
['set', 'test3known-interp', 'addfailregex', 'failure test 1 (filter.d/test.conf)]
['set', 'test3known-interp', 'addfailregex', 'failure test 2 (filter.d/test.local)]
['set', 'test3known-interp', 'addfailregex', 'failure test 3 (jail.local) <HOST>']