如果 UFW 中没有打开端口,IPsec(strongswan)如何工作?

如果 UFW 中没有打开端口,IPsec(strongswan)如何工作?

我需要在服务器 A 和 B 之间设置站点到站点 VPN,其中服务器 A 由我管理,服务器 B 由客户端管理。服务器 A 运行的是 Ubuntu 20.04,我正在使用 strongswan 在我的终端设置 VPN。我正在使用 UFW 来管理服务器 A 的防火墙。

A 的公网 IP 地址:16.XX.XXX.17 B 的公网 IP 地址:14.XXX.XXX.94

现在,在对设置 VPN 并打开它进行必要的配置更改后,我能够看到以下日志/var/log/syslog

Mar 21 13:58:47 worker0 charon: 01[ENC] parsed IKE_AUTH response 1 [ IDr AUTH N(ESP_TFC_PAD_N) SA TSi TSr ]
Mar 21 13:58:47 worker0 charon: 01[IKE] authentication of '14.XXX.XXX.94' with pre-shared key successful
Mar 21 13:58:47 worker0 charon: 01[IKE] IKE_SA s-to-s[1] established between 16.XX.XXX.17[16.XX.XXX.17]...14.XXX.XXX.94[14.XXX.XXX.94]
Mar 21 13:58:47 worker0 charon: 01[IKE] scheduling reauthentication in 2644s
Mar 21 13:58:47 worker0 charon: 01[IKE] maximum IKE_SA lifetime 3184s
Mar 21 13:58:47 worker0 charon: 01[IKE] received ESP_TFC_PADDING_NOT_SUPPORTED, not using ESPv3 TFC padding
Mar 21 13:58:47 worker0 charon: 01[CFG] selected proposal: ESP:AES_CBC_256/HMAC_SHA2_256_128/NO_EXT_SEQ
Mar 21 13:58:47 worker0 charon: 01[IKE] CHILD_SA s-to-s{1} established with SPIs c97fea32_i f60175ca_o and TS 10.132.86.142/32 === 10.128.28.96/27
Mar 21 13:58:53 worker0 charon: 14[NET] received packet: from 14.XXX.XXX.94[4500] to 16.XX.XXX.17[4500] (80 bytes)
Mar 21 13:58:53 worker0 charon: 14[ENC] parsed INFORMATIONAL request 0 [ ]
Mar 21 13:58:53 worker0 charon: 14[ENC] generating INFORMATIONAL response 0 [ ]
Mar 21 13:58:53 worker0 charon: 14[NET] sending packet: from 16.XX.XXX.17[4500] to 14.XXX.XXX.94[4500] (80 bytes)
Mar 21 13:58:58 worker0 charon: 07[NET] received packet: from 14.XXX.XXX.94[4500] to 16.XX.XXX.17[4500] (80 bytes)
Mar 21 13:58:58 worker0 charon: 07[ENC] parsed INFORMATIONAL request 1 [ ]
Mar 21 13:58:58 worker0 charon: 07[ENC] generating INFORMATIONAL response 1 [ ]
Mar 21 13:58:58 worker0 charon: 07[NET] sending packet: from 16.XX.XXX.17[4500] to 14.XXX.XXX.94[4500] (80 bytes)
Mar 21 13:59:03 worker0 charon: 05[NET] received packet: from 14.XXX.XXX.94[4500] to 16.XX.XXX.17[4500] (80 bytes)

输出ipsec status

Security Associations (1 up, 0 connecting):
   s-to-s[1]: ESTABLISHED 5 minutes ago, 16.XX.XXX.17[16.XX.XXX.17]...14.XXX.XXX.94[14.XXX.XXX.94]
   s-to-s{1}:  INSTALLED, TUNNEL, reqid 1, ESP SPIs: c97fea32_i f60175ca_o
   s-to-s{1}:   10.132.86.142/32 === 10.128.28.96/27

ufw status

Status: active

To                         Action      From
--                         ------      ----
666                        LIMIT       Anywhere                   # For ssh
62626                      ALLOW       Anywhere                   # For wireguard
Anywhere on pv0            ALLOW       Anywhere                  
666 (v6)                   LIMIT       Anywhere (v6)              # For ssh
62626 (v6)                 ALLOW       Anywhere (v6)              # For wireguard
Anywhere (v6) on pv0       ALLOW       Anywhere (v6)             

如果我未打开4500 端口,服务器如何能够接收/var/log/syslog该端口上的数据包(根据 ipsec 登录)?我这里遗漏了什么?

我根本没有直接接触过 IP 表。我已经通过在 8000 端口上运行一个简单的 http 服务器(使用python3 -m http.server)来验证,我无法从服务器外部访问其他未打开的端口)

答案1

根据日志,主机充当客户端,而不是服务器。也就是说,它正在启动 IKE_SA 并发送第一条消息。默认情况下,通常不会阻止出站连接。使用 检查主机上的默认策略ufw status verbose

答案2

ufw不是系统中存在的唯一防火墙模块,它仅控制全局 iptables/nftables 链中的自己的链INPUT。您可以通过在服务器 A 上运行来验证是否安装了所需的规则,您应该会看到在某个可从 访问的 UDP:4500 上iptables -S有一些规则。ACCEPTINPUT

或者,存在多个路由/过滤表,虽然ufw在“通用”表(IIRC 索引 254)上运行,但 VPN 系统通常会分配一个编号较小的表(200 似乎是常见的选择),并设置受 VPN 控制的流量由该表路由/过滤。通过运行 进行验证nft list tables,然后您可以通过运行 检查表nft list ruleset table (table)。请查看手册页以了解确切的语法。

相关内容