Vpn

IPsec (strongswan) 如何在不打開 UFW 埠的情況下工作?

  • March 22, 2022

我需要在伺服器 A 和 B 之間設置站點到站點 VPN,其中伺服器 A 由我管理,伺服器 B 由客戶端管理。伺服器 A 正在執行 Ubuntu 20.04,我正在使用 strongswan 來設置我的 VPN。我正在使用 UFW 來管理伺服器 A 的防火牆。

A的16.XX.XXX.17 公網IP地址: 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)             

/var/log/syslog如果我不打開該埠,伺服器如何能夠在 4500 埠(根據 ipsec 登錄)上接收數據包?我在這裡想念什麼?

我根本沒有直接接觸過 IP 表。我已經通過在 8000 埠(使用python3 -m http.server)上執行一個簡單的 http 伺服器來驗證我無法從伺服器外部訪問其他未打開的埠)

根據日誌,主機充當客戶端,而不是伺服器。也就是說,它正在發起 IKE_SA 並發送第一條消息。預設情況下,出站連接通常不會被阻止。使用 .檢查主機上的預設策略ufw status verbose

ufw``INPUT不是系統中存在的唯一防火牆模組,它僅在全域iptables/nftables 鏈中控制自己的鏈。您可以通過在伺服器 A 上執行來驗證是否安裝了所需的規則iptables -S,您應該看到有一些ACCEPTUDP:4500 的規則可以從INPUT.

或者,有多個路由/過濾表,並且ufw在“通用”表(IIRC 索引 254)上執行時,VPN 系統通常分配一個具有較小編號的表(200 似乎是一種常見的選擇)並設置流量這受 VPN 控制的影響,由該表路由/過濾。通過執行驗證nft list tables,然後您可以通過執行檢查表nft list ruleset table (table)。請檢查您的手冊頁以獲取確切的語法。

引用自:https://serverfault.com/questions/1096713