NET-SNMP
简介
- 简单的网络管理协议,属于应用层上的协议。
- 采用UDP协议在管理端和代理端之间进行通信。
- 主要有两大部分构成: SNMP管理端(manager) 和 SNMP代理端(agent)。
- manager(NMS :网络管理工作站)
- 查询代理商
- GET:获取来自代理端的响应。
- SET:在代理中设置变量。
- Trap: 接受 代理端主动向管理端通报重要事件。
- agent
- 收集本地环境的管理信息。
- 存储和检索MIB中定义的管理信息。
- 向管理端发送事件信号。
- MIB(管理信息库)
- 可以理解为agent维护的管理对象数据库
- 按层次结构组织的树状结构,每个被管理的对象对应树形结构的一个叶子节点。(称为 :object)
- MIB文件是 manager可以向agent询问的一些问题(管理对象的信息和状态)。
- agent在本地收集这些数据,并将其存储在MIB中。
- 通常情况下:由服务器(manager)请求而获得的数据由服务器的161端口接收。代理端,主动向服务器发送消息,通常是往服务器的162端口发。
- MIB Browser操作:
- Get 获取当前OID的值
- Get Next 获取下一个OID的值,会自动增加OID序号
- Get Bulk 分页批量获取,一次获取10个值,会自动增加OID序号
- Get Subtree 获取OID下面的所有子树的值
- Set 设置OID的值
- Walk 获取OID的值,会自动增加OID序号,且一直持续查询
- netstat -an | grep 161 //看端口 netstat -lntup | grep snmp
- ps aux | grep snmp
iptables –L –n 查看当前iptables规则
iptables -I INPUT -p udp --dport 161 -j ACCEPT命令添加UDP 161端口到iptables防火墙
SNMPD 常用命令
- snmptrap -v 2c -c public 10.1.1.165:162 0 .1.3.6.1.4.1.2354 1.3.6.1.4.1.2354.1 s "hello!"
- 2c 是选择snmp协议的版本
- public 是共同体
- 10.1.1.165:162 是发往的ip和端口,端口也可以不指定,默认是162
- 0 是uptime
- .1.3.6.1.4.1.2354 是TrapOID
- .1.3.6.1.4.1.2354.1 是数据OID
- s 是要发送的内容的类型(s代表 string)
- hello! 是数据值
- snmptranslate 在数字和文本之间转化MIB的OID的名字
- snmpwalk -v 2c -c public localhost .1.3.6.1.4.1.2021.9.1.6
- 把 .1.3.6.1.4.1.2021.9.1.6 下的所有OID列出来。
- snmpget -v 2c -c public localhost .1.3.6.1.4.1.2021.9.1.6.1
- 查询一个节点OID
- snmpget -v -2c -c public tcp:localhost:1611 .1.3.6.1.4.1.2021.9.1.6.1
- tcp #选择tcp协议
- 1611 #选择端口号
- 默认不指定tcp的话采用 udp协议
snmpd.conf
- 配置开放的端口 选择启用udp和tcp
- agentaddress udp:161,tcp:1611
- 配置监控磁盘信息
- disk / 20%
- includeAllDisks 10%
- 可以访问的路径
- view systemonly included .1 #表示.1一下左右的oid都可以访问
- 扩展OID
- pass .1.3.6.1.4.1.866.9.8.0.0 /bin/bash /tmp/passtest6002
OID扩展
- 对配置文件的更改 (snmpd.conf)
- 需要include : view systemonly included .1.3.6.1.4.1.2021.6000
- 使用pass eg:pass .1.3.6.1.4.1.2021.6000.1.0 /bin/bash /tmp/passtest6000.sh
- .1.3.6.1.4.1.2021.6000.1.0 是要扩展的OID
- /tmp/passtest6000.sh 管理端要执行get/set 等操作时,运行此脚本,并有两个传入参数
- 例如:snmpget -v 2c -c publuc localhost .1.3.6.1.4.1.2021.6000.1.0
- snmpget命令执行之后 会自动执行以下命令
- /tmp/passtest6000.sh -g .1.3.6.1.4.1.2021.6000.1.0
- /tmp/passtest6000.sh 该脚本 的返回值,必须有的三个:OID和TYPE和VALUE
- 注意:pass 最后的.sh脚本文件,不能放在家目录中(否则扩展失败)。
配置v3
- 步骤
- 1、停止snmpd服务
- 2、net-snmp-config --create-snmpv3-user -a SHA -A 00001227 -x AES -X pri001227 wpx
- 2.1 使用net-snmp-config 来生成需要配置的内容
- 2.2 --create-snmpv3-user #生成v3的用户
- 2.3 -a SHA #选择密码加密算法(有两种 SHA和MD5)SHA算法安全等级更高
- 2.4 -A 00001227 #设置密码 对长度有要求,不能太短,最短8位。
- 2.5 -x AES #选择数据加密算法 (AES 和 DES)
- 2.6 -X pri001227 #设置数据加密的密钥
- 2.7 wpx #设置用户名称
- 2.8 执行该命令之后,会生成两行需要配置的内容。
- 2.8.1 createUser wpx SHA "00001227" AES pri001227
- 2.8.2 rwuser wpx
- 将2.8.1 和 2.8.2 的内容添加到 snmpd的配置文件/etc/snmp/snmpd.conf
- 3、service snmpd start 或 systemctl start snmpd.service启动snmpd服务
- 验证
- snmpget -v 3 -u wpx -l authPriv -a SHA -A 00001227 -x AES -X pri001227 tcp:localhost:1611 1.3.6.1.4.1.2021.4.6.0
- -u wpx #用户名
- -l authPriv #选择登录模式
- noAuthNoPriv (没有身份验证,没有数据加密)
- authNoPriv (有身份验证,没有数据加密)
- authPriv (有身份验证,有数据加密)
- -a SHA -A 00001227 #密码加密的算法和密码
- -x AES -X pri001227 #数据加密的算法和对应的密码
- tcp:localhost:1611 #选择tcp协议 服务器是本机 端口号是1611
- 1.3.6.1.4.1.2021.4.6.0 #要查询的oid。
访问控制
- v3的访问控制:
- rwuser wpx auth -V wpxview (控制wpx用户,只能访问,wpxview中定义的oid)
- 注意: -V要大写
- v2c 的访问控制
- rocommunity wpx default -V testview(只能访问,wpxview中定义的oid)
- wpx 为v2的用户名。
- 相同的用户名可以用作v2 也可以用用作 v3 ,但是最终这个用户能get到哪些oid的信息,取决于登陆方式。
附:snmpd.conf 配置man帮助:Manpage of SNMPD.CONF