我已经在我的控制下的服务器上安装了由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>']