Firewall
nftables 拒絕導致放棄裁決
我有 nftables 設置來拒絕與我的允許塊不匹配的數據包(
nft list ruleset
在下面添加),但是這些數據包被丟棄了。對於上下文,我有一個服務監聽埠 8080,只有 localhost 才能訪問(目前)。我的設置允許這樣做,但客戶的請求超時而不是被拒絕。
這是我正在使用的規則集(為簡潔起見略微截斷),包括我用於調試的跟踪:
# 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)
它明確讀取拒絕,但隨後決定放棄。知道這是什麼原因嗎?
在跟踪中看到
verdict drop
是正常的。拒絕仍然發送正確的 ICMP 錯誤,而不是簡單地丟棄數據包。如果你想確定的話,你可以啟動 Wireshark 並查看它們。是的,這令人困惑。