CentOS7用hostapd做radius服务器为WiFi提供802.1X企业认证
来源: https://www.cnblogs.com/osnosn/p/10593297.html 来自osnosn的博客
写于: 2019-03-27.
前言
家里的WiFi一般是用WPA2认证,密码只有一个,泄漏了,家里所有设备都要换密码。
再加上现在密码共享软件的流行,如“wifi万能钥匙”,WPA2的密码也不安全了。
本文介绍如何搭建一个EAP的企业认证WiFi。支持N个账号(N>=1),可以做到一人一个账号。
一个账号泄漏,改掉这个账号的密码,或者删除这个账号就行。
如果你不嫌麻烦,还可以发放一人一个证书认证上网。证书本身有过期时间的,还能吊销。
过期证书或被吊销证书,是不能登陆WiFi的。
支持 EAP-PEAP(msCHAPv2) 用户账号认证。用户账号存于文本文件中。
EAP-TLS证书认证,证书自行生成,可以吊销单个证书而阻止再次连接。
其他搭建方法
-
如果你没有Linux(CentOS,Debian)机器。可以仅用一个OpenWRT的路由器搭建WiFi的企业认证:
请参看我写的另一文:Newifi OpenWrt 下 EAP-PEAP,EAP-TLS 企业级无线认证及 FreeRadius3 -
OpenWRT也可以用hostapd做radius服务器。需要您会使用SDK重新编译hostapd-full软件包。
参考【创建编译环境_编译OPENWRT固件_用SDK为官方固件编译第三方软件】,【在Openwrt上利用hostapd进行EAP-TLS认证】,
op-18.06 改package/network/services/hostapd/Makefile
,
其他版本, 修改feeds/base/package/network/services/hostapd/Makefile
,
无需修改PKG_RELEASE:=xx
, 可以顺利的替换。remove 旧的,再 install 新的。
对于19.07.8的SDK, 是101行。对于21.02.1的SDK, 是108行。对于22.03.0是106行。对于23.05.2是103行。
对于22.03,还要把PKG_RELEASE
改的比官版的大一点。否则装不上。- 不改也行,安装包时,不要
opkg update
并且rm -f /var/opkg-list/*
就可以安装。
还有个办法,强制装本地 ipk文件,opkg -f /dev/null install xxxxx.ipk
后面增加
CONFIG_DRIVER_NONE=y CONFIG_RADIUS_SERVER=y
,变成以下的样子。ifeq ($(SSL_VARIANT),openssl) ... ifeq ($(LOCAL_VARIANT),full) DRIVER_MAKEOPTS += CONFIG_OWE=y CONFIG_SUITEB192=y CONFIG_AP=y CONFIG_MESH=y CONFIG_DRIVER_NONE=y CONFIG_RADIUS_SERVER=y endif
或者修改 "feeds/base/package/network/services/hostapd/files/hostapd-full.config" 和 "wpa_supplicant-full.config" 把这几项加进去。
make menuconfig 中勾上 hostapd-openssl,在 "Network"->"WirelessAPD" 中找。
make menuconfig 中勾上 wpad-openssl,在 "Network"->"WirelessAPD" 中找。
然后编译 hostapd 软件包。make package/hostapd/compile V=s -j2
。
完成后,在 bin/packages/.... 目录中,可以找到 hostapd-openssl_xxxx.ipk 文件。
完成后,在 bin/packages/.... 目录中,可以找到 wpad-openssl_xxxx.ipk 文件。
有wifi设备的路由,会安装 wpad。而 wpad 包含 hostapd。 - 不改也行,安装包时,不要
-
在路由器中, 用新编译的,替换掉原版的 hostapd-openssl(无wifi硬件) 或 wpad-openssl(有wifi硬件) 。
-
按照下文,创建三个配置文件,创建证书。
-
/usr/sbin/hostapd -B /.xx./hostapd.conf
单独启动一个进程,提供radius服务。
把这个启动命令,放在/etc/rc.local
的最后。 -
配置路由器的WiFi认证,使用WPA2-EAP模式。
-
这篇帖子的做法,更好: 【OpenWrt 用 hostapd 作为 Radius 服务器配置 WPAx-EAP 认证】
- 在op的 SDK 目录中,修改
# vim feeds/base/package/network/services/hostapd/files/hostapd-full.config # 找到并启用这两行 CONFIG_DRIVER_NONE=y CONFIG_RADIUS_SERVER=y
- 编译wpad-openssl 或 hostapd-opensssl 软件包。
make package/hostapd/compile V=s -j2
- 按照下文,创建三个配置文件,创建证书。
- op中,新建系统服务 "/etc/init.d/hostapd-radius"
#!/bin/sh /etc/rc.common START=90 USE_PROCD=1 NAME=hostapd-radius start_service() { if [ -x "/usr/sbin/hostapd" ]; then procd_open_instance hostapd-radius procd_set_param command /usr/sbin/hostapd -s /etc/hostapd/hostapd.conf procd_set_param respawn 3600 1 0 [ -x /sbin/ujail -a -e /etc/capabilities/wpad.json ] && { procd_add_jail hostapd-radius procd_set_param capabilities /etc/capabilities/wpad.json procd_set_param user network procd_set_param group network procd_set_param no_new_privs 1 } procd_close_instance fi }
- 启用并启动服务。
/etc/init.d/hostapd-radius enable /etc/init.d/hostapd-radius start
- 在op的 SDK 目录中,修改
-
对于op23.05, 已经启用
CONFIG_RADIUS_SERVER=y
但没有启用CONFIG_DRIVER_NONE=y
。
并已经提供了 hostapd-radius 命令,配置文件在 /etc/radius/。应该可以单独提供radius服务。
不会用,没测试。
Newifi mini 的记录
- 编译好的 wpad-openssl_mipsel_24kc.ipk , wpad-openssl_x86_64.ipk 可以在这里找到现成的【github.备份的文件】。
- 刷完 op-19.07 ,root 总空间11.7MB,剩余 10.8MB。更换编译的 wpad-openssl 后,root空间剩余 8.6MB。
- 刷完 op-21.02 ,root 总空间10.6MB,剩余 10.0MB。更换编译的 wpad-openssl 后,root空间剩余 8.1MB。
- Newifi mini更换包之后,如果点不亮WiFi,试试把"高级设置"->"国家代码", 设为CN。
- 按下文,在/etc/hostapd/中创建三个配置文件。hostapd.conf,hostapd.eap_user,hostapd.radius_clients。
- 找个Linux系统,创建一套证书。
- 测试
hostapd -dd /etc/hostapd.conf
。如果OK,就 ctrl-c 退出。 /etc/rc.local
中加一行/usr/sbin/hostapd -s -B -P /var/run/hostapd-radius.pid /etc/hostapd/hostapd.conf
。就能开机启动了。
参考
本文参考了几位大神的文章:
其他链接
- hostapd 源码.文件树,
- openwrt 有线wired802.1x认证
- hostapd 代码分析-完全的802.1X认证过程(radius服务器)
- 搭建openwrt企业级认证-快速漫游的简单过程与常见问题_802.11r_EAP_FT-EAP_hostapd operation not permited_no r0kh matched
安装配置
安装 hostapd 软件包
- 我用的是CentOS7.
yum install hostapd
我装的版本是2.6- 进入
/etc/hostapd/
目录。 - 创建以下三个文件。
- 根据文末提示的链接,创建所需的证书。
hostapd -dd /etc/hostapd/hostapd.conf
前台运行,测试一下。按ctrl-c
退出。service hostapd start
启动服务正式工作。
hostapd.conf
参考官方文档 hostapd.conf,
# hostapd.conf
# All path MUST be absolute path.
# 文件中所有配置的路径,要使用绝对路径。hostapd不认相对路径。
driver=none
ieee8021x=1
eap_server=1
eap_user_file=/etc/hostapd/hostapd.eap_user
radius_server_clients=/etc/hostapd/hostapd.radius_clients
radius_server_auth_port=1812
ca_cert=/etc/hostapd/ca_cert+crl.pem
server_cert=/etc/hostapd/server_cert.pem
private_key=/etc/hostapd/server_key.pem
# 备用服务器证书配置,主要用于同时启用RSA和ECC公钥。但可能有兼容性问题。
#server_cert2=/etc/hostapd/server_cert-ecc.pem
#private_key2=/etc/hostapd/server_key-ecc.pem
# 0 = do not verify CRLs (default)
# 1 = check the CRL of the user certificate
# 2 = check all CRLs in the certificate path
check_crl=1
# logger set -1 == all
# bit 0 (1) = IEEE 802.11
# bit 1 (2) = IEEE 802.1X
# bit 2 (4) = RADIUS
# bit 3 (8) = WPA
# bit 4 (16) = driver interface
# bit 5 (32) = IAPP
# bit 6 (64) = MLME
logger_syslog=0
#logger_syslog=6
logger_syslog_level=2
logger_stdout=0
#logger_stdout=-1
logger_stdout_level=2
# ---以下的配置项,未测试---
# 忽略user证书的有效期,禁用v1.0,v1.1,启用v1.3
#tls_flags=[DISABLE-TIME-CHECKS][DISABLE-TLSv1.0][DISABLE-TLSv1.1][ENABLE-TLSv1.3]
# 缓存OCSP装订,请看官方文档。Cached OCSP stapling response (DER encoded)
#ocsp_stapling_response=/tmp/ocsp-cache.der
hostapd.eap_user
参考官方文档 hostapd.eap_user,
# hostapd.eap_user
# Phase 1 users
# 指定匿名身份, 写多行, 按顺序匹配。
#"user4" TTLS
#"user5" TLS
# `*` 表示,匿名身份随便写,只能有一行,因为它一定会被匹配。后续的配置行失效。因为后续行,不会被匹配。
# `*` anonymous identities: input anything is OK.
#* PEAP,TLS,TTLS
* PEAP,TLS
# Phase 2 users
# MSCHAPV2 用于PEAP
# TTLS-PAP,TTLS-MSCHAP,TTLS-MSCHAPV2 用于TTLS
"user1" MSCHAPV2 "pass1" [2]
"user2" MSCHAPV2 "pass2" [2]
# 上面给自家用,下面给客人用
"user3" MSCHAPV2 "pass3" [2]
"tuser4" TTLS-MSCHAPV2 "tpass4" [2]
如果 仅需要PEAP, 就写
* PEAP
,下面写账号,一行一个账号。
如果 仅需要TLS, 就写* TLS
,下面的账号就不需要了,写了也没用,不会用到。
此项配置不能写成两行,hostapd不认,一定要写成一行* PEAP,TLS
,多种认证方式用逗号分隔。
hostapd.radius_clients
# hostapd.radius_clients
127.0.0.1 key1234
192.168.0.0/16 key1234
#192.168.2.0/24 key1234
#0.0.0.0/0 key5678
创建证书
- 如果要创建临时的测试证书,【参考这篇,证书创建部分】。
- EAP-TLS 认证中用到的证书,见我写的另一文 "用openssl为EAP-TLS生成证书(CA证书,服务器证书,用户证书)"。
- 也可以在网上申请免费的证书,但只能做PEAP认证,不能做EAP-TLS。
见【其他证书测试】
网上申请证书,见【去freessl.org申请免费ssl服务器证书_acme.sh脚本_证书自动化_LetsEncrypt】
设置 WiFi 接入点的认证方式
AP设备的认证设置,选择 WAP2-EAP。
详细的AP设备的认证设置,客户端的连接设置,请参看页头大神的文章。
安装配置完成
转载请注明来源。
来源: https://www.cnblogs.com/osnosn/p/10593297.html 来自osnosn的博客
--------- end ---------