我需要帮助创建规则。根据 CPanel,防火墙-d 在从 CentOS 迁移到 Alma Linux 时出现故障。他们不再支持 CentOS,所以我最终咬紧牙关并进行了迁移。一切都很顺利,直到我发现了防火墙-d,因为我的所有 ipset 和将新违规者添加到我的阻止列表中的过程都出现了故障。他们建议我转向 nftables。在研究它并尝试了一些方法后,我无法弄清楚我到底在寻找什么。
我想添加超时元素(1 天),就像 CPanel 对 cphulk 所做的那样。
我做了一些实验:
nft add table inet filter
nft add set inet filter jerk_ips { type ipv4_addr \; }
nft add chain inet filter jerk_ips '{ type filter hook input priority 0 ; }'
nft add rule inet filter jerk_ips ip saddr xxx.xxx.xxx.xxx drop
- xxx.xxx.xxx.xxx = 一些有问题的 IP 地址
我只是非常困惑这一切是如何运作的。我在网上读了很多,但它们都假设你知道所有这些嵌套的东西是如何运作的,然后我读到了“集合”,你可以在“集合”中放置一个类似于“超时”的标志。
我的最终结果是像往常一样简单地解析我的日志文件,找到违规者,阻止他们,但由于我正在重做所有事情,所以我想我会添加 24 小时/1 天的自动删除,因为我相信现在使用 nftables 比使用firewall-d 中的 fireall-cmd 更容易。
任何帮助,将不胜感激。
谢谢。
答案1
这nftables 维基有一个几乎完整的例子:
例如,每个元素都有超时:
% nft add table inet myfilter % nft add set inet myfilter myset {type ipv4_addr\; flags timeout\; } % nft add element inet myfilter myset {10.0.0.1 timeout 10s } % nft list ruleset table inet myfilter { set myset { type ipv4_addr flags timeout elements = { 10.0.0.1 timeout 10s expires 8s} } }
添加到集合定义flags timeout ;
(以及可能正确的 shell 转义/引用)可使元素自动过期。
这里在添加元素时提供了超时:在元素之后立即声明,语法如下nft(8)
:
{添加 | 创建 | 删除 | 获取 } 元素 [family] 表集 {元素[, ...] } 元素 := 键表达式选项[:值表达式] 选项 :=[超时 TIMESPEC][到期 TIMESPEC] [注释字符串] TIMESPEC := [numd][numh][numm][num[s]]
也可以有一个默认超时:当添加元素时未提供超时,则应用默认超时。此外flags timeout
,在创建集合时必须给出默认超时值,如语法所示nft(8)
:
添加套装 [家庭] 餐桌套装 { 类型类型 | typeof 表达式 ; [标志标志 ;][超时 超时;][gc-interval gc-interval ;] [elements = { element[, ...] } ;] [size size ;] [comment comment ;] [policy 'policy ;] [auto-merge ;] } {删除|列表|刷新}设置[family]表集 列表集 [family] 删除集[family]表句柄句柄 {添加 | 删除} 元素 [family] 表集 { 元素[, ...] }
因此,OP 的说法并非如此:
nft add set inet filter jerk_ips { type ipv4_addr \; }
使用(此处添加引号以避免 shell 解释,从而删除多个\
):
nft add 'set inet filter jerk_ips { type ipv4_addr ; flags timeout ; timeout 1d ; }'
获得 1 天的默认超时时间。仍可以根据需要添加一些具有不同超时时间的元素,如上文所示。
这里 1d = 24h = 1440m = 86400s