我在 macOS 上使用 PF 作为终止开关(请参阅这)。
使用 PF 是可能的,因为 ipsec 连接有它自己的接口 (ipsec0)。
假设 ipsec 连接与以太网位于同一接口上,我如何在 Linux 上实现类似的功能?
答案1
看起来您正在寻找类似nftables
或iptables
或位于这些之上的任何防火墙,如firewalld
或ufw
。
答案2
使用 Netfilter 的政策模块可以轻松创建适用于隧道或非隧道流量的防火墙规则。例如,要拒绝所有与任何 IPsec 策略不匹配(即未通过隧道)的出站流量,您可以使用如下规则:
iptables -A OUTPUT -m policy --pol none --dir out -j REJECT --reject-with icmp-admin-prohibited
或者,您可以默认阻止所有出站流量(例如,将链的策略设置OUTPUT
为DROP
),然后使用以下命令明确允许隧道流量:
iptables -A OUTPUT -m policy --pol ipsec --dir out -j ACCEPT
如果有必要,可以使这些规则更加具体(例如,仅限于某些接口或 IP 地址)。
在这两种情况下,您都需要额外的规则来允许 IKE(UDP 500/4500)和 ESP 流量(协议 50,如果使用 UDP 封装,则与 IKE 相同的端口),以及 DNS(除非 VPN 服务器 IP 是硬编码的)和可能的 DHCP。