net-snmp配置文件詳解
net-snmp的配置文件是有一定的層次結構的,配置起來也很方便。網上找了很多資料,大概把這個配置文件的各個信息搞懂了一點。其實在net-snmp的EXAMPLE.conf文件中對齊有詳細的描述,不過是英文的。
開啟子代理模式
開發net-snmp子代理后,如果想要使用它,必須開啟子代理功能。如果不開啟,子代理運行的時候將會報錯 Warning: Failed to connect to the agentx master agent ([NIL])
設置snmpd監聽的地址端口
snmpd默認是監聽本地所有的IP地址的 UDP 161端口 等待snmp請求。如果不希望使用默認的監聽設置,可以使用自定義的選項
# Listen for connections from the local system only # 只監聽本地的連接 agentAddress udp:127.0.0.1:161 # Listen for connections on all interfaces (both IPv4 *and* IPv6) # 監聽所有接口的連接 #agentAddress udp:161,udp6:[::1]:161
定義安全體名和共同體名稱
共同體這個是SNMPv2中的,如果只是使用SNMPv3協議,可以不需要。
rocommunity 共同體名
rwcommunity 共同體名
使用 rocommunity 來定義一個只讀權限的共同體,使用 rwcommunity 來定義一個讀寫權限的共同體。
定義完共同體之后就要定義一個安全體,並把共同體映射到一個安全體中去。安全體用於控制外部訪問的來源的。
使用com2sec關鍵字來定義安全體。
# sec.name souce community com2sec read default public com2sec write default public com2sec test default public
# 1. com2sec # 命令格式一:com2sec [-Cn context] sec.name source community # 功能: map an SNMPv1 or SNMPv2c community string to a security name,即將實體(community)字符串映射為安全的 # 名字,v1 和v2版本都是明文密碼,也就無所謂安全性了。v3中增加了安全性。 # 參數說明:-Cn context:可選的,在v3版本中使用 # sec.name: 內部映射的名字,字符串,后面用到 # community:實體字符串,外部使用的名字 # source:可以訪問的ip地址范圍,默認值"default”,即任何ip都可以訪問。 # 也可以限制ip范圍,有兩種方式:IP/MASK和IP/BITS # IP/MASK:10.10.10.0/255.255.255.0 # IP/BITS :10.10.10.0/24:只有ip地址在10.10.10.0 # mask為24個1,即255.255.255.0 # 命令格式二:com2sec6 [-Cn context] sec.name source community # 針對ipv6,其他和com2sec相同 # 命令格式三:com2secunix [-Cn context] sec.name sockpath community # 只限本地socket可以訪問 #------------------------------------------------------------------------ #因為SNMPv3已經使用usm作為安全模型,使用,去掉共同體定義。 #com2sec 是net-snmp中定義安全體名字的關鍵字,表示這一行定義一個安全體名字。
定義安全組
定義完安全體之后,就要定義安全組了。安全體是用於控制訪問的的來源的,安全組就是控制安全體中允許的來源的訪問授權模式的。
#com2sec 是net-snmp中定義安全體名字的關鍵字,表示這一行定義一個安全體名字。 #第二步,定義安全組,將安全體名稱加進一個安全組中 # #groupName 安全組名稱 #securityModel 安全模型,可選值:v1,v2c,usm #securityName 安全體名稱 # groupName securityModel securityName group readgroup usm read group writegroup usm write group testgroup usm test #group是定義安全組的關鍵字 # 2. group # 命令格式:group groupName securityModel sec.name # 功能:將sec.name映射到一個group中,組中具有相同的存取權限。組中至少有兩個 # sec.name,如果只有一個sec.name,也會被解釋為兩個。即有兩個相同的 # 參數說明:groupName:組名 # securityModel:v1、v2c、usm、tsm、ksm其一
定義視圖,供安全組使用
定義完安全組后,需要定義一個視圖。視圖就是這個安全體的可見范圍。
對於每一個安全體,需要向其授權一些視圖,視圖確定了可以訪問那些節點。
#第三步,定義視圖,供安全組使用 #view.name 視圖名 #incl/excl 對下面的MIB子樹是包括還是排除(included/excluded) #subtree 視圖中所涉及的mib子樹 #mask(optional) 掩碼 # view.name incl/excl subtree [mask] view all included .1 view test included system view test included system.sysLocation #view if2 included .1.3.6.1.2.1.2.2.1.0.2 FFA0 # 此處定義的就是VACM中的視圖子樹和掩碼,配置將出現在VACM相關表中。 # 此處對網絡接口2定義了一個視圖,將來作為一個獨立的context,mask參見VACM。 # view 是定義視圖的關鍵字 # 3. view # 命令格式:view viewName type oid[mask] # 功能:定義一個view,表示整個OID樹的子樹,同一個子樹可以定義多個view # 參數說明: viewName:view名字 # type:有兩個值:include 和 exclude # oid:可以訪問的oid # [mask]:對oid的mask # 例如:view all include 1.3.6.1.2.1.4 0xf0 # 0xf0:1111 0000,即訪問的oid的前4位必須是1.3.6.1,否則不能訪問,即 # 可以訪問1.3.6.1下所有的子oid
向安全組授權相應的視圖
#第四步,向安全組授權相應的視圖 # group 安全組名 # context 上下文v1,v2中始終為空 # sec.model 安全模型,可選值:v1,v2,usm # sec.level 安全級別 可選值:auth,noauth,priv, v1,v2c中只能為noauth # prefix 前綴。指定context如何與PDU中的context匹配,V3使用 # read 授權的讀視圖 # write 授權的寫視圖 # notif 授權的trap視圖 # group context sec.model sec.level prefix read write notif access readgroup "" any noauth exact all none none access writegroup "" any noauth exact all none none access testgroup "" any noauth exact all none none #acess readgroup "interface2" usm priv exact if2 if2 if2
# 4. access
# 命令格式:access groupName context model level prefx read write notify
# 功能:設置訪問某一個view的存取權限
# 參數說明: groupName:控制存取權限的組名
# context:v1和v2c版本,context必須設置為""
# model:v1、v2c、usm、tsm、ksm
# 最后3中是v3版本的授權模式,usm(User-Based Security Model)是默認授權模式,tsm用於SSH or DTLS,ksm用於支持Kerberos
# level:可以去3種值:noauth、auth、priv
# noauth:允許無權限訪問(v1,v2c使用)
# auth:必須有權限才能訪問
# priv:強制加密訪問
# prefx:exact or prefix
# read、write、notify:指明某一個view的權限是否可以GET*, SET*、
# TRAP/INFORM,如果該view不能read,則置none
添加用戶(僅限SNMPv3)
SNMPv3使用了用戶加密鑒權的認證方式,所以需要創建相關的用戶。這里也可以用net-snmp-config –create-snmpv3-user來實現。
創建用戶使用createUser關鍵字來進行。后面的參數依次是用戶名、驗證方式、驗證碼、加密方式、加密碼
創建的用戶需要指明用戶的權限,使用關鍵字rouser和rwuser來操作。
rouser用於指定用戶的權限為只讀,如果后面加上priv來指明需要加密。可以使用auth來指明需要認證。
rwuser用於指定用戶的權限為讀寫,其他的與上面一致。
# 第五步,添加用戶 # user 驗證方式 驗證碼 加密方式 加密碼 createUser fx MD5 "md5123456" DES "des123456" createUser fxr MD5 "md5123456" #用戶的權限設置 rwuser fx priv #讀寫用戶,用戶名fx,指明需要加密 rouser fxr #只讀用戶
#rouser [-s SECMODEL] USER [noauth|auth|priv [OID | -V VIEW [CONTEXT]]]
#rwuser [-s SECMODEL] USER [noauth|auth|priv [OID | -V VIEW [CONTEXT]]]
SNMP Trap發送目的地設置
以上都是對SNMP代理程序的外部請求的相關設置。SNMP代理還有一個重要的功能就是主動向網管端發送“通知”。
對此需要指定網關端的目的地址。
使用snmpsink來指定發送SNMPv1版本的Trap的目的地址和共同體名稱
使用snmp2sink來指定發送SNMPv2版本的Trap的目的地址和共同體名稱
使用informasink來指定發送INFORMs的目的地址和共同體名稱
使用trappsess來指定發送SNMPv3版本的Trap的相關信息。其中引擎ID和用戶名,驗證方式,驗證碼等都必須和接收trap的網關軟件端設置的一致。
# 發送 SNMPv1 traps
trapsink localhost public
# 發送 SNMPv2c traps
trap2sink localhost public
# 發送 SNMPv2c INFORMs
informsink localhost public
# 發送SNMPv3 traps
#trapsess -v 2 -u 用戶名 -e 引擎ID -a 驗證方式 -A 驗證碼 -l 鑒權方式 目的IP
trapsess -v 3 -u myuser -e 0x010203040506 -a MD5 -A 111111111 -l authNoPriv 192.168.1.108