简单明了的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