前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Anyconnect的VPN环境部署(1)-Ubuntu系统下安装Cisco AnyConnect VPN

Anyconnect的VPN环境部署(1)-Ubuntu系统下安装Cisco AnyConnect VPN

作者头像
洗尽了浮华
发布2022-03-28 15:20:43
9.5K0
发布2022-03-28 15:20:43
举报
文章被收录于专栏:散尽浮华散尽浮华

打算在公司IDC机房部署一套V**环境,经过考虑,最终决定采用Cisco下的开源技术AnyConnect。 AnyConnect的优势有: 1)长连接,待机不会断开; 2)速度快,稳定性好; 3)安全性好,全程加密;另外,支持freeradius认证功能; 4)能够下发路由表给客户端,这个功能是最激动人心的。因为如果长期连接,那么肯定是某些服务走V**,而国内的网站可以走自己的网络体验最好。 5)耗电量较低;

AnyConnect是思科的安全远程接入解决方案,部署Anyconnect需要安装ocserv(OpenConnect server),它是一个OpenConnect SSL协议服务端,0.3.0版后兼容使用AnyConnect SSL 协议的终端。ocserv(OpenConnect Server)是由 GnuTLS 的作者 Nikos Mavrogiannopoulos 开发的一个能够兼容 Cisco Anyconnect 的开源服务端( SSL V**),支持*nix/BSD 平台,最早是作为 OpenConnect(Linux下的兼容Cisco ASA的开源客户端)对应的服务端,在后续版本( 0.3.0 开始)中加入了对 Cisco Anyconnect 客户端的支持。下面介绍在ubuntu系统下安装Anyconnect的操作记录:

安装过程如下(采用一键安装方式) root@localhost:~# apt-get update && apt-get upgrade -y root@localhost:~# apt-get install wget root@localhost:~# wget http://git.io/p9r8 --no-check-certificate -O ocservauto.sh //下载地址:https://pan.baidu.com/s/1i59e2hB (提取密码:bp4w) 如果以前使用了该脚本进行安装,只需要输入下面命令更新(只更新相关脚本,服务器不会更新) root@localhost:~# wget http://git.io/ocservauto -O- --no-check-certificate|bash - root@localhost:~# bash ocservauto.sh

接着会进行一段时间的安装,如果顺利的话,出现下面信息则说明安装成功了!

如果安装失败可以查阅安装日志文件ocinstall.log,日志文件在脚本所在文件夹下,可以使用下面命令逐步阅读 一般情况下安装成功之后,服务器就在启动状态了。

我的部署机器由于是虚拟机(没有外网ip),采用squid代理方式对外访问,导致脚本中定义的ftp方式对freeradius-client-1.1.7.tar.gz和ocserv-0.10.8.tar.xz安装包下载失败。 解决办法:将上面这两个包单独下载下来,放在和ocservauto.sh脚本同一目录路径下,然后再重新执行脚本进行安装即可。

这里可以简单使用本地浏览器查看服务器信息,在本地浏览器输入 https://IP 或域名:(英文冒号)端口

ocserv的默认安装目录是/etc/ocserv,相关文件都在这个路径下,如配置文件ocserv.conf等

代码语言:javascript
复制
root@localhost:~# cd /etc/ocserv/
root@localhost:/etc/ocserv# ls
ca-cert.pem  config-per-group  dh.pem    ocserv.conf     ocserv-up.sh  server-cert.pem
CAforOC      defaults          ocpasswd  ocserv-down.sh  profile.xml   server-key.pem

ocserv服务在安装后默认就启动了,安装中选择证书登陆方式,即https方式,所以tcp端口选择的是443

代码语言:javascript
复制
root@localhost:~# ps -ef|grep ocserv
root       726     1  0 01:22 ?        00:00:00 ocserv-main
root       728   726  0 01:22 ?        00:00:00 ocserv-secm
root       865   849  0 01:26 pts/1    00:00:00 grep --color=auto ocserv
root@localhost:~# lsof -i:443
COMMAND   PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
ocserv-ma 726 root    4u  IPv4 10406026      0t0  TCP *:https (LISTEN)
ocserv-ma 726 root    5u  IPv6 10406027      0t0  TCP *:https (LISTEN)

