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
2
> 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
2
3
4
client all_network {
ipaddr = 0.0.0.0/0
secret = testing-456
}

以放行所有 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
2
3
postgresql-setup initdb
systemctl enable postgresql
systemctl start postgresql

配置用于 FreeRadius 的 PostgreSQL 表

首先需要先安装 freeradius-postgresql,在服务器终端执行以下命令

1
sudo yum install freeradius-postgresql

添加 radius 账户

1
adduser radius

然后创建 PostgreSQL 数据库

1
2
3
4
su - postgres
createuser radius --no-superuser --no-createdb --no-createrole -P
createdb radius --owner=radius
exit

createuser 命令执行时会提示设置一个数据库密码,此处设置为 radpass

导入数据库结构文件

1
2
cd /etc/raddb/mods-config/sql/main/postgresql
sudo -u radius psql radius < schema.sql

开启 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 文件并修改以下内容

  1. 31 行附近的 driver = "rlm_sql_null" 修改为 driver = "rlm_sql_postgresql"
  2. 87 行附近的 dialect = "..." 修改为 dialect = "postgresql"
  3. 91 行附近的 server`portloginpassword取消注释并修改为对应的值。本例中server=localhostport=5432login=radiuspassword=radpass`

打开 /etc/raddb/sites-available/default 文件,修改所有的 -sqlsql

打开 /etc/raddb/sites-available/inner-tunnel 文件,修改所有的 -sqlsql

新增用户

在服务器中执行下列命令来新建一个账号为 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.cnfserver.cnfclient.cnf 三个文件,主要修改内容与注意事项如下:

  1. CA_default 下的 default_daysdefault_crl_days 设置为较长时间,以防需要频繁信任证书
  2. certificate_authority 下均可修改,ca.cnf 文件的 commonName 习惯设定为 "XXX Certificate Authority",server.cnf 文件的 commonName 习惯设定为"XXX Server Certificate",client.cnf 文件的 commonName 习惯设定为个人电子邮箱,同时需要注意这三个文件的 commonName 不能相同。
  3. req 下的 input_passwordoutput_password 可修改为任意字符串(证书加密密码),但(如非专业用户)需保证二者值相等。
  4. 其他选项请不要修改(除非明确知道这样做的目的与结果)

然后在终端运行下面的命令完成证书的配置

1
cd /etc/raddb/certs/

重启 Radius 服务即可

1
systemctl restart radius