使用Linux上的OpenConnect SSL VPN客户端连接到VPN服务器

时间:2020-02-23 14:30:28  来源:igfitidea点击:

OpenConnect是最初创建,以支持思科的AnyConnect SSL VPN的SSL VPN客户端。
它已被移植以支持现在称为脉冲连接安全的瞻博网络SSL VPN。
在本教程中,我们将查看OpenConnect SSL VPN客户端的安装和使用,以连接到Cisco的AnyConnect SSL VPN和Juniper Pulse Connect Secure。

OpenConnect SSL客户端的函数

从官方上,OpenConnect SSL客户端具有以下函数:通过HTTP代理连接,包括Libproxy支持自动代理配置。
通过Socks5 Proxy进行自动代理配置。
使用自动检测IPv4和IPv6地址,路由。
通过HTTP Forms的routes.Authentication。
使用SSL证书 - 来自本地文件,可信平台模块和PKCS#11 SmartCards.Authentication使用SecuriD软件令牌(在Libstoken)使用Oath TOTP或者Hotp软件令牌构建时身份验证。
使用Yubikey Oath令牌(用libpcsclite构建时)使用yubkentication多种配置之间进行选择关于VPN服务器列表的HTTPS和DTLS.Automatic更新单个VPN server.Data传输通过TCP(HTTPS)或者UDP(DTLS或者ESP).Keepalive和端点失效检测/configuration.Roaming支持,允许重新连接当本地IP地址更改时。
在没有root权限的情况下运行"Cisco Secure Desktop"(请参阅此处)和"GlobalP"旋转臀部报告"。

在Linux上安装OpenConnect SSL客户端

现在让我们看看在我们喜欢的Linux发行版上安装OpenConnect SSL客户端的不同方式:

在Arch Linux上安装OpenConnect SSL客户端

对于Arch Linux用户及其衍生分布,我们可以从官方Pacman存储库安装OpenConnect。

sudo pacman -S openconnect

也可以使用yaourt来完成同样的事情:

$yaourt -S openconnect

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

对于Debian及其衍生品,请使用APT包管理器安装OpenConnect包。

sudo apt update
sudo apt-get install openconnect

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

为CentOS和RHEL中, openconnect软件包可从 epel存储库。
添加存储库,然后安装OpenConnect包:

sudo yum install epel-release
sudo yum install openconnect

在Fedora上安装OpenConnect SSL客户端

对于Fedora,该包也可从欧莱克提供。
只有程序包管理器的名称更改:

sudo dnf install openconnect

在MacOS上安装OpenConnect SSL客户端

对于MacoS用户,请使用OpenConnect包使用 brew

$brew install openconnect

如何使用OpenConnect连接到SSL VPN服务器(手动)

一旦OpenConnect包已成功安装在操作系统上,我们应该准备连接到SSL VPN服务器,该服务器可以思科的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).

如何连接到SSL VPN服务器使用Openconnect一个bash脚本

我编写了一个Bash脚本,简化了连接,以便于连接到Cisco Autoconnect SSL VPN服务器。
把它放在你的 ~/.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客户端

为了连接到Pulse连接安全服务器,我们需要了解其证书的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>