Linux

當伺服器防火牆不允許傳入的 OpenSSH 連接時,VPN 客戶端無法啟動與 VPN 伺服器的連接

  • March 15, 2020

原始問題

我已經設置了一個 OpenVPN 伺服器和一個 OpenVPN 客戶端。

問題是客戶端只能在伺服器防火牆允許傳入的 OpenSSH 連接時啟動連接。

當客戶端能夠發起連接時,這些是伺服器的防火牆規則。

$ ufw status verbose

To                         Action      From                  
--                         ------      ----                  
22/tcp (OpenSSH)           ALLOW IN    Anywhere              // <---
Anywhere on eth0           ALLOW IN    1194/udp              
Anywhere on tun0           ALLOW IN    Anywhere              
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)         // <---
Anywhere (v6) on eth0      ALLOW IN    1194/udp (v6)         
Anywhere (v6) on tun0      ALLOW IN    Anywhere (v6)         

Anywhere                   ALLOW OUT   1194/udp on eth0      
Anywhere                   ALLOW OUT   Anywhere on tun0      
Anywhere (v6)              ALLOW OUT   1194/udp (v6) on eth0 
Anywhere (v6)              ALLOW OUT   Anywhere (v6) on tun0 

我們ufw delete allow OpenSSH在伺服器上執行後,客戶端無法發起 VPN 連接

這是當客戶端無法啟動連接時我們收到的日誌輸出。

$ sudo openvpn --config /etc/openvpn/client.conf

...

OpenVPN 2.4.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on May 14 2019
library versions: OpenSSL 1.1.1  11 Sep 2018, LZO 2.08
Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Control Channel MTU parms [ L:1621 D:1184 EF:66 EB:0 ET:0 EL:3 ]
Data Channel MTU parms [ L:1621 D:1450 EF:121 EB:406 ET:0 EL:3 ]
Local Options String (VER=V4): 'V4,dev-type tun,link-mtu 1557,tun-mtu 1500,proto UDPv4,keydir 1,cipher AES-256-CBC,auth SHA1,keysize 256,tls-auth,key-method 2,tls-client'
Expected Remote Options String (VER=V4): 'V4,dev-type tun,link-mtu 1557,tun-mtu 1500,proto UDPv4,keydir 0,cipher AES-256-CBC,auth SHA1,keysize 256,tls-auth,key-method 2,tls-server'
TCP/UDP: Preserving recently used remote address: [AF_INET]xxx.xxx.xxx.xxx:1194
Socket Buffers: R=[212992->212992] S=[212992->212992]
UDP link local: (not bound)
UDP link remote: [AF_INET]xxx.xxx.xxx.xxx:1194

如果 VPN 伺服器不允許傳入的 OpenSSH 連接,客戶端如何啟動 OpenVPN 連接?

編輯

這是我們的客戶端配置:

ca ca.crt
cert vpn_client_01.crt
cipher AES-256-CBC
client
dev tun
key vpn_client_01.key
nobind
persist-key
persist-tun
proto udp
remote vpn.xxx.ca 1194
remote-cert-tls server
resolv-retry infinite
tls-auth ta.key 1
verb 4

如果源埠1194而不是目標埠,則您添加的兩個 OpenVPN 規則允許流量。這可能會產生兩個後果:

  1. 即使客戶端將1194其用作源埠,在通過 NAT 時也可能會發生變化。所以客戶端將被拒絕訪問。
  2. 如果有人1194用作源埠,他可以訪問您的所有UDP服務。

您可能希望在目標埠上添加規則:

ufw allow in on eth0 proto udp to any port 1194

至於為什麼防火牆允許 OpenVPN 訪問,當允許 OpenSSH 時,這是一個有趣的問題:您可以將 的輸出添加iptables -nvL ufw-user-input到問題中,或者檢查建立 OpenVPN 會話時增加了哪個規則計數器。

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