Fedora

重新啟動時 nftables 更改

  • May 5, 2020

這是我的/etc/sysconfig/nftables.conf

#!/usr/sbin/nft -f
flush ruleset
table ip filter {
   chain input {
       type filter hook input priority filter; policy accept;
       ct state established,related counter packets 264 bytes 17996 accept
       ct state invalid drop
       tcp dport 22 ip saddr 192.168.0.0/16 accept
       udp sport 53 accept
       drop
   }

   chain forward {
       type filter hook forward priority filter; policy accept;
   }

   chain output {
       type filter hook output priority filter; policy accept;
   }
}

當我使用nft -f /etc/sysconfig/nftables.conf但重新啟動後,我還會在上面顯示的表格下方獲得這些附加規則:

table bridge filter {
   chain INPUT {
       type filter hook input priority filter; policy accept;
   }

   chain FORWARD {
       type filter hook forward priority filter; policy accept;
   }

   chain OUTPUT {
       type filter hook output priority filter; policy accept;
   }
}

我不明白的是什麼?

附加問題。我正在努力強化機器。該機器應該用於基本上瀏覽網路,因此必須允許。我希望能夠從本地網路 ssh 到它。我錯過了什麼重要的東西嗎?

那是由較新版本的ebtables命令創建的兼容性表和鏈,用於操作網橋,但在ebtables兼容模式下使用nftables核心 API 。有些東西在某處執行了一個命令,即使只是為了驗證不存在ebtables規則,或者可能是為了自動載入一些ebtables規則集,這些規則集已轉換為nftables規則集。ebtables

你可以通過幾種方法知道它(在 CentOS8 上):

  • 實際可執行
# readlink -e /usr/sbin/ebtables
/usr/sbin/xtables-nft-multi
  • 顯示的版本
# ebtables -V
ebtables 1.8.2 (nf_tables)
  • 規則監控

術語1:

# nft -f /etc/sysconfig/nftables.conf
# nft monitor #command waits in event mode

術語2:

# ebtables -L
Bridge table: filter

Bridge chain: INPUT, entries: 0, policy: ACCEPT

Bridge chain: FORWARD, entries: 0, policy: ACCEPT

Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

再次是第 1 項(Fedora 較新的nftables版本將顯示網橋的-200優先級及其符號等價物filter):

add table bridge filter
add chain bridge filter INPUT { type filter hook input priority -200; policy accept; }
add chain bridge filter FORWARD { type filter hook forward priority -200; policy accept; }
add chain bridge filter OUTPUT { type filter hook output priority -200; policy accept; }
# new generation 7 by process 16326 (ebtables)

由於基礎鏈不包含任何規則並且有接受政策,因此不會受到任何影響。該系統還需要有一個橋來使用這個表和鏈。

如果 CentOS8 和您目前的 Fedora 版本仍然足夠接近,這可能是通過使用iptables-ebtables包中的 systemd ebtables服務創建的。如果不需要橋接過濾,可以考慮去掉這個包。如果確實需要,您仍然可以使用nft 。

添加的表屬於家庭這一事實表明它是ebtables而不是iptablesip6tablesarptables,它們都會給出相同的行為,如果還沒有出現則創建不同的表族(resp. ipip6arp)及其基鏈. 所以應該避免使用相同的表名以避免任何衝突,或者至少不是相同的表+鏈組合(例如:(大寫)鏈中的nft規則可能與iptables等發生衝突)ip filter INPUT

更多關於這裡的資訊:

從 iptables 遷移到 nftables - nftables wiki

舊版 xtables 工具 - nftables wiki

使用 iptables-nft:混合 Linux 防火牆 - Red Hat


關於附加問題:

您的規則似乎允許基本客戶端使用(包括來自 LAN 的 SSH 訪問),儘管有一個重要例外:

udp sport 53 accept

將允許訪問系統的任何UDP 埠,只要“掃描”是從 UDP 源埠 53 進行的。

用這個更明智的規則替換它:

iif lo accept

允許本地通信暢通無阻(包括可能的本地 DNS 伺服器)。

引用自:https://unix.stackexchange.com/questions/584601