1、概括

  • openconnect

    首先介绍一下openconnect即cisco anyconnect的兼容服务端。众所周知,cisco在网络设备领域处于霸主地位,其开发的anyconnect作为一种vpn协议,不是想封就能封的。
    而anyconnect作为cisco专有技术,其服务器只能运行在cisco专有设备上,即如果没有购买cisco相关设备,将无法使用anyconnect服务端。而openconnect的出现解决了这一个问题。openconnect是一个开源项目,其目标是在相对廉价的linux设备上运行于anyconnect协议兼容的服务端,以此来使用该协议而不需要购买cisco专有设备。
    openconnect目前已经足够完善,各种功能性支持也达到了和anyconnect几乎无异。更多信息可以访问该官网:http://www.infradead.org/ocserv/

  • Radius
    而radius则是一个登录管理系统,通过非常简单的api来对接其他需要账号管理的程序。 radius产品中最有名的是开源的freeradius,其超高负载量可以同时支持几W并发请求,目前大多数ISP对用户拨号的验证处理使用的正是freeradius,因此其可靠性毋庸置疑。

  • OpenLDAP
    公司使用OpenLDAP统一管理员工的账号密码信息。

2、搭建openconnect

首先我们来搭建openconnect服务端,openconnect服务端简称ocserv(open connect server)
ocserv已经在epel源提供,我们直接安装对应软件包。

  • 安装

    yum install epel-release -y
    yum install ocserv -y
    [root@ocserv ~]# ocserv -v
    ocserv 1.1.1
  • 系统配置-打开转发
[root@bj-ali-system-ocserv ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@bj-ali-system-ocserv ~]# sysctl -p
[root@ocserv ~]# cat /proc/sys/net/ipv4/ip_forward
1

3、配置ocserv

anyconnect使用ssl证书来进行加密,ocserv也使用此方法。除了ca证书之外,还有服务端证书和客户端登陆用的证书,这比较麻烦,我们先使用密码验证来完成客户端登陆。而ca证书和服务端证书使用自签方式或者购买ca证书颁发机构签发的证书。(由于ca证书自签,客户端登陆时将提示不受信任的服务器,待会我们会讲到。如果需要合法的ca证书,请自行寻找信誉良好的ca证书颁发机构进行签发)。这里选用ca证书颁发机构签发的证书(线上环境)

[root@bj-ali-system-ocserv ~]# vim /etc/ocserv/ocserv.conf

#udp-port = 443  注释掉UDP这一行!!!
auth = "plain[passwd=/etc/ocserv/ocpasswd]"   //密码存放位置
max-clients = 1024
max-same-clients = 5
server-cert = /etc/ocserv/ssl/hebye.com.crt
server-key = /etc/ocserv/ssl/hebye.com.key
ipv4-network = 192.168.119.254
ipv4-netmask = 255.255.255.0
dns = 223.5.5.5
route = 172.23.0.0/16
route = 172.18.0.0/16
route = 10.100.0.0/16

说明:route选项的路由规则代表 只有访问上述的路由才会走VPN,其他网段不会走VPN。

#创建用户
[root@bj-ali-system-ocserv ocserv]# ocpasswd -c /etc/ocserv/ocpasswd xtyang

