【转】CentOS 7 安装FreeRadius

举报
Ragnar 发表于 2020/08/25 14:15:49 2020/08/25
【摘要】 CentOS 7 安装FreeRadiusFREERADIUS 2仍在大量被应用于生产环境,但官网推荐尽早采用版本3,并且宣布不再更新版本2。虽然版本2和3内部有很大的区别,但由于对外提供的RADIUS协议并没有多少变化,同时大部分数据表对旧版本兼容,所以升级到FREERADIUS并不会导致RADIUS客户端出现大量不匹配的问题。FREERADIUS 3在性能和安全性上有了很大的提升,尽早升...

CentOS 7 安装FreeRadius


FREERADIUS 2仍在大量被应用于生产环境,但官网推荐尽早采用版本3,并且宣布不再更新版本2。虽然版本2和3内部有很大的区别,但由于对外提供的RADIUS协议并没有多少变化,同时大部分数据表对旧版本兼容,所以升级到FREERADIUS并不会导致RADIUS客户端出现大量不匹配的问题。FREERADIUS 3在性能和安全性上有了很大的提升,尽早升级到版本3是值得的。

这里介绍CentOS 7下安装最新版的MariaDB + FreeRadius 3 + PHP7 + Nginx + Dalo的步骤。

一、安装最新版的MariaDB数据库:

  1. 编辑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
  2. 安装mariadb服务器

    # yum -y update # yum install -y mariadb-server mariadb
  3. 开启mariadb服务:

    # systemctl start mariadb# systemctl enable mariadb
  4. 查看状态:

    # systemctl status mariadb# systemctl is-enabled mariadb.serviceenabled
  5. 初始化数据库安全设置:

    # 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

  1. yum安装freeradius(CentOS 7默认最新版是3.0.4, 目前官方的最新版是3.0.14)

    yum -y install freeradius freeradius-utils freeradius-mysql
  2. 导入数据库schema

    # mysql -u root -p radiusdb < /etc/raddb/mods-config/sql/main/mysql/schema.sql
  3. 配置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"
        (...省略...)
    }
  4. 调整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
  5. 添加客户端连接设置

    编辑/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}
  6. 启动服务

    # systemctl start radiusd.service# systemctl status radiusd.service
  7. 测试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';
  8. radius调试

    如果radius启动出现问题,可以将radius进程停止,然后以参数-X的方式临时启动调试模式。

    # pkill radius   # radiusd -X

四、防火墙配置radius相关规则

  1. 配置防火墙,打开radius服务端口

    # (如果已经打开firewalld的话,可以跳过该步骤)# systemctl enable firewalld# systemctl start firewalld# systemctl status firewalld
  2. 添加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

  1. 配置好PHP及Web服务器,CentOS7下推荐使用php7+nginx。

    参考我的博客:CentOS 7 安装php7 + MariaDB + Nginx + Wordpress

  2. 下载并解压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
  3. 导入daloRADIUS扩展表

    由于daloRADIUS除了用到了基本的FreeRadius表,例如radcheck, radreply等,还扩展了很多附件表,例如billing_history,userinfo等,因此首先需要导入这些扩展表。

    # cd /opt/www/daloradius# mysql -u root -p radiusdb < contrib/db/mysql-daloradius.sql
  4. 配置数据库连接

    # 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';
  5. 配置网站

    这里只列出了配置普通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;
        }
    }
  6. 重启服务

    # systemctl restart radiusd.service # systemctl restart mariadb.service # systemctl restart nginx
  7. 重新启动php-fpm服务

    # systemctl restart php-fpm# systemctl enable php-fpm
  8. 修改php-fpm的unix目录的用户及组

    chown nginx:nginx /var/run/php-fpm/ -R
    chown nginx:nginx /var/lib/php/ -R
  9. 打开防火墙http及https端口

    firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=httpsfirewall-cmd --reload
  10. 登陆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



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。