我需要为 strongSwan 客户端设置哪些 iptables 规则?

我需要为 strongSwan 客户端设置哪些 iptables 规则?

我在服务器上使用以下规则:

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
    

相关内容