|
本帖最后由 Tinko 于 2017-11-2 09:36 编辑
因为自己周边情况比较特殊,路由器上用的人比较多,之前一直定位不好哪些人什么时候在用,各自的使用情况也不是很清楚,前段时间因为懒得刷固件(一直用的 Pandorabox ),于是上了 Wifidog 。Wifidog的好处就在于不用过分折腾能直接用上,然而缺点就在于每次连接都需要认证,而且在如今 HTTPS 逐步铺开的情况下, Wifidog 是无法实现对 HTTPS 的截获和跳转的(搜了一圈好像有支持方案,但是看着太麻烦了),同时又由于 Wifidog 的认证跳转还会面临浏览器缓存的影响,不确定性就更大。于是为了实现帐号认证,决定改用企业级无线加密来进行身份认证。同时,又由于一些乱七八糟的想法和限制(主要是懒),所以这边主要的需求条件可以归结为以下几条:- 用户名密码认证
- 不用Wifidog
- 一次认证即绑定设备自动连接
- 在路由器内完成所有认证流程
- 不使用外部服务器
- 保证路由器基本的路由功能不受影响
前期因为懒得刷固件,再加上 Pandorabox 用的也还比较顺手,所以第一时间想的还是 Pandorabox 的改造。但是在 Pandorabox 下是根本不存在 wpad-mini 这个包的,即便装上了 wpad 或者 hostapd 也不会在加密方式下出现 EAP 的选项。不甘心,直接跑去问 lintel ,L大倒是很直接,“暂时没有支持”。短短六个字告诉我此路不通。虽然现在告别了 Pandorabox ,但是我还是要说一句,潘多拉真的好用。
考虑到之前用的 U-boot 也比较老了,于是顺手换了一个新版本,好像还改了名字叫 PB-boot ,固件是 http://downloads.pandorabox.com. ... 0170907-1a831a3.bin 。另外因为自己比较懒得折腾,所以对于路由器底层的东西弄的也不多,也是图个方便,对于引导和恢复模式也就只有一个重刷固件的需求,也就没用 Breed ,单纯的嫌麻烦。
换了 PB-boot 之后就四处找固件呗。因为长年没刷固件了也不是很清楚最新的情况,搜了 Newifi Mini OpenWRT 之后找到了这个帖子:https://www.right.com.cn/forum/thread-206301-1-1.html ,直到一切弄完我才知道 LEDE 原来是 OpenWRT 的后续版本,也才在 LEDE 官网找到官方编译的 Newifi Mini 固件,不过也无所谓了,能用就成。
装上 LEDE 之后就是基本套路,配密码配 ssh ,我是直接用的官方软件源更新的,网络不好的可能需要自己找国内镜像。另外提一句, Newifi Mini 跑 LEDE 感觉很慢是因为 uhttpd 的 HTTPS 拖慢的,实际系统本身是完全跑得起来的。觉得无法接受这个情况的话可以关掉 uhttpd 的 HTTPS 跳转。
更新完软件源之后先卸载 wpad-mini 然后安装 wpad ,完成之后即可在无线设置下面的加密方式看到 EAP (是的,这回真的有了)。有就行了,接下来就是装 freeradius 。
我搜索到的内容都还是停留在 freeradius2 ,然而 LEDE 官方源里面提供的 freeradius 已经到了3,也算是个小惊喜。为了图方便,我一次性把 freeradius 的所有软件包全部装上了。
装完之后先用禁用和停止命令停掉可能启动的 radiusd 以及它的自启动项:
- # /etc/init.d/radiusd disable
- # /etc/init.d/radiusd stop
复制代码 接下来,打开 /etc/freeradius3/clients.conf ,在配置段 client localhost 下,能够看到当前默认的 secret ,也就是 Radius 认证密钥。将密钥复制,进入 LEDE 无线设置的加密设置,根据情况选择 WPA-EAP 或者 WPA2-EAP ,在下方填入 Radius 服务器地址(应该是 127.0.0.1)和前面拿到的密钥。保存更改后扫描网络,应该能够看到无线网络已经挂上了加密,但是这时候是无法登录的,因为 Radius 服务器并没有启动,所以需要使用有线网进行后续的调试。
当然,如果你选择使用一个 Radius 客户端来进行调试,在调试完成后再修改无线加密设置,也是可以的。
接下来使用这条命令启动 freeradius 的调试模式:
如果出现任何找不到文件之类的报错然后停止运行,就直接把相关的模块装上就成。重复这一步骤,直到这条命令的运行结果出现
- Ready to process requests
复制代码 并且稳定在这一条时,即表明 Radius 服务器已经起来了。此时尝试连接无线网络,会有一版的日志刷屏然后报错提示连接失败,这是正常情况(毕竟还没配帐号嘛),然后按 Ctrl+C 停掉 Radius ,准备配置认证方式。
freeradius 支持的认证方式非常多,包括什么 MySQL 啊, LDAP 啊,还有很多很多。由于我的需求就是简简单单一个帐号认证,自然也就没在路由器上面弄数据库,所以单文件记录帐号信息是最为理想的。同时,又不希望别人有访问路由器的权限,于是也就放弃了使用路由器自身 Unix 密码作为 Radius 帐号的认证策略。调整 Radius 认证策略的配置文件位于 /etc/freeradius3/sites-enabled/default 文件中的 server default / authorize 配置段内。这里放出我当前的配置:
- authorize {
- filter_username
- preprocess
- files
- chap
- mschap
- digest
- suffix
- eap {
- ok = return
- }
- expiration
- logintime
- pap
- }
复制代码 注:这里最主要的一项就是 files ,其它的比如 unix , sql 我都直接注释了。这中间应该还有几项是没有必要的,但是没有再去调整尝试。
接下来就是配置帐号,在 /etc/freeradius3/mods-config/files/authorize 中,根据文件中给出的示例,添加一行认证信息:
- bob Cleartext-Password := "hello"
复制代码 保存之后使用上面给出的调试模式命令启动 Radius 服务器,再次连接。如果连接成功,那就恭喜你,RP大暴发。但是基本都会失败,因为 LEDE 官方打出来的包是有问题的。
如果失败原因是 “The users session was previously rejected” ,而且往上翻日志翻来覆去就是找不出原因,请尝试:
在 /etc/freeradius3/sites-available/inner-tunnel 中,第 220 行附近,有一段配置项:
- Auth-Type MS-CHAP {
- mschap
- }
复制代码 将 MS-CHAP 更改为 MSCHAP ,即去掉中间的连字符号:
- Auth-Type MSCHAP {
- mschap
- }
复制代码 保存之后尝试启动认证,如果成功,那就 OK 了。
(p.s. 这个问题我在某 G 上搜了两个多小时只看到一个人问这个情况)
成功之后就可以继续按照如上格式添加帐号信息,然后启动 Radius 服务,也就算完成了:
- # /etc/init.d/radiusd enable
- # /etc/init.d/radiusd start
复制代码 当然,对于我这边是不可能这么简单的。因为密码是明文保存,又没有一个可用的图形化管理界面,因此每次要更改密码的时候我都需要直接去修改 authorize 文件,那只要有人在后面看着,所有人的密码都暴露了。于是在文件中我的想法是保存为密文。根据 http://networkradius.com/doc/3.0.10/raddb/mods-available/pap.html 的介绍, freeradius 是支持这些哈希方式的,但是在我尝试 MD5 哈希密码的时候, freeradius 的报错提示是“因为没有明文密码无法生成 NT Hash 于是无法认证。”也就是说,连接过程中优先采用的也还是 MS-CHAPv2 认证方式。那既然这样就好办了,直接写入 NT Hash 作为密文:
- test NT-Password := "69943C5E63B4D2C104DBBCC15138B72B"
复制代码 生成 NT Hash 的方法有以下几种:
- 使用完整版 freeradius 套件中附带的 smbencrypt 命令;
- http://www.cmd5.com/hash.aspx
- https://tobtu.com/lmntlm.php
- https://www.browserling.com/tools/ntlm-hash
- 其余未列出
好啦,基本这就配置完成了,上几张图
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
查看全部评分
|