如何为 TCP 和 UDP 端口配置 fail2ban?

如何为 TCP 和 UDP 端口配置 fail2ban?

我想禁止一些 DNS 请求进入我的命名服务器。服务器通常监听 TCP 和 UDP 端口 53 并将请求记录到/var/log/named/query.log文件中。因此,我在 的末尾添加了以下条目/etc/fail2ban/jail.local

[named-xyz]
enabled  = true
port     = domain
filter   = xyz
logpath  = /var/log/named/query.log
bantime  = 1d
action   = %(action_)s

但是,这只会禁止 TCP 端口(默认情况下)。要禁止 UDP 端口,我需要添加另一个条目:

[named-xyz-udp]
enabled  = true
port     = domain
protocol = udp
filter   = xyz
logpath  = /var/log/named/query.log
bantime  = 1d
action   = %(action_)s

拥有类似的条目可能看起来并不过分,但它有一个缺点,即记录重复的条目单个“错误”请求像这样的文件fail2ban.log

fail2ban.filter         [11619]: INFO    [named-xyz-udp] Found a.b.c.d
fail2ban.filter         [11619]: INFO    [named-xyz] Found a.b.c.d

我怎样才能同时禁止 UDP/53 和 TCP/53单一规则jail.local? 对我来说,Aprotocol = all线不起作用。

失败2ban版本是v0.11.1

答案1

就我的情况来说, Aprotocol = all线不起作用。

这取决于你使用的封禁措施。你说的“不起作用”是什么意思?

对于操作(如iptables-allports接受all),这样设置可能就足够了,对于其他操作(接受多个协议,如nftables),可以使用protocol = tcp,udp(或他们需要的任何分隔符代替逗号)进行设置。
对于不接受多个协议的操作(如iptables-multiport),需要指定 2 个操作,以下是适用于最新 fail2ban 版本的示例 -https://github.com/fail2ban/fail2ban/blob/10cd81552538fa950cefc32787b9f82b5ee1b998/config/jail.conf#L748-L749

对于不接受插值%(default/action_)s或多个参数的旧版本[...][...],您需要设置如下内容:

action = %(action_)s[name=%(__name__)s-tcp, protocol="tcp"]
         %(action_)s[name=%(__name__)s-udp, protocol="udp"]

(或者通过fail2ban 0.9.x甚至%(action_)s用其替换整体定义来自默认部分):

action = %(banaction)s[name=%(__name__)s-tcp, actionname=%(__name__)s-tcp, protocol="tcp", port="%(port)s", chain="%(chain)s"]
         %(banaction)s[name=%(__name__)s-udp, actionname=%(__name__)s-udp, protocol="udp", port="%(port)s", chain="%(chain)s"]

相关内容