CentOS 7 安装FreeRadius

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

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

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

参考:https://downloads.mariadb.org/mariadb/repositories/#mirror=yamagata-university&distro=CentOS&distro_release=centos7-amd64–centos7&version=10.2

  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 = MariaDB
    baseurl = http://yum.mariadb.org/10.2/centos7-amd64
    gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    gpgcheck=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.service
    enabled
    
  5. 初始化数据库安全设置:

    # mysql_secure_installation
    

    推荐选项:

    Set root password? [Y/n] Y
    Remove anonymous users? [Y/n] Y
    Disallow 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 -p

MariaDB [(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.target
    After=mariadb.service
    
  5. 添加客户端连接设置

    编辑/etc/raddb/clients.conf文件,为允许连接的客户端设置相应的共享秘钥

    例一:本地localhost接入(一般用于测试),共享秘钥为demo_radius_secret:

    client localhost {
        ipaddr = 127.0.0.1
        proto = *
        secret = demo_radius_secret
    }
    
    # IPv6 Client
    client 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:1812
    User-Name = 'testuser'
    User-Password = 'mypass'
    NAS-IP-Address = 127.0.0.1
    NAS-Port = 0
    Message-Authenticator = 0x00
    Received Access-Accept Id 143 from 127.0.0.1:1812 to 127.0.0.1:51053 length 26
    Acct-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 --permanent
    firewall-cmd --reload
    firewall-cmd --list-services
    

    ※ [特殊化定制]:如果不想让raidus端口暴漏在公网上,可以只允许特定IP地址访问radius服务

    firewall-cmd --permanent --new-zone=radius
    firewall-cmd --reload
    
    firewall-cmd --permanent --zone=radius --set-target=ACCEPT
    firewall-cmd --permanent --zone=radius --add-service= radius
    firewall-cmd --permanent --zone=radius --add-source=192.168.111.222/32
    firewall-cmd --permanent --zone=radius --add-source=192.168.111.223/32
    firewall-cmd --reload
    firewall-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=https
    firewall-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
    

参考资料

Share Comments
comments powered by Disqus