osnosn

  博客园 :: 首页 :: 博问 :: 闪存 :: :: 联系 :: 订阅 订阅 :: 管理 ::

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
      
  • 对于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 软件包

  • 我用的是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

创建证书

设置 WiFi 接入点的认证方式

AP设备的认证设置,选择 WAP2-EAP。
详细的AP设备的认证设置,客户端的连接设置,请参看页头大神的文章。

安装配置完成

转载请注明来源。
来源: https://www.cnblogs.com/osnosn/p/10593297.html 来自osnosn的博客
--------- end ---------

posted on 2019-03-27 20:31  osnosn  阅读(3771)  评论(0编辑  收藏  举报