一、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. 高可用测试
-
使用VIP(192.168.1.200)配置网络设备进行认证测试
-
手动停止主服务器上的radiusd服务,验证备机是否接管
-
断开主服务器网络,验证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方案。
七、扩展建议
-
负载均衡:对于大型网络,可部署多台RADIUS服务器并使用负载均衡器分发请求
-
地理冗余:在不同数据中心部署RADIUS集群
-
监控系统:集成Prometheus+Grafana监控RADIUS性能指标
-
自动化运维:使用Ansible等工具实现配置管理和自动化部署
-
安全加固:定期审计,使用TLS加密RADIUS通信,限制数据库访问
以上方案可根据实际网络规模和需求进行调整,建议在测试环境验证后再部署到生产环境。
1487

被折叠的 条评论
为什么被折叠?



