在Linux上使用OpenConnect SSL VPN客户端连接到VPN Server

时间:2020-02-23 14:38:22  来源:igfitidea点击:

OpenConnect是一个SSL VPN客户端,最初创建是为了支持Ciscos AnyConnect SSL VPN。此后已被移植为支持Juniper SSL VPN(现在称为Pulse Connect Secure)。在本指南中,我们将研究OpenConnect SSL VPN客户端连接到Cisco AnyConnect SSL VPN和Juniper Pulse Connect Secure的安装和使用。

OpenConnect SSL客户端的功能

OpenConnect SSL Client在官方上具有以下功能:通过HTTP代理进行连接,包括对自动代理配置的libproxy支持;通过SOCKS5代理进行连接;自动检测IPv4和IPv6地址,路由;通过HTTP形式进行身份验证;使用SSL进行身份验证来自本地文件,受信任的平台模块和PKCS#11智能卡的证书。使用SecurID软件令牌进行身份验证(使用libstoken构建时)使用OATH TOTP或者HOTP软件令牌进行身份验证使用Yubikey OATH令牌(使用libpcsclite构建时)进行身份验证用户组支持选择在一台VPN服务器上的多个配置之间;通过TCP(HTTPS)或者UDP(DTLS或者ESP)进行数据传输;在HTTPS和DTLS上都进行Keepalive和Dead Peer检测; VPN服务器列表/配置的自动更新;漫游支持,允许重新连接本地IP地址更改。可以在没有root特权的情况下运行。支持Cisco Secure Desktop(请参阅此处)和GlobalProte ct HIP报告。

在Linux上安装OpenConnect SSL Client

现在让我们看看在我们喜欢的Linux发行版上安装OpenConnect SSL Client的不同方法:

在Arch Linux上安装OpenConnect SSL Client

对于Arch Linux用户及其派生发行版,我们可以从Pacman官方存储库安装openconnect。

sudo pacman -S openconnect

也可以使用yaourt完成此操作:

$yaourt -S openconnect

在Debian/Ubuntu上安装OpenConnect SSL客户端

对于Debian及其衍生版本,请使用aptpackage管理器安装openconnect软件包。

sudo apt update
sudo apt-get install openconnect

在CentOS/RHEL上安装OpenConnect SSL客户端

对于CentOS和RHEL,可以从epel存储库中获得openconnect软件包。添加存储库,然后安装openconnect软件包:

sudo yum install epel-release
sudo yum install openconnect

在Fedora上安装OpenConnect SSL客户端

对于Fedora,该软件包也可以从epel获得。只是软件包管理器的名称发生了变化:

sudo dnf install openconnect

在macOS上安装OpenConnect SSL Client

对于macOS用户,请使用" brew"安装openconnect软件包。

$brew install openconnect

如何使用Openconnect连接到SSL VPN服务器(手册)

一旦在操作系统上成功安装了openconnect软件包,就应该准备连接到SSL VPN服务器,该服务器可以使用Cisco AnyConnect SSL VPN和Juniper Pulse Connect Secure。

简单连接遵循以下语法:

$sudo openconnect -u user --passwd-on-stdin vpnserver

系统将提示我们输入密码,请参见以下示例:

$sudo openconnect 192.168.1.1
POST https://192.168.1.1/
Connected to 192.168.1.1:443
SSL negotiation with 192.168.1.1

Enter 'yes' to accept, 'no' to abort; anything else to view: yes
Connected to HTTPS on 192.168.1.1
Got HTTP response: HTTP/1.0 302 Object Moved
GET https://192.168.1.1/
Connected to 192.168.1.1:443
SSL negotiation with 192.168.1.1
Server certificate verify failed: signer not found
Connected to HTTPS on 192.168.1.1
Got HTTP response: HTTP/1.0 302 Object Moved
GET https://192.168.1.1/+webvpn+/index.html
SSL negotiation with 192.168.1.1
Connected to HTTPS on 192.168.1.1
Please enter your username and password.
GROUP: [ANYCONNECT_PROFILE]
Please enter your username and password.
Username:jmutai
Password:
POST https://192.168.1.1/+webvpn+/index.html
Got CONNECT response: HTTP/1.1 200 OK
CSTP connected. DPD 30, Keepalive 20
Connected as 192.168.4.2, using SSL
Established DTLS connection (using GnuTLS). Ciphersuite (DTLS0.9)-(DHE-RSA-4294967237)-(AES-256-CBC)-(SHA1).

如何使用Bash脚本使用Openconnect连接到SSL VPN服务器

我写了一个bash脚本来简化连接,以方便连接到Cisco Autoconnect SSL VPN服务器。根据shell,将其放入~/.zshrc或者~/.bashrc。

myvpn () {
    local vpn_server="vpnserver"
    local vpn_username="user"
    local vpn_password="password"
    # try connect
    while true; do
        retry_time=$(($(date +%s) + 30))
        sudo openconnect \
            -u $vpn_username $vpn_server --non-inter --passwd-on-stdin <<< "$vpn_password"
        current_time=`date +%s`
        if [ $current_time -lt retry_time ]; then
            sleep $(( $retry_time - $current_time ))
        fi
    done
}

提供正确的变量并保存文件。现在,每次我们想连接到VPN时,请按名称调用该函数:

$myvpn

Juniper 客户端

为了连接到Pulse Connect Secureserver,我们需要知道其证书的SHA-1.

openconnect --servercert=sha1:<HASH> \
--authgroup="single-Factor Pulse Clients" \
--protocol=nc <VPN_SERVER_ADDRESS>/dana-na/auth/url_6/welcome.cgi \
--pid-file="/var/run/work-vpn.pid" --user=<USERNAME>

在本指南中,我们学习了如何在Linux和macOS上安装和使用OpenConnect SSL客户端。