利用开源软件strongSwan实现支持IKEv2的企业级IPsec VPN,并结合FreeRadius实现AAA协议(下篇)
续篇——
利用开源软件strongSwan实现支持IKEv2的企业级IPsec VPN,并结合FreeRadius实现AAA协议(上篇)
上篇文章写了如何构建一个支持IKEv2的VPN,本篇记录的是如何利用freeradius,以及结合Daloradius进行VPN的 Web 管理。先让freeradius做个自述吧。
一、Radius 介绍

远端用户拨入验证服务(RADIUS, Remote Authentication Dial In User Service)是一个AAA协议,意思就是同时兼顾验证(authentication)、授权(authorization)及计费(accounting)三种服务的一种网络传输协议(protocol),通常用于网络存取、或流动IP服务,适用于局域网及漫游服务。
架构:client/server模式。Radius 是个服务端。NAS相对于Radius 是客户端,但相对于用户来说是个网络访问服务器。
共享密钥:radius服务端与客户端使用共享key 来进行通信,该key不在互联网上流通。(但没有绝对的安全,该密码要设置成强复杂度,防止被坏人给暴力破解)
代理:radius 还有代理,可以处理请求转发到其它的radius服务器上。
具体介绍可参考RFC 2865 RADIUS验证协议、RFC2866计费协议文档,强烈建议大家读下这俩RFC。苦于英文太多。还好找到两篇CSDN大牛的翻译文章,大家可以进去看下。
二、FreeRADIUS 的介绍安装配置
号称世界上最流行的radius服务器。FreeRADIUS包括一个RADIUS服务器,一个BSD许可证的客户端库,一个PAM库,一个Apache模块。还有一个好处就是用基于FreeRADIUS的 daloradius web界面管理‘vpn’。(可以实现动态添加’vpn‘账号,无需重启ipsec。)
1.环境介绍
基础环境参考上篇文章,本篇环境需Mysql、php、apache环境。
mysql:用于daloradius wen界面管理,用来存储freeradius服务器的相关认证信息。
apache:网站支持
php:daloradius 程序需要。web界面管理
2.安装freedadius 以及dolaradius所需要的php、mysql、apache环境
yum groupinstall "Development tools“ -y
yum install wget telnet net-tools httpd mariadb-server php php-mysql php-gd php-ldap php-odbc php-pear php-pear-DB php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel -y
安装freeradius程序以及数据库库文件
yum install freeradius freeradius-mysql freeradius-utils -y
3.启动apache 和mysql,并设置开机启动
systemctl start mariadb systemctl enable mariadb systemctl start httpd systemctl enable httpd
4.创建radius数据库,添加并授权radius用户,然后导入数据库文件
mysql -uroot -p create database radius; grant all privileges on radius.* to radius@localhost identified by 'iloveworld'; use radius; source /etc/raddb/mods-config/sql/main/mysql/schema.sql exit
5.创建软连接(将radius有效的的sql模块放到启用列表里),启用sql模块
ln -s /etc/raddb/mods-available/sql /etc/raddb/mods-enabled/
修改sql 模块连接数据库信息,文件路径/etc/raddb/mods-available/sql,按照如下修改
31行 driver = "rlm_sql_mysql" -83行: dialect = "mysql" server = "localhost" port = login = "radius" password = " iloveworld " radius_db = "radius" 211行 去掉注释read_clients = yes
6.检查模块目录启用,修改文件/etc/raddb/radiusd.conf
确保以下内容没有被注释:
$INCLUDE mods-enabled/ $INCLUDE sites-enabled/
开启认证的日志记录,记录log日志文件(321行左右)
auth = yes auth_badpass = yes auth_goodpass = yes
7.开启sql 模块的支持,修改文件/etc/raddb/sites-available/default
去掉以下行的sql注释,这里注释是 ‘-’,前面是行号,找到后去掉 ‘-’ 即可
sql sql sql sql sql
8.启动radiusd 服务,检查配置
这里以测试方式启动,出现以下即为正常:

