1. 程式人生 > >簡單明瞭的nftables防火牆配置(arch為例)

簡單明瞭的nftables防火牆配置(arch為例)

Arch Linux的核心已經包含了netfilter包過濾框架。

/etc/nftables.conf預設包含著一個簡單的防火牆設定,但過於簡單,

現在重新編寫nft的設定(這裡列舉的規則適合個人電腦,伺服器或是其它的機器可以參考其它資料配置更加適合的規則)。


  # nft list ruleset 檢查已經寫了的過濾規則

  # nft flush ruleset 清除當前的ruleset

  # nft add table inet filter 建立一個名為“inet filter”的表

建立幾條重要的鏈

  # nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }\

  # nft add chain inet filter forward { type filter hook forward priority 0 \; policy drop \; }

  # nft add chain inet filter output { type filter hook output priority 0 \; policy accept \; }

# nft add chain inet filter TCP
# nft add chain inet filter UDP
編寫幾條重要的規則

# nft add rule inet filter input ct state related,established accept

# nft add rule inet filter input iif lo accept # nft add rule inet filter input ct state invalid drop # nft add rule inet filter input ip protocol icmp icmp type echo-request ct state new accept # nft add rule inet filter input ip protocol udp ct state new jump UDP # nft add rule inet filter input ip protocol tcp tcp flags \& \(fin\|syn\|rst\|ack\) == syn ct state new jump TCP # nft add rule inet filter input ip protocol udp reject # nft add rule inet filter input ip protocol tcp reject with tcp reset # nft add rule inet filter input counter reject with icmp type prot-unreachable

若需要監聽80或443埠(其它埠參照這兩個例子即可),可以新增一下規則
# nft add rule inet filter TCP tcp dport 80 accept
# nft add rule inet filter TCP tcp dport 443 accept

# nft list ruleset > /etc/nftables.conf 將剛寫好的ruleset儲存到/etc/nftables.conf檔案裡。
最後,用# lsmod | grep '^nf'檢視nft跟哪些modules有關。
建立一個檔案/etc/modules-load.d/nftables.conf,並將這些模組名字加入到該檔案。

參考資料,https://wiki.archlinux.org/index.php/Nftables