我在服务器上使用以下规则:
sudo iptables -A INPUT -p udp --dport 500 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 4500 -j ACCEPT
sudo iptables -A FORWARD --match policy --pol ipsec --dir in --proto esp -s 10.0.2.0/24 -j ACCEPT
sudo iptables -A FORWARD --match policy --pol ipsec --dir out --proto esp -d 10.0.2.0/24 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 10.0.2.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 10.0.2.0/24 -o eth0 -j MASQUERADE
sudo iptables -t mangle -A FORWARD --match policy --pol ipsec --dir in -s 10.0.2.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
对于客户来说这相当于什么?
答案1
我假设允许相关的入站流量,例如,使用如下规则:
# iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
如果出站流量一般被阻止,则需要添加规则以允许以下类型的流量,具体取决于实际配置:
IKE(默认为 UDP 端口 500 和 4500):
# iptables -A OUTPUT -p udp --dport 500 -j ACCEPT # iptables -A OUTPUT -p udp --dport 4500 -j ACCEPT
您可以对此进行更多限制,例如使其特定于接口(
-o <name>
)或目标地址(-d <ip>
)。源端口也可以匹配,但在某些情况下,使用任意源端口(即0
在 strongSwan 配置中配置为源端口)可能是首选,甚至是必需的(例如,如果自定义服务器端口用来)。如果必须下载 CRL,或者通过在线证书状态协议 (OCSP) 验证服务器证书,则还必须允许适当的 TCP 端口,例如:
# iptables -A OUTPUT -p tcp --dport 80 -d <CRL server IP> -j ACCEPT # iptables -A OUTPUT -p tcp --dport <OCSP port> -d <OCSP server IP> -j ACCEPT
如果客户端位于 NAT 后面或强制使用 UDP 封装,则将使用 IKE 的 NAT-T UDP 端口发送 ESP 流量。否则,必须明确允许 ESP 流量:
# iptables -A OUTPUT -p 50 -j ACCEPT
再次,这可以被限制在特定的目的地等等。
实际 VPN 流量需要额外的规则。这可以使用 strongSwan 的默认上下脚本,它会自动插入协商流量选择器的规则,或者对与任何 IPsec 策略匹配的流量插入全局捕获规则:
# iptables -A OUTPUT -m policy --dir out --pol ipsec -j ACCEPT