Ubuntu 應用 net-snmp v3 snmptrap snmptrapd 範例筆記

下載 Dockfile 檔案

> git clone https://github.com/dchidell/docker-snmptrap.git

> cd docker-snmptrap

# 產生image
> docker build -t 'test/snmptrapd' ./

# 之後要刪掉就
> docker rmi test/snmptrapd

使用 docker 開啟 snmptrapd 服務 162

> docker run -it --rm -v`pwd`/snmptrapd.conf:/etc/snmp/snmptrapd.conf -p 162:162/udp test/snmptrapd

# --rm 隨用及刪, -v 引用外部檔案

或進入 sh 在執行服務

> docker run -it --rm -v`pwd`/snmptrapd.conf:/etc/snmp/snmptrapd.conf -p 162:162/udp test/snmptrapd sh

# 進入容器
> vi /etc/snmp/snmptrapd.conf

# 開啟snmptrapd服務
> snmptrapd -f  -C -c /etc/snmp/snmptrapd.conf  -Le -d

# 另一種-D 參數
> snmptrapd -f -C -c /etc/snmp/snmptrapd.conf -Le -Dusm,usmUser,snmptrapd

#-d dump raw package 可以不用加

編輯 snmptrapd.conf for snmpv3

> vi /etc/snmp/snmptrapd.conf

disableAuthorization no
createUser -e 0x80001f8880bd343e4d59bb7263 yuyan123456 SHA authpass AES privpass
createUser -e 0x80001f8880bd343e4d59bb7263 yuyan123456 SHA 'aA1 \\!"#$%&\'()*+,-./:;<=>?@[]^_`{|}~' AES 'aA1 \\!"#$%&\'()*+,-./:;<=>?@[]^_`{|}~'
authUser log,execute,net yuyan123456 authpriv

# authpriv 可以替換成 noauthnopriv 或 authnopriv
# 分別為noAuthNoPriv(不認證也不加密)、authNoPriv(認證但是不加密)、authPriv(既認證又加密)
# AES 可換 (AES|DES)
# SHA 可換 (MD5|SHA|SHA-224|SHA-256|SHA-384|SHA-512)
# test password example: aA1 \!"#$%&'()*+,-./:;<=>?@[]^_`{|}~
# 單引號要處理 \ => '\

用 snmpget 取得 系統產生 engine id (這是錯的)

網路上的範例通常會使用指定 engine id,但是其實可以透過 snmpget 去訪問 OID: .1.3.6.1.6.3.10.2.1.1.0,

就可以問到當下服務的 OID,當然這是對方有 snmpd 服務的情況下(通常應該會有)


# 這邊用 v1 的方法詢問
> snmpget -mALL -v1 -cpublic localhost:161 .1.3.6.1.6.3.10.2.1.1.0
.1.3.6.1.6.3.10.2.1.1.0 = Hex-STRING: 80 00 1F 88 80 51 14 55 35 58 BB 72 63

# 80 00 1F 88 80 51 14 55 35 58 BB 72 63 就是 engine id

# v3 example
# !"#$%&'\''()*+,-.\/:;<=>?@[]^_`{|}~
> snmpget -v3  -l authPriv -u 'yuyan' -a SHA  -A 'testtest' -x AES -X 'testtest' 10.0.7.4

也可以使用一些 snmp 的免費工具軟體,就請隨意發揮。

snmptrap 測試 v3

> snmptrap -v 3 -e 80001f88804993f817a758bc63 -u yuyan123456 -a SHA -A authpass -x AES -X privpass -l authPriv 10.0.7.4:162 0 .1.3.6.1.2.1.2.2.1.1.2

# 如果 snmptrapd 設定的 engine id 跟你不一樣就簡單的加個 -e 補上特定engine id 也可以通

> snmptrap -v 3 -e 0x80001f8880bd343e4d59bb7263 -u yuyan123456 -a SHA -A authpass -x AES -X privpass -l authPriv 10.0.7.4:162 0 .1.3.6.1.2.1.2.2.1.1.2

# 不然預設都是抓系統的 .1.3.6.1.6.3.10.2.1.1.0
# engine id snmptrap 與 snmptrapd的設定一定要相互匹配(重要)

docker snmptrapd 收到 trap 會如下顯示

> snmptrapd -f  -C -c /etc/snmp/snmptrapd.conf  -Le -d
NET-SNMP version 5.8

2022-11-15 09:19:50 10.0.7.6 [UDP: [10.0.7.6]:52621->[172.18.0.4]:162]:
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (0) 0:00:00.00    SNMPv2-MIB::snmpTrapOID.0 = OID: IF-MIB::ifIndex.2

snmptrap V1 | V2c 補充範例

這邊建議下載 snmp trap watcher 軟體直接做 snmptrapd 測試來用比較方便
google 搜尋 “BTT Software snmp trap watcher”

snmptrap v1

snmptrap -v1 -c public 10.0.7.5 1.3.6.1.4.1.1 10.0.7.5 2 3 1000 1.3.6.1.9.9.44.1.2.1 i 12 1.3.4.1.2.3.1 s test_snmptrap
snmptrap v1 欄位
命令 snmptrap
Snmp 協議版本 -v1
共同體 -c public
Snmp 管理端 IP 10.0.7.5
Enterprise-OID 1.3.6.1.4.1.1
Snmp 代理 IP 10.0.7.5
Trap 類型 2
Trap 特徵碼 3
uptime 1000
被發送參數的 OID 1.3.6.1.9.9.44.1.2.1
數據類型 i
數據值 12
被發送參數的 OID 1.3.4.1.2.3.1
數據類型 s
數據值 test_snmptrap

snmptrap v2c

snmptrap -v2c -c public 10.0.7.5 "aaa" 1.3.6.1.4.1.2345 .1.3.6.1.2.1.1.6.0 s "just here"
  • 10.0.7.5 “aaa” : 分別是 snmp 代理的 IP 和主機名稱,主機名稱可以為空
  • 1.3.6.1.4.1.2345 : 企業 OID,Enterprise-OID
  • .1.3.6.1.2.1.1.6.0 s “just here” : 分別是數據 OID、數據類型、數據值。

snmptrap v3

snmptrap -v 3 -u yuyan123456 -a SHA -A authpass -x AES -X privpass -l authPriv 10.0.7.4:162 0 .1.3.6.1.2.1.2.2.1.1.2

  目錄