【转】CentOS 7 安装FreeRadius
CentOS 7 安装FreeRadius
FREERADIUS 2仍在大量被应用于生产环境,但官网推荐尽早采用版本3,并且宣布不再更新版本2。虽然版本2和3内部有很大的区别,但由于对外提供的RADIUS协议并没有多少变化,同时大部分数据表对旧版本兼容,所以升级到FREERADIUS并不会导致RADIUS客户端出现大量不匹配的问题。FREERADIUS 3在性能和安全性上有了很大的提升,尽早升级到版本3是值得的。
这里介绍CentOS 7下安装最新版的MariaDB + FreeRadius 3 + PHP7 + Nginx + Dalo的步骤。
一、安装最新版的MariaDB数据库:
编辑yum源文件
# vim /etc/yum.repos.d/MariaDB.repo
内容:
# MariaDB 10.2 CentOS repository list - created 2017-06-24 17:08 UTC# http://downloads.mariadb.org/mariadb/repositories/[mariadb]name = MariaDBbaseurl = http://yum.mariadb.org/10.2/centos7-amd64gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDBgpgcheck=1
安装mariadb服务器
# yum -y update # yum install -y mariadb-server mariadb
开启mariadb服务:
# systemctl start mariadb# systemctl enable mariadb
查看状态:
# systemctl status mariadb# systemctl is-enabled mariadb.serviceenabled
初始化数据库安全设置:
# mysql_secure_installation
推荐选项:
Set root password? [Y/n] Y Remove anonymous users? [Y/n] YDisallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y
二、创建FreeRadius数据库
创建radius数据库,并设置用户名及密码:
# mysql -u root -pMariaDB [(none)]> CREATE DATABASE radiusdb;MariaDB [(none)]> GRANT ALL ON radiusdb.* TO dbuser@localhost IDENTIFIED BY "mypass";GRANT ALL ON radiusdb.* TO dbuser@'%' IDENTIFIED BY "mypass";MariaDB [(none)]> FLUSH PRIVILEGES;MariaDB [(none)]> \q Bye
三、安装FreeRadius
yum安装freeradius(CentOS 7默认最新版是3.0.4, 目前官方的最新版是3.0.14)
yum -y install freeradius freeradius-utils freeradius-mysql
导入数据库schema
# mysql -u root -p radiusdb < /etc/raddb/mods-config/sql/main/mysql/schema.sql
配置FreeRadius使用mysql
启用sql模块:
# ln -s /etc/raddb/mods-available/sql /etc/raddb/mods-enabled/# chgrp -h radiusd /etc/raddb/mods-enabled/sql
配置mysql数据库连接信息:
# vim /etc/raddb/mods-available/sql
主要修改内容:
sql { (...省略...) driver = "rlm_sql_mysql" dialect = "mysql" # Connection info: # server = "localhost" port = 3306 login = "dbuser" password = "mypass" radius_db = "radiusdb" (...省略...) }
调整FreeRadius与MariaDB的启动顺序
添加FreeRadius启动服务:
# systemctl enable radiusd.service
FreeRadius服务必须在数据库正常启动后才能正常启动,否则会出错。为了确保这一点,按照以下方法强制指定radius服务启动的顺序
# vi /etc/systemd/system/multi-user.target.wants/radiusd.service
在[Unit]部分,增加
After=mariadb.service
,如下所示:[Unit]Description=FreeRADIUS high performance RADIUS server.After=syslog.target network.targetAfter=mariadb.service
添加客户端连接设置
编辑
/etc/raddb/clients.conf
文件,为允许连接的客户端设置相应的共享秘钥例一:本地localhost接入(一般用于测试),共享秘钥为
demo_radius_secret
:client localhost { ipaddr = 127.0.0.1 proto = * secret = demo_radius_secret } # IPv6 Clientclient localhost_ipv6 { ipv6addr = ::1 secret = demo_radius_secret }
例二:允许内网192.168.110网段连接该radius,共享秘钥为
demo_radius_secret
:client my_lan { ipaddr = 192.168.110.0/24 secret = demo_radius_secret require_message_authenticator = no}
例三:允许所有客户端连接:
client all_client { ipaddr = 0.0.0.0/0 secret = demo_radius_secret require_message_authenticator = no}
启动服务
# systemctl start radiusd.service# systemctl status radiusd.service
测试radius
连接mysql命令行
mysql -p radiusdb
,使用sql添加一条测试记录:MariaDB [radiusdb]> INSERT INTO radcheck (id, username, attribute, op, value) VALUES (1,'testuser','Cleartext-Password',':=','mypass');
使用radtest命令测试:
radtest [用户名] [密码] [radius服务器host/ip] 0 [对客户端设置的共享秘钥]
,例如:# radtest testuser mypass localhost 0 demo_radius_secret
认证成功的输出如下:
Sending Access-Request Id 143 from 0.0.0.0:51053 to 127.0.0.1:1812User-Name = 'testuser'User-Password = 'mypass'NAS-IP-Address = 127.0.0.1NAS-Port = 0Message-Authenticator = 0x00 Received Access-Accept Id 143 from 127.0.0.1:1812 to 127.0.0.1:51053 length 26Acct-Interim-Interval = 60
测试结束后别忘了使用sql命令清除测试用户:
MariaDB [radiusdb]> delete from radcheck where username = 'testuser';
radius调试
如果radius启动出现问题,可以将radius进程停止,然后以参数
-X
的方式临时启动调试模式。# pkill radius # radiusd -X
四、防火墙配置radius相关规则
配置防火墙,打开radius服务端口
# (如果已经打开firewalld的话,可以跳过该步骤)# systemctl enable firewalld# systemctl start firewalld# systemctl status firewalld
添加radius服务
cat /usr/lib/firewalld/services/radius.xml firewall-cmd --add-service=radius --permanentfirewall-cmd --reloadfirewall-cmd --list-services
※ [特殊化定制]:如果不想让raidus端**漏在公网上,可以只允许特定IP地址访问radius服务
firewall-cmd --permanent --new-zone=radiusfirewall-cmd --reloadfirewall-cmd --permanent --zone=radius --set-target=ACCEPTfirewall-cmd --permanent --zone=radius --add-service= radiusfirewall-cmd --permanent --zone=radius --add-source=192.168.111.222/32firewall-cmd --permanent --zone=radius --add-source=192.168.111.223/32firewall-cmd --reloadfirewall-cmd --get-active-zones
到此为止基本的Radius服务就可以正常工作了。如果没有更好的Radius管理软件,那么推荐安装daloRADIUS
五、(可选) 安装配置Radius管理软件:daloRADIUS
daloRADIUS的官网:http://www.daloradius.com/, GitHub
配置好PHP及Web服务器,CentOS7下推荐使用php7+nginx。
下载并解压daloRADIUS
# mkdir -p /opt/www# cd /opt/www# wget https://github.com/lirantal/daloradius/archive/master.zip# unzip master.zip# mv daloradius-master/ daloradius# chown -R nginx:nginx daloradius
导入daloRADIUS扩展表
由于daloRADIUS除了用到了基本的FreeRadius表,例如radcheck, radreply等,还扩展了很多附件表,例如billing_history,userinfo等,因此首先需要导入这些扩展表。
# cd /opt/www/daloradius# mysql -u root -p radiusdb < contrib/db/mysql-daloradius.sql
配置数据库连接
# chmod 664 /opt/www/daloradius/library/daloradius.conf.php# vi /opt/www/daloradius/library/daloradius.conf.php
主要需要修改的是数据库的连接信息:
$configValues['CONFIG_DB_HOST'] = 'localhost';$configValues['CONFIG_DB_PORT'] = '3306';$configValues['CONFIG_DB_USER'] = 'dbuser';$configValues['CONFIG_DB_PASS'] = 'mypass';$configValues['CONFIG_DB_NAME'] = 'radiusdb';
配置网站
这里只列出了配置普通http网站的内容。生产环境下推荐使用https。
server { listen 80; server_name dalo.mysite.com; root /opt/www/daloradius; index index.php; charset utf-8; try_files $uri $uri/ /index.php?q=$uri&$args; location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
重启服务
# systemctl restart radiusd.service # systemctl restart mariadb.service # systemctl restart nginx
重新启动php-fpm服务
# systemctl restart php-fpm# systemctl enable php-fpm
修改php-fpm的unix目录的用户及组
chown nginx:nginx /var/run/php-fpm/ -R chown nginx:nginx /var/lib/php/ -R
打开防火墙http及https端口
firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=httpsfirewall-cmd --reload
登陆daloradius
dns更改生效后,访问dalo.mysite.com即可配置FreeRadius。默认的管理员的用户名是administrator,密码是radius。
如果无法登陆,有一个可能的原因就是nginx无权限访问php的session目录。可以修改目录的属性或者将拥有者改为nginx用户, 例如:
chown nginx:nginx /var/run/php-fpm/ -R chown nginx:nginx /var/lib/php/ -R
- 点赞
- 收藏
- 关注作者
评论(0)