ocserv服务启动命令: /etc/init.d/ocserv start/stop/restart/status ocserv服务启动过程中若是出现下面两个小报错: 1)/usr/sbin/ocserv: error while loading shared libraries: libtspi.so.1: cannot open shared object file:No such file or directory 解决办法: root@localhost:~# apt-get install libtspi-dev

2)/usr/sbin/ocserv: error while loading shared libraries: libgnutls.so.28: cannot open shared objectfile: No such file or directory 解决办法:安装libgnutls 下载地址:https://pan.baidu.com/s/1skJxpI9 提取密码:ic3y root@localhost:~# dpkg -i gnutls_3.3.8-13_amd64.deb root@localhost:~# find / -name libgnutls.so.28 /usr/lib64/libgnutls.so.28 root@localhost:~# ln -s /usr/lib64/libgnutls.so.28 /usr/lib/

可以在ocserv.conf文件里修改ocserv服务端口和域名等信息,修改后重启ocserv服务即可

代码语言:javascript
复制
root@localhost:~# /etc/init.d/ocserv restart
[ ok ] Restarting ocserv (via systemctl): ocserv.service.

Anyconnect客户端工具下载地址:https://pan.baidu.com/s/1eSvDvEi 提取密码:ckdi

安装Anyconnect客户端工具,安装后,就可以使用上面安装ocserv过程中定义的信息连接了:

特别注意:由于安装过程中选择的是自签证书,是不受信任的证书,所以客户端连接时需要关掉设置中的“阻止不信任的服务器”,即下面截图中的第四项"Block connection to untrusted servers"不要勾选!不管采不采用证书验证,都不要勾选第四项!。然后勾选第三项(第二项勾选与否都不要紧)

点击“connect”,接着点击提示窗口中点击“Connect Anyway”,接着按照提示输入用户名和密码,正常连接就ok了。

连接成功后,点击右下角的Anyconnect标志图,图上有一把钥匙的状态就说明已经连上了。

用户管理即登陆验证方式 1)用户名和密码验证(客户端登陆时默认肯定会有的验证方式)

代码语言:javascript
复制
root@localhost:~# cat /etc/ocserv/ocserv.conf 
........
auth = "plain[passwd=/etc/ocserv/ocpasswd]"            //默认用户名和密码验证
enable-auth = certificate                              //用户名和密码验证同时,允许证书验证
auth-timeout = 40

创建用户名和密码命令(或重置用户密码):

代码语言:javascript
复制
root@localhost:~# ocpasswd -c /etc/ocserv/ocpasswd guohuihui
Enter password: 
Re-enter password: 
root@localhost:~# ocpasswd -c /etc/ocserv/ocpasswd liumengnan
Enter password: 
Re-enter password: 
root@localhost:~# cat /etc/ocserv/ocpasswd 
wangshibo:*:$5$.GQf1omiKmvGElhU$q1yNyUxPRAHygEGaG98cwVGfYuJjSarsTkXROinhBX8
guohuihui:*:$5$z.H5ipnHSJCSigFU$30mseKwk13ZG9MuD3QSeBtYmX6xLOcafVPpioXkulA2
liumengnan:*:$5$mVSHMbBekX9vofxV$n7bc8LkJB9kjXl6OADGWySfTqkIBeyIGJRvk5A/ehHC

2)证书验证 除了用户名和密码验证之外,还可以进行证书验证。用户在AnyConnect客户端第一次登陆时会提示加载证书。首次登陆加载后,后面再登陆就不会提示加载证书了! 所有用户的 p12 证书文件可以在放置脚本的目录下找到,导入证书时需要输入证书创建时设定的密码。 新建用户证书命令: root@localhost:~# bash ocservauto.sh gc

用户证书创建后会保存到和脚本同一路径下: root@localhost:~# ls huanqiu.p12 ocinstall.log ocservauto.sh vars_ocservauto

吊销客户证书命令 root@localhost:~# bash ocservauto.sh rc

脚本其他参数说明 0)查看帮助 root@localhost:~# bash ocservauto.sh help

1)平滑升级ocserv(升级后原来的用户数据都会保留) root@localhost:~# bash ocservauto.sh ug

2)强制重装ocserv(注意这样会丢失之前的用户数据和配置) root@localhost:~# bash ocservauto.sh ri

