CentOS 8 RADIUS服务搭建与高可用方案

一、RADIUS服务搭建

1. 系统准备

# 更新系统
dnf update -y

# 安装EPEL仓库
dnf install epel-release -y

# 安装必要工具
dnf install -y vim wget net-tools

2. 安装FreeRADIUS和MySQL

# 安装FreeRADIUS和MySQL相关包
dnf install -y freeradius freeradius-utils freeradius-mysql mariadb-server mariadb

# 启动MySQL服务并设置开机启动
systemctl enable --now mariadb

# 安全配置MySQL
mysql_secure_installation

3. 配置MySQL数据库

# 登录MySQL
mysql -u root -p

# 创建RADIUS数据库
CREATE DATABASE radius CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

# 创建RADIUS用户并授权
GRANT ALL ON radius.* TO 'radius'@'localhost' IDENTIFIED BY 'YourStrongPassword';
FLUSH PRIVILEGES;

# 切换到radius数据库
USE radius;

# 导入FreeRADIUS的MySQL schema
source /etc/raddb/mods-config/sql/main/mysql/schema.sql

# 退出MySQL
exit

4. 配置FreeRADIUS使用MySQL

# 启用SQL模块
ln -s /etc/raddb/mods-available/sql /etc/raddb/mods-enabled/

# 配置SQL模块
vim /etc/raddb/mods-enabled/sql

修改以下内容:

driver = "rlm_sql_mysql"
dialect = "mysql"
server = "localhost"
port = 3306
login = "radius"
password = "YourStrongPassword"
read_clients = yes

5. 配置用户和管理员级别

# 创建用户组表
mysql -u radius -p radius

执行SQL:

CREATE TABLE radusergroup (
    id int(11) unsigned NOT NULL auto_increment,
    username varchar(64) NOT NULL default '',
    groupname varchar(64) NOT NULL default '',
    priority int(11) NOT NULL default '1',
    PRIMARY KEY (id),
    KEY username (username(32))
);

-- 创建管理员组和普通用户组
INSERT INTO radgroupreply (groupname, attribute, op, value) VALUES 
('admin', 'Service-Type', ':=', 'Administrative-User'),
('admin', 'Filter-Id', ':=', 'admin'),
('user', 'Service-Type', ':=', 'Framed-User'),
('user', 'Filter-Id', ':=', 'user');

-- 添加测试用户
INSERT INTO radcheck (username, attribute, op, value) VALUES 
('admin1', 'Cleartext-Password', ':=', 'admin123'),
('user1', 'Cleartext-Password', ':=', 'user123');

-- 分配用户组
INSERT INTO radusergroup (username, groupname, priority) VALUES 
('admin1', 'admin', 1),
('user1', 'user', 1);

6. 配置FreeRADIUS策略

# 编辑sites-available/default
vim /etc/raddb/sites-available/default

找到authorize部分,确保包含以下模块:

authorize {
    ...
    sql
    ...
}

7. 启动服务

# 设置FreeRADIUS开机启动并启动服务
systemctl enable --now radiusd

# 检查服务状态
systemctl status radiusd

# 测试配置
radiusd -X

二、网络设备配置

1. 华三设备配置

radius scheme radius1
 primary authentication 192.168.1.100
 primary accounting 192.168.1.100
 key authentication your_shared_secret
 key accounting your_shared_secret
 user-name-format without-domain
domain system
 authentication default radius-scheme radius1
 authorization default radius-scheme radius1
 accounting default radius-scheme radius1

2. 华为设备配置

radius-server template radius1
 radius-server shared-key cipher your_shared_secret
 radius-server authentication 192.168.1.100 1812
 radius-server accounting 192.168.1.100 1813
aaa
 authentication-scheme radius1
  authentication-mode radius
 accounting-scheme radius1
  accounting-mode radius
 domain default
  authentication-scheme radius1
  accounting-scheme radius1

3. 思科设备配置

aaa new-model
aaa group server radius radius1
 server 192.168.1.100 auth-port 1812 acct-port 1813
!
radius-server host 192.168.1.100 auth-port 1812 acct-port 1813 key your_shared_secret
!
aaa authentication login default group radius1 local
aaa authorization network default group radius1 local 
aaa accounting network default start-stop group radius1

4. 锐捷设备配置

radius-server host 192.168.1.100 key your_shared_secret
aaa new-model
aaa authentication login default group radius local
aaa authorization exec default group radius local 
aaa accounting exec default start-stop group radius

三、测试验证

# 使用radtest测试认证
radtest admin1 admin123 localhost 0 testing123