#启动命令(screen中)
[root@bj-ali-system-ocserv ~]# ocserv -f -d 1
[root@bj-ali-system-ocserv ~]# yum -y install iptables iptables-services
[root@bj-ali-system-ocserv ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT
[root@bj-ali-system-ocserv ~]# iptables -I INPUT -p tcp --dport 443 -j ACCEPT
[root@bj-ali-system-ocserv ~]# iptables -I INPUT -p udp --dport 443 -j ACCEPT
[root@bj-ali-system-ocserv ~]# iptables -t nat -A POSTROUTING -j MASQUERADE

[root@bj-ali-system-ocserv ~]#iptables -t filter -I FORWARD -j ACCEPT

[root@bj-ali-system-ocserv ~]# service iptables save 
[root@bj-ali-system-ocserv ~]# systemctl start iptables
[root@bj-ali-system-ocserv ~]# systemctl enable iptables

#windows下载anyconnect测试,将域名指向该服务器地址。
下载地址:https://software.cisco.com/download/home

4、配置freeradius

[root@ocserv ~]#  yum -y install freeradius freeradius-ldap freeradius-mysql
[root@ocserv ~]#  radiusd -v

#配置用户名
[root@ocserv ~]# head -1 /etc/raddb/users 
xtyang Cleartext-Password := "123456"
[root@ocserv ~]# 

#准许any主机访问,修改默认共享密码。
[root@ocserv ~]# vim /etc/raddb/clients.conf 
client localhost {
        ipv4addr = *    # any.  127.0.0.1 == localhost
        secret = wdm123456

}



#启动(-X 调试)
[root@ocserv ~]# radiusd -X
[root@ocserv ~]# netstat -ntplu |grep radius

#安装调试工具
[root@ocserv ~]# yum install freeradius-utils
[root@ocserv ~]# radtest  xtyang 123456 localhost 0 wdm123456
Sent Access-Request Id 1 from 0.0.0.0:47927 to 127.0.0.1:1812 length 76
    User-Name = "xtyang"
    User-Password = "123456"
    NAS-IP-Address = 192.168.31.12
    NAS-Port = 0
    Message-Authenticator = 0x00
    Cleartext-Password = "123456"
Received Access-Accept Id 1 from 127.0.0.1:1812 to 0.0.0.0:0 length 20
如果看到 Received Access-Accept 字样说明验证成功。如果看到 Received Access-Reject 说明验证失败,你需要检查使用的命令

#freeradius客户端设置文件(本次实验ocserv和radiusserver安装在了同一台服务器上)
[root@ocserv ~]# vim /etc/radcli/radiusclient.conf
authserver  192.168.31.12
acctserver  192.168.31.12

[root@ocserv ~]# tail -1  /etc/radcli/servers
192.168.31.12 wdm123456
[root@ocserv ~]# 

5、修改ocserv,改为使用radius认证。

[root@ocserv ~]# vim /etc/ocserv/ocserv.conf
auth = "radius[config=/etc/radcli/radiusclient.conf,groupconfig=true]"

#重启ocserv
[root@ocserv ~]# ocserv -f -d 1

#windows 客户端认证(输入 xtyang 密码123456)

6、radius使用LDAP认证

[root@ocserv ~]# vim /etc/raddb/mods-available/ldap

server = '192.168.31.11'
port = 389
identity = 'cn=admin,dc=hebye,dc=com'
password = xxxxx
base_dn = 'dc=hebye,dc=com'

[root@ocserv ~]# chmod 640 /etc/raddb/mods-available/ldap
[root@ocserv ~]# ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap
[root@ocserv ~]# chown root.radiusd /etc/raddb/mods-enabled/ldap

[root@ocserv ~]#cat /etc/raddb/mods-available/ldap |grep -v '#' |grep -v '^$' >/etc/raddb/sites-available/ldap
[root@ocserv ~]# ln -s /etc/raddb/sites-available/ldap /etc/raddb/sites-enabled/site_ldap
[root@ocserv ~]#chown root.radiusd /etc/raddb/sites-enabled/site_ldap

#重启radius
[root@ocserv ~]# radiusd -X
[root@ocserv ~]# netstat -ntplu |grep radius

#配置开机启动
[root@ocserv ~]# systemctl start ocserv
[root@ocserv ~]# systemctl enable ocserv
[root@ocserv ~]# systemctl start radiusd.service
[root@ocserv ~]# systemctl enable radiusd.service

windows 客户端认证(输入 ldap账号及密码)

文档更新时间: 2021-09-24 14:55   作者:xtyang