nftables 拒绝,并判定为删除

nftables 拒绝,并判定为删除

我已设置 nftables 来拒绝与我的允许块不匹配的数据包(nft list ruleset如下所示),但这些数据包却被丢弃了。

就上下文而言,我有一个服务监听端口 8080,目前只有本地主机可以访问该端口。我的设置允许这样做,但客户端的请求超时,而不是被拒绝。

这是我正在使用的规则集(为简洁起见略有截断),包括我用于调试的跟踪:

# nft list ruleset
table inet firewall {
    set allowed_protocols {
            type inet_proto
            elements = { icmp, ipv6-icmp }
    }

    set allowed_interfaces {
            type ifname
            elements = { "lo" }
    }

    set allowed_tcp_dports {
            type inet_service
            elements = { 22, 80, 443 }
    }

    chain allow {
            ct state established,related accept
            meta l4proto @allowed_protocols accept
            iifname @allowed_interfaces accept
            meta nftrace set 1
            tcp dport @allowed_tcp_dports accept
    }

    chain input {
            type filter hook input priority 20; policy accept;
            jump allow
            meta nftrace set 1
            reject
    }

    chain forward {
            type filter hook forward priority 20; policy accept;
            jump allow
            meta nftrace set 1
            reject
    }
}

从我的跟踪中,我可以看到数据包被丢弃:

trace id 36f72c1b inet firewall allow rule meta nftrace set 1 (verdict continue)
trace id 36f72c1b inet firewall allow verdict continue
trace id 36f72c1b inet firewall input rule meta nftrace set 1 (verdict continue)
trace id 36f72c1b inet firewall input rule reject (verdict drop)

它明确地读取了拒绝,但随后决定还是放弃。知道这是什么原因吗?

答案1

在跟踪中看到verdict drop是正常的。拒绝仍会发送正确的 ICMP 错误,而不是简单地丢弃数据包。如果您想确定,可以启动 Wireshark 并查看它们。是的,这很令人困惑。

相关内容