结束测试启动,将radiusd加入开机启动,并启动服务
systemctl enabled radiusd systemctl start radiusd
三、Daloradius Web界面的安装配置
1.下载daloradius 最新软件0.9.9
.tar.gz https://sourceforge.net/projects/daloradius/files/latest/download
2.解压软件,然后将程序放到web网站目录下
.tar.gz /var/www/html/daloradius
导入daloradius 的表文件导到radius数据库中
mysql -u radius -p radius < /var/www/html/daloradius/contrib/db/fr2-mysql-daloradius-and-freeradius.sql
3.修改daloradius 连接数据库的php文件,文件 /var/www/html/daloradius/library/daloradius.conf.php
大概是27行到33行内容,就不备注解释了
$configValues['; $configValues['CONFIG_DB_ENGINE'] = 'mysql'; $configValues['CONFIG_DB_HOST'] = 'localhost'; $configValues['; $configValues['CONFIG_DB_USER'] = 'radius'; $configValues['CONFIG_DB_PASS'] = 'iloveworld'; $configValues['CONFIG_DB_NAME'] = 'radius';
4.访问web页面,地址http://192.168.30.57/daloradius

查看服务器信息

注:本文属于飞走不可原创,如有转载,请务必在文首注明出处。飞走不可 ^_^ http://www.cnblogs.com/hanyifeng/p/6147783.html
添加一个NAS,之后添加帐户,如下图:

添加一个用户


点击应用。之后检查用户列表

5.测试radius服务
使用刚新建的用户,对radius服务运行是否正常进行检测,命令如下:
radtest yifeng testing123
备注: radtest 是freeradius 测试的命令
1812 是默认端口号
testing123 默认的共享密钥 (建议修改为强复杂度的密码)

出现Access-Accept表示运行正常。表明Web界面新建的radius用户(相当于NAS)可以访问Radius 服务器。
下面是进行freeradius 与 VPN 的结合。实现通过radius 认证来连接访问VPN
四、FreeRADIUS 与 IPsec VPN 服务连接
首先,先修改strongSwan ,之后修改freeradius服务
1.修改ipsec.conf,文件完整内容如下:(注:leftid 填写自己的公网IP)
config setup
uniqueids=never
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
rekey=no
keyingtries=
keyexchange=ike
leftsubnet=
right=%any
rightsourceip=
dpdaction=clear
dpddelay=300s
dpdtimeout=1h
conn Windows7-os+
keyexchange=ikev2
auto=add
leftauth=pubkey
#leftcert=serverCert.pem
leftcert=server.cert.pem
rightauth=eap-radius
rightsendcert=never
eap_identity=%identity
compress=yes
conn IOS_Mac_IKEv2
keyexchange=ikev2
ike=aes256-sha256-modp2048,3des-sha1-modp2048!
esp=aes256-sha256,3des-sha1!
rekey=no
left=%defaultroute
leftid=192.168.30.57
leftsendcert=always
leftsubnet=
leftcert=server.cert.pem
right=%any
rightauth=eap-radius
rightsourceip=
rightsendcert=never
eap_identity=%any
dpdaction=clear
fragmentation=yes
auto=add
conn Android_xauth_psk
keyexchange=ikev1
left=%defaultroute
leftauth=psk
leftsubnet=
right=%any
rightauth=psk
rightauth2=xauth
auto=add
conn CiscoIPSec
keyexchange=ikev1
auto=add
aggressive=yes
compress=yes
ike=aes256-sha1-modp1024!
esp=aes256-sha1!
dpdaction=clear
leftid=blackberry
type=tunnel
xauth=server
leftauth=psk
rightauth=psk
rightauth2=xauth-eap
leftfirewall=yes
2. 修改strong.conf 文件,完整内容如下:
cat /usr/local/etc/strongswan.conf
charon {
i_dont_care_about_security_and_use_aggressive_mode_psk = yes
load_modular = yes
duplicheck.enable = no
threads =
compress = yes
plugins {
include strongswan.d/charon/*.conf
}
dns1 = 114.114.114.114
dns2 = 8.8.8.8
nbns1 = 8.8.8.8
nbns2 = 8.8.4.4
}
include strongswan.d/*.conf
备注:threads=16 程序开启线程数
i_dont_care_about_security_and_use_aggressive_mode_psk 只对5.0以后的版本有效,使系统在使用IKE模式时,支持aggrisive模式
3. 修改strongSwan的eap-radius插件,文件/usr/local/etc/strongswan.d/charon/eap-radius
修改 accounting = yes
备注:所有插件路径在:/usr/local/etc/strongswan.d/charon/
添加一个server
servers {
primary {
secret = testing123
address = 127.0.0.1
}
}
备注:这里可以设置多个servers,pritmary这里的共享密钥我们使用默认的testing123,也可以更改为其它的,推荐更改为强密码,以防止被穷举。也可以更改端口号:在server里添加 auth_port = ‘’,acct_port =’’ . 另外address 是radius 服务器的ip,如果两个服务在一台主机,写localhost 也是可以得。
4. 配置IPsec插件 xauth-eap,支持IKEv1. 即思科的IPSec模式
文件路径:/usr/local/etc/strongswan.d/charon/xauth-eap.conf
去掉注释 backend = radius
5. 配置Freeradius
修改eap文件,默认路径:/etc/raddb/mods-enabled/eap
default_eap_type = mschapv2
五、调试进行验证
调试验证Freeradius 和strongSwan 是否正常工作。在这里,用之前在Daloradius web界面上创建的yifeng用户进行测试(注:web界面添加的NAS可暂时不用)。
调试之前停止strongSwan 和radius 的daemon 运行模式,调试模式运行,如下:
调试启动strongswan ipsec start –nofork 新开一个终端,启动radius Radius -Xx
1.Windows 用户测试

查看链接状态

检查服务器的ipsec 状态

ok,mac和iOS用户的话,上面的ipsec.conf 文件已经修改配置好。可以正常连,如果连接vpn时出现错误,可检查服务器配置以及运行日志。附上一张vpn用户登录的统计记录信息

六、关于Cenots7上运行Daloradius兼容性错误修复记录
问题1:Accounting 页面查看不了在线用户,以及历史登陆统计。
在登陆时,调试模式下看到了sql 的错误,找不到表字段。gg后也搜索到相关插入语句
解决:登陆数据库,插入内容如下:
alter table radacct add acctupdatetime datetime NULL default NULL after acctstarttime, add acctinterval ) default NULL after acctstoptime, add KEY acctinterval (acctinterval),drop KEY acctuniqueid, add UNIQUE KEY acctuniqueid (acctuniqueid);
问题2:在主页面,Server status 的状态显示不正确。
后查找web获取本机的server信息时的php页面,发现php文件定义的是ethxxx(当然如果你的centos7中网卡是ethxx,可以忽略下面网卡获取的修改),且mask 和mac 的显示,在该文件的定义中re模块也是centos6.X之前能用的,centos7之后就不能用了。错误显示图如下:

解决:修改监控状态页面的php文件,默认相对(网站)路径:daloradius/library/exten-server_info.php 。修改如下:
注:本文属于飞走不可原创,如有转载,请务必在文首注明出处。飞走不可 ^_^ http://www.cnblogs.com/hanyifeng/p/6147783.html
网卡设备名:(注:7默认安装完是enoxxxxxxxx,如果你的设备是显示eth0,可不修改此条),180 行:
将/eth[-][-]* 修改成 /eno[-][-][-][-][-][-][-][-]*
Ip 地址:203 行、204行
将 /inet addr:[-\.]* 修改成 /inet [-\.]* 然后将split(]) 修改成 ])
Mask 地址: 240 行、241行
将 /mask:[-\.]* 修改成 /netmask [-\.]* 然后将split(]) 修改成 ])
MAC 地址:221 行
将 hwaddr 修改成 ether
修改完成后,显示正常,如下图:

问题3:在Report 页面,无法正常显示相关日志
如下图:

解决:主要是权限,或者没有开启功能的原因。
daloRADIUS Log,修改daloradius/library/daloradius.conf.php 文件
$configValues['CONFIG_LOG_PAGES'] = 'yes'; $configValues['CONFIG_LOG_ACTIONS'] = 'yes'; $configValues['CONFIG_LOG_QUERIES'] = 'yes'; 注: 顺手打开下面这行内容,隐藏web界面 user 列表的明文密码 $configValues['CONFIG_IFACE_PASSWORD_HIDDEN'] = 'yes';
System Log,权限问题(不设置也可以,如果不看messages的话),设置其它用户可读即可
chmod o+r /var/log/messages
Radius Log 权限问题
chmod o+x /var/log/radius/ chmod o+r /var/log/radius/radius.log
注:由于目录需要有执行权限,其它用户才可以进入查看,所以赋予radius 目录 执行权限
七、思考总结
英文不好,很蹩脚啊。参考的相关资料文章链接都在上篇中,针对那些lt2p不能使用的企业来说,IKEv2是个不错的选择,我觉得最好的地方就是所有用户客户端不需要单独安装特殊软件来进行拨号认证。后期mysql数据库建议考虑主从,及时备份,因为所有认证用户信息都存储在库中!!后面如果大家有什么疑问也可以留言交流哈,文中如果有错误,一定要及时帮我指出来哟,我会及时的修正。哈哈,多谢。
注:本文属于飞走不可原创,如有转载,请务必在文首注明出处。飞走不可 ^_^ http://www.cnblogs.com/hanyifeng/p/6147783.html
利用开源软件strongSwan实现支持IKEv2的企业级IPsec VPN,并结合FreeRadius实现AAA协议(下篇)的更多相关文章
- 利用开源软件 Hugin 实现照片的景深合成
利用开源软件 Hugin 实现照片的景深合成 本文主要参考了下面的文章:http://macrocam.blogspot.jp/2013/09/using-hugin-for-focus-stacki ...
- 利用开源软件自建WAF系统--OpenResty+unixhot
目录 介绍 安装Openresty 修改nginx.conf 部署WAF 测试WAF 简介:利用OpenResty+unixhot自建WAF系统 介绍 OpenResty是一个基于 Nginx 与 ...
- C#利用开源软件ffMpeg截取视频图片
#region 从视频画面中截取一帧画面为图片 /// <summary> /// 从视频画面中截取一帧画面为图片 /// </summary> /// <param n ...
- 利用开源软件 Hugin 实现照片的景深合成,使用开源软件 enfuse 做照片的曝光合成
http://blog.csdn.net/liyuanbhu/article/details/53573847 http://blog.csdn.net/liyuanbhu/article/detai ...
- 痞子衡嵌入式:开源软件协议(MIT/BSD/Apache/LGPL/MPL/GPL)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是关于开源软件协议基本知识. 牛顿曾说过:"如果我比别人看得更远,那是因为我站在巨人的肩上".在软件开发中如果说也存在巨 ...
- GPL协议中国第一案尘埃落定,相关开源软件应如何风控?
导读:2019年11月6日,数字天堂(北京)网络技术有限公司(以下简称 “数字天堂公司”)诉柚子(北京)科技有限公司.柚子(北京)移动技术有限公司(以下简称 “柚子公司”)侵犯计算机软件著作权纠纷一案 ...
- 2014 年最热门的国人开发开源软件 TOP 100 - 开源中国社区
不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多的开源软件,而且还有很多软件被国外的认可.中国是 ...
- 2014 年最热门的国人开发开源软件TOP 100
不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多的开源软件,而且还有很多软件被国外认可.中国是开 ...
- 2014年国人开发的最热门的开源软件TOP 100
不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多的开源软件,而且还有很多软件被国外的认可.中国是 ...
随机推荐
- python多线程的用法之一
import threadingimport time class thread_1(threading.Thread): sleep_time = 0 def __init__(self,id1): ...
- 奇妙的动态代理:EF中返回的对象为什么序列化失败
今天有如鹏的学生遇到一个问题:把一个对象保存到Session中(进程外Session)后,Web服务器重启,当从Session读取这个对象的时候报错,提示是一个“T_Users”后面跟着一大串数字的类 ...
- 设计模式之美:Null Object(空对象)
索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Null Object 的示例实现. 意图 通过对缺失对象的封装,以提供默认无任何行为的对象替代品. Encapsulate t ...
- kali 在线教学群 第一次 公开课 小结(1)
kali 在线教学群 第一次 公开课 小结(1) 文/玄魂 1.1 需要准备的基础环境 vmware 虚拟机,kali 2.0 镜像,科学上网工具包.这三项内容,可以在本人的微信订阅号“xuanhun ...
- 探求网页同步提交、ajax和comet不为人知的秘密(中篇)
深入研究某项技术,了解使用这些技术的细节,其实最终目的都是为了完成一个选择问题:当我们要使用这些技术解决某个具体的问题时候我们到底该如何去选择.如果碰到有两种技术可以让我们达到同样的目的,我们就会不自 ...
- Handlebars.js循环中索引(@index)使用技巧(访问父级索引)
使用Handlebars.js过程中,难免会使用循环,比如构造数据表格.而使用循环,又经常会用到索引,也就是获取当前循环到第几次了,一般会以这个为序号显示在页面上. Handlebars.js中获取循 ...
- GLFW初体验
GLFW - 很遗憾,没有找到FW的确切含义,Wiki上没有,GLFW主页也没有.猜测F表示for,W表示Window GLFW是干啥用的? 一个轻量级的,开源的,跨平台的library.支持Open ...
- NanoProfiler - 适合生产环境的性能监控类库 之 基本功能篇
背景 NanoProfiler是一个EF Learning Labs出品的免费性能监控类库(即将开源).它的思想和使用方式类似于MiniProfiler的.但是,设计理念有较大差异. MiniProf ...
- ios 截屏
把当前屏幕作为获取成为图片 - (UIImage *)rn_screenshot { UIGraphicsBeginImageContext(self.bounds.size); [sel ...
- Java-继承,多态练习0922-03
编写一个Java应用程序,该程序包括3个类:Monkey类.People类和主类 E.要求: (1) Monkey类中有个构造方法:Monkey (String s),并且有个public void ...