续篇——
利用开源软件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