Linux防火墙概念理念

默认的iptables表为filter(过滤器)。它包含3个默认链:FORWARD、INPUT和OUTPUT,内核处理的每个包都要经过3个链中的某一个。FORWARD链里的规则用于在一个网络接口收到的、而且需要转发到另一个网络接口的所有包。INPUT和OUTPUT链里的规则分别用于目的是本地主机,或者从本地主机发出的流量。

用到wireguard VPN这个工具,配置中需要防火墙的处理。添加如下配置

# 启动动作, 这里就要把 eth0 替换成之前记下的外网网卡名称 , wg0 是等下创建的虚拟网卡名称
# 配置防火墙规则
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -A FORWARD -o wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# 关闭动作, 操作同上
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

对于 PREROUTING 和 POSTROUTING不大好记忆

仔细想想,是这样的。route是公网上的寻址,在内网要发出到公网时,需要将私网IP转换为公网IP,所以是PREROUTING。主要用于IP共享 🙂


参考:鸟哥的 第九章、防火墙与 NAT 服务器