想象一下,有一些应用程序做了一件愚蠢的事情,比如配置和覆盖所有防火墙规则,/etc/nftables.conf
并在每次更新时启用所述防火墙(即使主机本身已经在防火墙后面,这在很大程度上是多余的)。
而在同一台服务器上运行的其他一些东西需要从外部源访问,比如备份客户端。虽然我可以通过修改默认配置并重新启动防火墙来设置防火墙规则以允许这些其他应用程序运行,但它们会不断中断。
我发现将额外的规则放在不同的文件中可以保护它们免受破坏。现在我希望 nftables 加载这两个文件,但在我的文件优先级中给出规则。这似乎是一个简单的任务,但 nftables 是独特的拜占庭式复杂的做到这一点。以下是一些要求:
- 我不知道每个服务器上实际调用的输入链是什么。它可能是
inet.input
orip4.INPUT
或ip.input
orip4.Input
。它运行的闭源代码可能来自开发人员不关心的 Windows 环境,但 linux 区分大小写。nftables 定义也区分大小写,如果命名错误,我的规则将无效。
到目前为止,我的解决方案如下:
首先,我修改/lib/systemd/system/nftables.service
为指向/etc/nftables.main.conf
. 然后将此文件更改为包括:
include "/etc/nftables.conf"
include "/etc/nftables/*"
然后后一个目录包含我要在默认规则之上应用的修改。然而,如果命名正确,这样做似乎会将规则附加到链中。
- 有没有一种简单的方法来添加这样的规则?
- 是否有一种简单的方法来引用“ipv4 链,尽可能早地在过滤过程中”,即使封闭源代码的混乱程序做了一件没有一致链名的混乱事情,它也会可靠地工作?
我想添加的示例文件:
table inet filter {
chain input {
jump myappA
jump myappB
}
chain myappA {
ip saddr 1.2.3.4 tcp dport {appA-agent, appA-scanner} accept comment "example app A"
}
chain myappB {
ip saddr 1.2.3.5 tcp dport {appBport} accept comment "example app B"
}
}