下載 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