我们知道,sspanel v3 mod(sspanel魔改版)是支持vpn开户之类的功能的,这里记录一下anyconnect和sspanel的对接。
基础准备
sspanel面板
这里参考我以前发的文章:
sspanel面板的安装:sspanel v3 魔改版前端安装
对接
这里默认已经按照sspanel面板里面的教程安装好了freeradius的服务端。
freeradius服务端设置
测试freeradius服务端
由于在之前我们已经把freeradius和服务端的数据库设置好了,如果你已经创建了用户,那么在freeradius的数据库当中应该能看到用户。
浏览器打开 http://你的vps ip/phpmyadmin
用户 : root
密码 :安装 lnmp 时设置的
查看freeradius数据库radcheck表里面的用户名和密码,username是用户名,value是密码。记下来之后会用得到。
回到freeradius的服务端,先停止正在运行的freeradius服务端。
service freeradius stop
新建一个screen,用以调试freeradius。
screen -S freeradius
如果提示 -bash: screen: command not found
,则安装screen apt install screen
。
以调试模式运行freeradius。
freeradius -X
然后在键盘上先输入 ctrl+A
然后按 D
切换SSH窗口。
执行以下命令。
radtest 用户名 密码 localhost 0 testing123
如果看到 Access-Accept
则说明服务端设置正确。
如果看到 Access-Reject
说明验证失败,你需要检查使用的命令。
如果修改了主机名,一定要当心出错。
当我们确认freeradius工作正常之后我们用freeradius客户端来访问freeradius服务端。不过在那之前我们需要先设置freeradius服务端设置。
首先打开设置文件(服务端上的客户端配置)/etc/freeradius/clients.conf
我们在这份文件可以对每个客户端进行设置(以ip区分),以及所有客户端的一些全局设置。内容很多,我们不一一详谈了。
我们直接找到第30行的 client localhost,我们刚才测试工具之所以能正确访问freeradius服务端,是因为默认设置下,localhost已被加入这份设置,即localhost可以访问freeradius服务端。
而我们之前在测试命令中使用的 testing123在这份文件的第101行,这个设置用来指定客户端发送请求时带的密钥,若密钥错误将导致服务端返回验证失败的信息。这个设置很重要,我们这里不去修改他,但是真正的生产环境需要修改这个设置。
为了方便起见,我们不另外再开一个客户端设置了,我们直接修改现有的客户端设置即 client localhost 的设置中的客户端ip设置。找到第34行的 ipaddr = 127.0.0.1
修改为 ipaddr = anyconnect所在服务器的IP
。
保存这个文件。注意debian8中不支持 ipaddr = * 或者 ipv4addr = *这样的写法,具体原因未知,但是centos是可以写成ipv4addr = * 让任何地址都可以连接服务端。
freeradius服务端测试完成后,可以用ctrl+c
退出调试模式,用service freeradius start
来后台启动freeradius。
freeradius客户端
这里我们在装有anyconnect的服务器上安装freeradius的客户端。
安装相关依赖
apt install gcc make -y
安装freeradius客户端
wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-client-1.1.7.tar.gz tar -zxvf freeradius-client-1.1.7.tar.gz cd freeradius-client-1.1.7 ./configure make make install
为了测试freeradius服务端在这台服务器上也可以访问,我们可以在这台服务器上也安装测试工具并进行测试(假设freeradius服务器地址为1.1.1.1)
安装freeradius调试工具。
apt-get install freeradius-utils -y
测试。
radtest 用户名 密码 1.1.1.1 0 testing123
确认无误后我们进行接下来的设置。首先我们打开freeradius客户端设置文件。
修改 /usr/local/etc/radiusclient/radiusclient.conf
第37行改为 authserver 1.1.1.1
第42行改为 acctserver 1.1.1.1
保存这份文件
打开freeradius客户端的服务器设置
修改 /usr/local/etc/radiusclient/servers
添加1.1.1.1 testing123
至最后一行,保存这份文件。
保存这份文件。自此,我们已经设置好了freeradius客户端需要做的设置。我们接下来让anyconnect使用freeradius作为验证模块。
ocserv anyconnect
ocserv anyconnect的安装:
自签SSL证书版本安装(客户端连接时会出现警告,但是更简单):安装自签SSL证书ocserv
可信SSL证书版本安装(客户端连接时不会出现警告,但是更复杂):可信SSL证书版ocserv
这一步可以不添加VPN用户。
注意:先安装ocserv anyconnect再安装freeradius-client会出现ocserv anyconnect没有freeradius模块,导致ocserv anyconnect无法正常启动,这个时候只需要重新编译安装ocserv anyconnect即可。
修改ocserv配置文件 /etc/ocserv/ocserv.conf
。
将第一行的验证方式修改为:
auth = "radius[config=/usr/local/etc/radiusclient/radiusclient.conf,groupconfig=true]"
这样,我们就使得ocserv使用freeradius来进行用户验证。
使用ocserv -f -d 1
来测试一下,没有问题的话则ctrl+C
退出。然后使用 service ocserv start
在后台来启动ocserv。
结束
那么关于ocserv对接sspanel的教程就到这里结束了。
参考链接:http://www.opscaff.com/2017/03/01/ocserv-radius-%E8%AE%A4%E8%AF%81%E6%90%AD%E5%BB%BA-freeradius-mysql/
老哥,怎么统计流量和限制等级用户访问呢
这个我就没研究过了。。
Skipping unknown option 'cookie-validity'
Setting 'radius' as primary authentication method
Enabling 'certificate' as authentication method
Setting 'radius' as accounting method
listening (TCP) on 0.0.0.0:443...
listening (UDP) on 0.0.0.0:443...
radius acct initialization error
------------------------------------------------------------------
老哥,这个是acctserver的1813端口没通吗?
Skipping unknown option 'cookie-validity'
Setting 'radius' as primary authentication method
Enabling 'certificate' as authentication method
Setting 'radius' as accounting method
listening (TCP) on 0.0.0.0:443...
listening (UDP) on 0.0.0.0:443...
ocserv[1577]: main: initialized ocserv 0.10.9
ocserv[1578]: sec-mod: reading supplemental config from radius
ocserv[1578]: radcli: rc_read_config: rc_read_config: can't open /etc/radiusclient/radiusclient.conf: No such file or directory
radius acct initialization error
ocserv[1577]: error connecting to sec-mod socket '/var/run/ocserv-socket.1577': No such file or directory
ocserv[1577]: main: main.c:497: ocserv-secmod died unexpectedly
ocserv[1577]: main: termination request received; waiting for children to die
老哥问下
这是什么原因
这里提示,出现了一个未知的选项,cookie-validity,提示不存在/etc/radiusclient/radiusclient.conf, 你安装 radius client了吗?
这个问题已经解决了,我的ocserv.conf没配置好。但是现在又出现了新的问题。。。
这是有毒。。。
Skipping unknown option 'cookie-validity'
Setting 'radius' as primary authentication method
Enabling 'certificate' as authentication method
Setting 'radius' as accounting method
listening (TCP) on 0.0.0.0:443...
listening (UDP) on 0.0.0.0:443...
Segmentation fault
[[email protected] ~]# ^C
[[email protected] ~]# ocserv -f -d 10
Skipping unknown option 'cookie-validity'
Setting 'radius' as primary authentication method
Enabling 'certificate' as authentication method
Setting 'radius' as accounting method
listening (TCP) on 0.0.0.0:443...
listening (UDP) on 0.0.0.0:443...
ocserv[1507]: main: initializing control unix socket: /var/run/occtl.socket
ocserv[1507]: main: initialized ocserv 0.10.9
ocserv[1508]: sec-mod: reading supplemental config from radius
ocserv[1508]: sec-mod: sec-mod initialized (socket: /var/run/ocserv-socket.1507)
ocserv[1507]: TLS[<3>]: ASSERT: common.c:1110
ocserv[1507]: TLS[<3>]: ASSERT: common.c:1110
ocserv[1507]: TLS[<3>]: ASSERT: common.c:1110
ocserv[1507]: TLS[<3>]: ASSERT: common.c:1110
ocserv[1507]: TLS[<3>]: ASSERT: common.c:1110
Segmentation fault
[[email protected] ~]# ocserv[1508]: sec-mod: error receiving msg head: No such file or directory
ocserv[1508]: sec-mod: error processing sync command from main
尝试一下最新版本的ocserv ftp://ftp.infradead.org/pub/ocserv/ocserv-0.11.12.tar.xz
大佬能求个赵大sspanel v3的前端吗 想研究下对接
https://github.com/iMeiji/ss-panel-v3-mod