3)同时开启证书登录和用户名密码登录(请务必首先选择任意一种登录方式来完成安装,接着再使用下面命令) root@localhost:~# bash ocservauto.sh pc

4)关于相同客户端证书可以登录多个服务器的方案

代码语言:javascript
复制
假定有三台服务器ABC:

在A服务器上,通过本脚本安装ocserv并选择使用证书登录方式。
在/etc/ocserv目录下可以找到ca-cert.pem文件。这里复制备用,ca-cert.pem不用保密,可以直接挂在公网上。

在BC服务器上下载本脚本,并且请在同文件夹下放置A服务器上的ca-cert.pem,然后执行:
# bash ocservauto.sh occ
这里ABC服务器共用了A服务器的验证证书。

想要获取新证书,请在A服务器上执行
# bash ocservauto.sh gc
也可以使用该客户端证书登录BC服务器。

如想要吊销证书,请在A服务器上执行
# bash ocservauto.sh rc
吊销所有想要吊销的证书。

由于不支持在线吊销证书列表,所以必须还要把A服务器上的/etc/ocserv/crl.pem文件同时复制到BC服务器相同位置,且修改ocserv的配置文件:
crl = /etc/ocserv/crl.pem

登陆方式解说 在上面一键安装过程中,选择了自签CA,安装后产生pem文件,如下:

代码语言:javascript
复制
root@localhost:~# cd /etc/ocserv/
root@localhost:/etc/ocserv# ll *.pem
-rw-r--r-- 1 root root 1793 Jan 16 23:34 ca-cert.pem
-rw-r--r-- 1 root root 1003 Jan 17 02:46 crl.pem
-rw-r--r-- 1 root root 2406 Jan 16 23:34 dh.pem
-rw-r--r-- 1 root root 3322 Jan 16 23:34 server-cert.pem
-rw-r--r-- 1 root root 1675 Jan 16 23:34 server-key.pem
root@localhost:/etc/ocserv# cat ocserv.conf |grep pem
server-cert = /etc/ocserv/server-cert.pem
server-key = /etc/ocserv/server-key.pem
dh-params = /etc/ocserv/dh.pem
ca-cert = /etc/ocserv/ca-cert.pem
crl = /etc/ocserv/crl.pem
# http_anchors = FILE:/etc/ocserv-ca.pem

1)用户名密码登录 1--自签CA(证书授权中心),取得ca-cert.pem(不需要保密,类比公钥)和ca-key.pem(需要保密,类比私钥)。 2--CA签发信任服务器证书,取得server-cert.pem(不需要保密,类比公钥)、server-key.pem(需要保密,类比私钥)。 3--该模式下,密码库是/etc/ocserv/ocpasswd文件。 4--如果想使用购买的服务器证书,请参考Nginx服务器证书配置,只需将对应的crt、key 文件重命名为server-cert.pem、server-key.pem,并覆盖到/etc/ocserv/文件夹下面。

2)证书登录 1--自签CA(证书授权中心),取得ca-cert.pem(不需要保密,类比公钥)和ca-key.pem(需要保密,类比私钥)。 2--CA签发信任服务器证书,取得server-cert.pem(不需要保密,类比公钥)、server-key.pem(需要保密,类比私钥)。 3--CA签发信任客户端证书,最终取得username.p12。 4--这里证书授权中心的ca-cert.pem既当作服务器证书的根证书,也当作客户端证书的验证证书。 5--由于CA证书当作验证证书,签发客户端证书就需要这个ca-key.pem,可以比同为密码库。 6--如果想使用购买的服务器证书,请参考Nginx服务器证书配置(http://www.cnblogs.com/kevingrace/p/5865501.html),只需将对应的crt、key 文件重命名为server-cert.pem、server-key.pem,并覆盖到/etc/ocserv/文件夹下面。

3)改善优化 修改的参数都在/etc/ocserv/ocserv.conf文件中。 a)对于某些移动宽带、长城带宽等,往往经过了很多重NAT,容易出现连接成功但是无法打开网页情况,请改小dpd、mobile-dpd数值。 b)如果vps对于本地延迟甚高,取消注释output-buffer项。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-12-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
SSL 证书
腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档