Firewall

nftables 拒絕導致放棄裁決

  • September 2, 2020

我有 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 並查看它們。是的,這令人困惑。

引用自:https://serverfault.com/questions/1032417