升级至 22.04 后 OpenVPN 双因素身份验证出现问题

升级至 22.04 后 OpenVPN 双因素身份验证出现问题

从 Ubuntu 20.04 升级到 22.04 后,我在连接到运行 Ubuntu 22.04 的服务器时遇到问题。服务器运行的是 openvpn“OpenVPN 2.5.5”,客户端都出现了同样的问题,运行的是 Ubuntu 22.04(OpenVPN 2.5.5)或 Ubuntu 20.04(OpenVPN 2.4.7)。服务器是一个简单的 Ubuntu 22.04 最小服务器安装和“apt install openvpn”。

您会在文本末尾找到配置(我知道有一些旧项目,但它们似乎不是问题,因为我在测试时也更改了它们)。

当我尝试连接时,有时可以连接,但有时会因身份验证错误而失败(从配置中可以看出,我们使用双因素身份验证)。大约 70% 的连接可以连接成功。openvpn 的默认配置在出现身份验证错误时不会重试,这可以通过在客户端配置中使用“auth-retry nointeract”来缓解,但 VPN 连接仍然会“暂停”。这可以通过在客户端和服务器中使用 reneg-sec 0 来进一步缓解,但这两种方法都无法解决问题。

在服务器的身份验证日志中我得到以下内容

**** 在客户端重启 openvpn 进行测试

8 月 4 日 07:48:49 openvpn-test01 openvpn[26669]: pam_userdb(openvpn:auth): 用户“client-xxxx”被拒绝访问(密码错误)8 月 4 日 07:50:01 openvpn-test01 openvpn[28663]: pam_userdb(openvpn:auth): 用户“client-xxxx”被授予访问权限

**** 在客户端重启 openvpn 进行测试

8 月 4 日 07:51:50 openvpn-test01 openvpn[28663]: 消息重复 4 次:[pam_userdb(openvpn:auth): 用户“client-xxxx”被拒绝访问(密码错误)] 8 月 4 日 07:52:01 openvpn-test01 openvpn[28663]: pam_userdb(openvpn:auth): 用户“client-xxxx”被授予访问权限

在客户端 openvpn 日志中我看到(证书检查顺利之后):

2022 年 8 月 4 日星期四 09:46:02 us=958577 AUTH:已收到控制消息:AUTH_FAILED 2022 年 8 月 4 日星期四 09:46:02 us=958860 TCP/UDP:正在关闭套接字 2022 年 8 月 4 日星期四 09:46:02 us=958936 已收到 SIGUSR1[soft,auth-failure],进程正在重新启动 2022 年 8 月 4 日星期四 09:46:02 us=958986 重新启动暂停,10 秒

服务器日志(不要看时间戳,它们来自不同的尝试):

2022-08-04 07:51:50 us=384638 PLUGIN AUTH-PAM:BACKGROUND:收到的命令代码:0 2022-08-04 07:51:50 us=384739 PLUGIN AUTH-PAM:BACKGROUND:用户:client-xxx 2022-08-04 07:51:50 us=389201 PLUGIN AUTH-PAM:BACKGROUND:my_conv[0] query='密码:' style=1 2022-08-04 07:51:50 us=389604 PLUGIN AUTH-PAM:BACKGROUND:用户'client-xxx'身份验证失败:身份验证失败 2022-08-04 07:51:50 us=390537 192.168.123.10:33581 PLUGIN_CALL:POST /usr/lib/x86_64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so/PLUGIN_AUTH_USER_PASS_VERIFY status=1 2022-08-04 07:51:50 us=390599 192.168.123.10:33581 PLUGIN_CALL:插件函数 PLUGIN_AUTH_USER_PASS_VERIFY 失败,状态为 1:/usr/lib/x86_64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so 2022-08-04 07:51:50 us=390690 192.168.123.10:33581 TLS 身份验证错误:对等方的身份验证用户名/密码验证失败 2022-08-04 07:51:50 us=391547 192.168.123.10:33581 控制通道:TLSv1.3,密码 TLSv1.3 TLS_AES_256_GCM_SHA384,对等证书:4096 位 RSA,签名:RSA-SHA256 2022-08-04 07:51:50 us=391626 192.168.123.10:33581 [client-xxx] 使用 [AF_INET]192.168.123.10:33581 发起对等连接 2022-08-04 07:51:51 us=566578 192.168.123.10:33581 PUSH:收到控制消息:“PUSH_REQUEST”

如果连接失败,我也会在 tcpdump 中看到此信息(openvpn-test01 是服务器):

07:57:49.100580 IP 192.168.123.10 > openvpn-test01: ICMP 192.168.123.10 udp 端口​​ 51174 无法访问,长度 156

到目前为止我已经尝试过:

  1. 在 Ubuntu 22.04 上安装 openvpn 2.4 -> 行为相同
  2. 调整配置(例如设置“多宿主”)->未成功(请记住,它在 20.04 上完美运行,并且大多数时候在 22.04 上也完美运行)
  3. 调试客户端以查看发生了什么(使用 strace)-> 一旦 strace 连接到客户端,我就无法重现错误(连续 100 次连接没有问题)

所以我猜测 openvpn 服务器和 pam 模块或客户端之间存在某种时间问题。

还有其他人遇到过这个问题吗?可以提示我这里出了什么问题吗?

谢谢。

最好的,

服务器:

mode server
tls-server
port 1194 
proto udp 
dev tun_xxx
persist-key
persist-tun
ca [inline]
cert [inline]
key [inline]
dh [inline]
tls-auth [inline] 0
#tls-version-min 1.2
explicit-exit-notify 1
float
auth SHA512

cipher AES-256-CBC

crl-verify crl.pem
log /var/log/openvpn.log

client-config-dir ccd

topology subnet
push "topology subnet"
ifconfig 10.20.40.1 255.255.255.0
route 10.20.40.0 255.255.255.0 10.20.40.1 1
push "route 10.20.40.0 255.255.255.0 10.20.40.1 1"
comp-lzo

max-clients 254
user nobody                                                                                                                                                                                                                      
group nogroup                                                                                                                                                                                                                    
keepalive 10 60                                                                                                                                                                                                                 
status /var/log/openvpn-status.log                                                                                                                                                                                               
verb 4                                                                                                                                                                                                                           
chroot /opt/yyy/xxx/
reneg-sec 0
plugin /usr/lib/x86_64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn

pam.d 配置:

auth   required    pam_userdb.so    crypt=crypt db=/opt/xxx/yyyy/zzzz-pw
account required      pam_permit.so

客户:

client
dev tun_xxx
proto udp
port 1194
remote xx.xx.xx.xx 
float
nobind
pull
persist-key
persist-tun
ca [inline]
cert [inline]
key [inline]
remote-cert-tls server
tls-auth [inline] 1
auth SHA512
cipher AES-256-CBC
log /var/log/openvpn.log
verb 4 
route-method exe
route-delay 2
auth-user-pass xxx.txt
auth-retry nointeract
comp-lzo
auth-nocache

相关内容