网管小贾 / sysadm.cc
Radius
对于搞系统的小伙伴们来说应该并不陌生,它是提供身份认证的服务程序。
Radius
应用广泛,最简单的场景之一就是无线连接,使用用户名密码或者证书等方式通过它的验证后无线网络连接就可以建立起来。
如此重要的一项基础应用服务,我们当然要重视起来,自然也就少不了经常要了解它的运行状况。
那么我们能想到的最简单经济的办法,就是用 zabbix
或是其他的监控软件来监控管理 Radius
。
不过翻遍了整个互联网,我似乎还没有找到比较完整可行的方案。
想要用 Zabbix
把 Radius
服务给监控起来,粗想想可能感觉简单。
用 Ping
呗,只要不通就可以判断服务器故障中断了。
可是有时候服务器是 Ping
得通的,网络是好的,但是服务也可能停了。
这种情况下怎么办呢?
要不直接监控 Radius
的后台服务?
只要服务是运行中,就算它是正常工作的。
有道理,不过这样看似解决了问题,实际上仔细再想想,要是服务是运行的,可它无法提供正常的认证验证服务,那也是有可能的,当然也是故障状态啊!
看来问题没有那么简单!
说了这么多,到底怎么做才算合理呢?
我们如果从 Radius
提供服务这个角度来看问题的话,那么自然很容易得出一个结论,那就是只要它能够正常返回认证响应就算它的状态正常,否则就算它处于故障状态。
再说得直白点,你给它发个验证请求 Access-Request
,它如果能正确返回响应信息( SUCCESS
或者 FAILURE
),不管验证是成功还是失败,我们就可以认为它的状态就是OK的,反之则NG。
好,道理讲明白了,具体如何做呢?
首先,我们要让 Zabbix
向 Radius
发出一个请求信号。
怎么整,你说发就能发呀?
是啊,这可不简单,我查遍了互联网,偶然发现有一篇老外的文章,多少对我有点启发。
大概的做法是,通过调用 Shell
脚本来实现,这在 Zabbix
中叫作外部检查。
不过他用的是 Ncat
这类的网络工具程序,发送 UDP
包到 Radius
服务器的 1812
端口。
理论是可行的,我也做了很多尝试,但是操作非常复杂,不太容易实现。
原因有二,一是 Ncat
只是个网络工具,它并不了解如何构造 Access-Request
请求包。
然而按照老外作者的意思,直接使用抓包后的数据包来模拟发送,这完全是行不通的。
因为现在一般的身份验证方法不会使用较低安全级别的验证方法,所以用这种简陋方法发送请求无法处理多次返回的响应信息。
另一个原因是,即使你能成功发送合法的请求包,但是 Radius
返回的响应包要你自己去抓取,它并没有获取返回信息的功能,这个要想通过简单的操作来实现几乎不太可能。
基于以上原因,以及根据我实际操作实验结果,最终放弃了此类方案。
虽然失败了,但是老外文章的想法却开启了我新的思路。
一是,可以利用 zabbix
的外部检查脚本。
二是,既然 Ncat
不行,那么我换一个可以正常请求的 Radius
客户端程序不就行了嘛!
事实证明,我的新思路完全行的通!
最终效果图展示, Zabbix
加 NPS
或 FreeRadius
,使用 MSCHAPv2
验证环境下测试通过。
同时当服务器故障时,触发器也能正常触发问题报警。
本文相关脚本及程序文末下载。
zabbix
监控 Radius
相关文件(文末集中下载)
Linux
- 外部检查脚本(
1K
) Radius
客户端MSCHAPV2
验证配置文件(1K
)- 验证
MSCHAPV2
客户端命令编译源代码(16K
) - 超时程序编译源代码(
15K
)
- 外部检查脚本(
Windows
- 验证
MSCHAPV2
客户端exe
可执行文件(6.4M
,可在Windows
下使用)
- 验证
具体怎么实现的呢?
在实现的期间又会遇到哪些坑呢?
下面我们就来详细说道说道……
扫码关注网管小贾公众号,发送001053,解锁教程完整内容。
(含20多幅实例插图,5千多字详实讲解,以及脚本程序打包下载)
将技术融入生活,打造有趣之故事
网管小贾 / sysadm.cc