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