如何在本地fail2banfilter定义中添加规则?

我已经在我的控制下的服务器上安装了由Debian打包的fail2ban。 由于我有一些以前的失败返回,我将它们放到本地filter定义文件中,这样它们也会被考虑。 因此,我结束了例如/etc/fail2ban/filter.d/sshd.conf和/etc/fail2ban/filter.d/sshd.local。 这是build议build立的方式 ,它似乎正在工作就好了。

但是,在.local文件中,我实际上是从.conf文件中replace了failregexes的整个列表。 该文档似乎并没有表明有任何其他的方式来做到这一点,我只是简单地将分发提供的.conf文件复制到一个.local文件,并做了一些补充。

如果我可以简单地修改这个列表,那么上游和Debian维护者的工作将会受益于分布式维护的日志条目filter正则expression式的变化。

我能想到的唯一真正的解决方法是实际创build两个jail,一个使用发行版提供的configuration,另一个使用我自己的configuration。 这似乎有一个(相当重要的)缺点,他们被视为独立的监狱(你期望与这样的设置)。

当然,我不可能是唯一一个想把我自己的一些失败软件join到已经存在的集合中,而且维护起来最less的麻烦。

是否可以通过站点本地或主机本地文件修改 fail2banfilter定义中的failregex和ignoreregex列表,而不对相应的全局或分发提供的文件进行任何更改? 如果是,那该怎么办呢?

让我们看看/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或其他指令的条目; 你只能更换它们。

你的感觉是正确的。 这绝对是fail2banconfiguration文件格式的一个缺点。 我会向开发者抱怨。

我有相同的要求,并将其作为问题发布。 笔者似乎正在努力: 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> 

和正则expression式可以用相同的方式添加到监狱里。

 # 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>']