CentOS 7.4 配置 WPA2 Enterprise(Radius) 认证
本文内容有很多地方可以进行优化,但是建议任何查看此文的过程中严格按照本文所述进行操作测试学会后再进行自行配置
安装 FreeRadius
1 | sudo yum install freeradius freeradius-utils |
检测 Radius 是否工作正常
修改用户账号配置
修改 /etc/raddb/users
文件,在首行添加
1 | testing Cleartext-Password := "password" |
此操作目的是为了「新建」一个用户名为「testing」、密码为「password」的测试用户。
在服务器中以调试模式启动 Radius 服务
1 | radiusd -X |
后文每次修改配置后都应重启 Radius 服务。要退出 Radius 服务可以直接在终端窗口按下 Ctrl+C,若启动过程中提示端口占用,则可用
killall radiusd
强制退出 Radius 服务
在服务器的另一个终端窗口执行下面的命令来测试连接是否正常
1 | radtest testing password 127.0.0.1 0 testing123 |
radtest 命令格式
1 radtest [OPTIONS] user passwd radius-server[:port] nas-port-number secret上述命令表示测试用户名为
testing
、密码为password
、服务器为本地服务器、nas-port-number 为0
、secret 为testing123
配置 Clients
打开 /etc/raddb/clients.conf
,在文件首添加
1 | client all_network { |
以放行所有 IP 地址(也可根据实际需要设定 IP 地址段),并设定一个新的 secret(此 secret 与上述 radtest 中的 secret 作用相同)
如果使用一些云主机,则可能需要进行端口安全组配置:入站 - UDP:1812
本地连接服务器测试(以 Mac 为例)
在 Mac 下安装 radtest:
1 | brew install freeradius-server |
然后使用 radtest 即可,注意 IP 地址替换为服务器 IP 地址、secret 替换为上述所配置的 IP 地址
安装 PostgreSQL
从现在开始将实现依托于数据库的身份验证。如果不需要数据库这么麻烦,那么按照「检测 Radius 是否工作正常」内「修改用户账号配置」的方式,以相似的方法添加新的账号即可。
本部分以 PostgreSQL 为例,原因一是我更喜欢用 PostgreSQL 一是我似乎没有找到已有且可用的 PostgreSQL 的配置方式。
如果还没有安装 PostgreSQL,那么需要先进行安装。如果已安装则可以跳过。
在服务器终端中运行
1 | sudo yum install postgresql-server |
来安装 PostgreSQL,再使用以下命令进行 PostgreSQL 的初始化并设定为自动启动
1 | postgresql-setup initdb |
配置用于 FreeRadius 的 PostgreSQL 表
首先需要先安装 freeradius-postgresql
,在服务器终端执行以下命令
1 | sudo yum install freeradius-postgresql |
添加 radius 账户
1 | adduser radius |
然后创建 PostgreSQL 数据库
1 | su - postgres |
createuser
命令执行时会提示设置一个数据库密码,此处设置为 radpass
导入数据库结构文件
1 | cd /etc/raddb/mods-config/sql/main/postgresql |
开启 Postgres 密码登录
打开 /var/lib/pgsql/data/pg_hba.conf
文件,在 82 与 84 行附近(IPV4 与 IPV6),将认证方式由 ident
改为 password
配置 FreeRadius 来让其使用 PostgreSQL
执行以下命令来启用 sql
1 | ln -s ../mods-available/sql /etc/raddb/mods-enabled/sql |
打开 /etc/raddb/mods-available/sql
文件并修改以下内容
- 31 行附近的
driver = "rlm_sql_null"
修改为driver = "rlm_sql_postgresql"
- 87 行附近的
dialect = "..."
修改为dialect = "postgresql"
- 91 行附近的
server``port``login``password
取消注释并修改为对应的值。本例中server=localhost
port=5432
login=radius
password=radpass
打开 /etc/raddb/sites-available/default
文件,修改所有的 -sql
为 sql
打开 /etc/raddb/sites-available/inner-tunnel
文件,修改所有的 -sql
为 sql
新增用户
在服务器中执行下列命令来新建一个账号为 fredf
密码为 wilma
的用户
进入 psql 环境
1 | sudo -u radius psql |
创建用户
1 | INSERT INTO radcheck (username, attribute, value, op) VALUES ('fredf', 'Cleartext-Password', 'wilma', ':='); |
可用如下命令检测用户是否创建成功
1 | select * from radcheck; |
检测登录是否正常
1 | radtest fredf wilma 127.0.0.1 0 testing123 |
路由器配置
经历了上面很简(e)单(xin)的配置后,终于可以正常使用了!在路由器 Wi-Fi 验证方式选择「WPA2 Enterprise」方式并配置好 Radius 的地址、端口、密钥即可正常使用。
TIPS —— 不要忘了修改一些默认参数
在测试通过后,千万不要忘记修改一些参数
/etc/raddb/users
文件首行的测试账号记得删除radiusd -X
命令调整为生产环境下使用的服务命令systemctl enable radiusd
systemctl start radiusd
/etc/raddb/clients.conf
内的 secret 记得调整- PostgreSQL 的
radius
账户密码记得修改alter user radius with password '新密码';
- 同步修改
/etc/raddb/mods-available/sql
文件信息
- 数据库内的用户信息记得修改
证书配置
进入到 /etc/raddb/
目录下,备份 certs
文件夹的内容
1 | cp -r certs certs.bak |
进入到 /etc/raddb/certs/
目录,删除掉原有的证书和记录
1 | rm -rf *.crt *.csr *.key *.pem *.der *.p12 index* |
修改 ca.cnf
、server.cnf
与 client.cnf
三个文件,主要修改内容与注意事项如下:
- CA_default 下的
default_days
与default_crl_days
设置为较长时间,以防需要频繁信任证书 - certificate_authority 下均可修改,ca.cnf 文件的 commonName 习惯设定为
"XXX Certificate Authority"
,server.cnf 文件的 commonName 习惯设定为"XXX Server Certificate"
,client.cnf 文件的 commonName 习惯设定为个人电子邮箱,同时需要注意这三个文件的 commonName 不能相同。 - req 下的
input_password
和output_password
可修改为任意字符串(证书加密密码),但(如非专业用户)需保证二者值相等。 - 其他选项请不要修改(除非明确知道这样做的目的与结果)
然后在终端运行下面的命令完成证书的配置
1 | cd /etc/raddb/certs/ |
重启 Radius 服务即可
1 | systemctl restart radius |