# 检查日志
tail -f /var/log/radius/radius.log

# 查看用户会话
radwho

# 查看用户详细信息
radlast

四、日常运维事项

1. 监控与日志管理

# 实时监控日志
tail -f /var/log/radius/radius.log

# 日志轮转配置
vim /etc/logrotate.d/radiusd

# 监控服务状态
systemctl status radiusd

2. 数据备份

# 创建备份脚本
vim /usr/local/bin/radius_backup.sh

内容:

#!/bin/bash
BACKUP_DIR="/backup/radius"
DATE=$(date +%Y%m%d)
MYSQL_USER="radius"
MYSQL_PASS="YourStrongPassword"

mkdir -p $BACKUP_DIR/$DATE
mysqldump -u$MYSQL_USER -p$MYSQL_PASS radius > $BACKUP_DIR/$DATE/radius_db.sql
cp -r /etc/raddb $BACKUP_DIR/$DATE/
tar -czvf $BACKUP_DIR/radius_$DATE.tar.gz $BACKUP_DIR/$DATE
find $BACKUP_DIR -type d -mtime +30 -exec rm -rf {} \;

设置定时任务:

chmod +x /usr/local/bin/radius_backup.sh
echo "0 2 * * * /usr/local/bin/radius_backup.sh" | crontab -

五、高可用方案实现

1. 架构设计

  • 两台RADIUS服务器:radius1(主)和radius2(备)

  • 数据库采用MySQL主从复制

  • 使用Keepalived提供VIP漂移

2. 数据库主从配置

在主服务器(radius1)上:

vim /etc/my.cnf

添加:

[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW
binlog-do-db=radius

创建复制用户:

CREATE USER 'replicator'@'%' IDENTIFIED BY 'ReplicaPass123';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;

在从服务器(radius2)上:

vim /etc/my.cnf

添加:

[mysqld]
server-id=2
relay-log=mysql-relay-bin
read-only=1

配置复制:

CHANGE MASTER TO
MASTER_HOST='radius1',
MASTER_USER='replicator',
MASTER_PASSWORD='ReplicaPass123',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=PositionNumber;

START SLAVE;

3. FreeRADIUS双机配置

在两台服务器上安装配置FreeRADIUS(同第一部分),但修改SQL连接配置为:

vim /etc/raddb/mods-enabled/sql

修改为:

server = "vip-address"  # 或使用主库IP,故障时手动切换

4. Keepalived配置

在两台服务器上安装Keepalived:

dnf install -y keepalived

主服务器配置(/etc/keepalived/keepalived.conf):

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass YourPass
    }
    virtual_ipaddress {
        192.168.1.200/24
    }
}

备服务器配置:

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass YourPass
    }
    virtual_ipaddress {
        192.168.1.200/24
    }
}

启动服务:

systemctl enable --now keepalived

5. 高可用测试

  1. 使用VIP(192.168.1.200)配置网络设备进行认证测试

  2. 手动停止主服务器上的radiusd服务,验证备机是否接管

  3. 断开主服务器网络,验证VIP是否漂移到备机

六、PostgreSQL替代方案

如需使用PostgreSQL替代MySQL:

# 安装PostgreSQL
dnf install -y postgresql-server freeradius-postgresql

# 初始化数据库
postgresql-setup --initdb

# 启动服务
systemctl enable --now postgresql

# 创建radius用户和数据库
sudo -u postgres psql
CREATE DATABASE radius;
CREATE USER radius WITH PASSWORD 'YourStrongPassword';
GRANT ALL PRIVILEGES ON DATABASE radius TO radius;

导入schema:

sudo -u postgres psql -d radius -f /etc/raddb/mods-config/sql/main/postgresql/schema.sql

修改FreeRADIUS SQL配置:

driver = "rlm_sql_postgresql"
server = "localhost"
port = 5432
login = "radius"
password = "YourStrongPassword"

PostgreSQL高可用可采用类似的主从复制或Patroni+etcd方案。

七、扩展建议

  1. 负载均衡:对于大型网络,可部署多台RADIUS服务器并使用负载均衡器分发请求

  2. 地理冗余:在不同数据中心部署RADIUS集群

  3. 监控系统:集成Prometheus+Grafana监控RADIUS性能指标

  4. 自动化运维:使用Ansible等工具实现配置管理和自动化部署

  5. 安全加固:定期审计,使用TLS加密RADIUS通信,限制数据库访问

以上方案可根据实际网络规模和需求进行调整,建议在测试环境验证后再部署到生产环境。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值