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