简单明了的nftables防火墙配置(arch为例)

时间:2024-03-10 16:09:59

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