ELK通過SNMP免編程實(shí)現(xiàn)IP/MAC地址資產(chǎn)監(jiān)控

ELK通過SNMP免編程實(shí)現(xiàn)IP/MAC地址資產(chǎn)監(jiān)控

大體思路

logstash input有SNMP插件,利用logstash定時(shí)從網(wǎng)絡(luò)設(shè)備中獲取IP/MAC地址信息统倒,存入elasticsearch骆撇,然后利用kibana實(shí)現(xiàn)基本查詢和可視化。

每個(gè)間隔周期獲取全部IP/MAC地址信息。

流程方法

與ARP表類似的SNMP信息的位置在:ipNetToMediaTable(.1.3.6.1.2.1.4.22)( IP-MIB)

與MAC地址表相似的SNMP信息位置在:dot1dTpFdbTable(.1.3.6.1.2.1.17.4.3)( BRIDGE-MIB)

這兩個(gè)table直接抓就可以獲得全部IP拱燃、MAC地址信息了,但是對(duì)應(yīng)的port不是直接端口描述力惯,為了日后方便使用就需要準(zhǔn)備好端口IP到端口描述的轉(zhuǎn)換碗誉。

dot1dTpFdbTable(.1.3.6.1.2.1.17.4.3):

dot1dTpFdbPort(.1.3.6.1.2.1.17.4.3.1.2):對(duì)應(yīng)的是dot1dBasePortTable(.1.3.6.1.2.1.17.1.4)下面的dot1dBasePort(.1.3.6.1.2.1.17.1.4.1.1)

dot1dBasePortTable表中有dot1dBasePortIfIndex(.1.3.6.1.2.1.17.1.4.1.2)召嘶,對(duì)應(yīng)的是ifTable(.1.3.6.1.2.1.2.2)下面的ifIndex(.1.3.6.1.2.1.2.2.1.1),ifTable下有端口描述ifDescr(.1.3.6.1.2.1.2.2.1.2)

ipNetToMediaTable(.1.3.6.1.2.1.4.22):

ipNetToMediaIfIndex(.1.3.6.1.2.1.4.22.1.1)對(duì)應(yīng)的是ifTable(.1.3.6.1.2.1.2.2)下面的ifIndex(.1.3.6.1.2.1.2.2.1.1)哮缺,ifTable下有端口描述ifDescr(.1.3.6.1.2.1.2.2.1.2)

image.png

logstash配置

這是獲取ifindex表的logstash配置:短時(shí)間內(nèi)運(yùn)行一次相當(dāng)于初始化就可以了

input {
snmp {
   hosts => [{host => "udp:192.168.0.249/161" community => "public"},
             {host => "udp:192.168.20.253/161" community => "public"},
             {host => "udp:192.168.12.253/161" community => "public"},
             {host => "udp:192.168.0.241/161" community => "public"}
             ]
   tables => [{"name"=> "iftable" "columns"=> ["1.3.6.1.2.1.2.2.1.1","1.3.6.1.2.1.2.2.1.2"]}]
}
#上面直接取回來的每個(gè)主機(jī)是一條信息弄跌,為了方便以后處理利用split分割成多條信息
}
filter {
split { field => "iftable" }
mutate {
rename => { "[iftable][iso.org.dod.internet.mgmt.mib-2.interfaces.ifTable.ifEntry.ifIndex]" => "ifIndex"}
rename => { "[iftable][iso.org.dod.internet.mgmt.mib-2.interfaces.ifTable.ifEntry.ifDescr]" => "ifDescr"}
remove_field => ["iftable"]
add_field => {"cmdbtype" => "iftable"}
}
}

output {
 elasticsearch{
 hosts=> ["192.168.6.44:9200"]
 index=> "nhserear-snmpiftable-%{+YYYY.MM.dd}"
}
}

這是獲得fdbbaseport表的logstash配置:短時(shí)間內(nèi)運(yùn)行一次相當(dāng)于初始化就可以了

input {
snmp {
   hosts => [{host => "udp:192.168.0.249/161" community => "public"},
             {host => "udp:192.168.20.253/161" community => "public"},
             {host => "udp:192.168.12.253/161" community => "public"},
             {host => "udp:192.168.0.241/161" community => "public"}
             ]
   tables => [{"name"=> "fdbtable" "columns"=> ["1.3.6.1.2.1.17.1.4.1.1","1.3.6.1.2.1.17.1.4.1.2"]}]
}
}
filter {
split { field => "fdbtable" }
mutate {
rename => { "[fdbtable][iso.org.dod.internet.mgmt.mib-2.dot1dBridge.dot1dBase.dot1dBasePortTable.dot1dBasePortEntry.dot1dBasePort]" => "fdbport"}
rename => { "[fdbtable][iso.org.dod.internet.mgmt.mib-2.dot1dBridge.dot1dBase.dot1dBasePortTable.dot1dBasePortEntry.dot1dBasePortIfIndex]" => "ifIndex"}
remove_field => ["fdbtable"]
add_field => {"cmdbtype" => "fdbtable"}
}
elasticsearch {
hosts =>["192.168.6.44:9200"]
index => "nhserear-snmpiftable-2021.01.20"
query =>"ifIndex:%{[ifIndex]} AND host:%{[host]}"
fields => { "ifDescr" => "ifDescr" }
}
}

output {
 elasticsearch{
 hosts=> ["192.168.6.44:9200"]
 index=> "nhserear-snmpfdbtable-%{+YYYY.MM.dd}"
}
}

注意filter elasticsearch這個(gè)插件中有幾個(gè)缺省配置:

sort:

查詢結(jié)果排序的方式,缺省是"@timestamp:desc"尝苇,按時(shí)間戳 倒序铛只。

result_size:

查詢結(jié)果返回的個(gè)數(shù),缺省值是1.

這兩個(gè)參數(shù)組合后的結(jié)果就是糠溜,每次elasticsearch查詢的是最新的一個(gè)結(jié)果淳玩。

下面是正常運(yùn)行時(shí)logstash的配置:

input {
 snmp {
   interval => 60
   hosts => [{host => "udp:192.168.0.249/161" community => "public"},
             {host => "udp:192.168.20.253/161" community => "public"},
             {host => "udp:192.168.12.253/161" community => "public"},
             {host => "udp:192.168.0.241/161" community => "public"}
             ]
   tables => [{"name"=> "mac-address" "columns"=> ["1.3.6.1.2.1.17.4.3.1.1","1.3.6.1.2.1.17.4.3.1.2"] },
              {"name"=> "arp-address" "columns"=>["1.3.6.1.2.1.4.22.1.1","1.3.6.1.2.1.4.22.1.2","1.3.6.1.2.1.4.22.1.3"]}]
     }
}
filter {
clone {
clones => [event]
add_field => { "clone" => "true" }
}

if [clone] { mutate {remove_field => ["mac-address"] }}
else { mutate { remove_field => ["arp-address"]}}

if [mac-address] {
split { field => "mac-address" }
mutate {
rename => { "[mac-address][iso.org.dod.internet.mgmt.mib-2.dot1dBridge.dot1dTp.dot1dTpFdbTable.dot1dTpFdbEntry.dot1dTpFdbAddress]" => "MACaddress"}
rename => { "[mac-address][iso.org.dod.internet.mgmt.mib-2.dot1dBridge.dot1dTp.dot1dTpFdbTable.dot1dTpFdbEntry.dot1dTpFdbPort]" => "FDBPort"}
remove_field => ["mac-address"]
add_field => {"cmdbtype" => "MACtable"}
}
elasticsearch {
hosts =>["192.168.6.44:9200"]
index => "nhserear-snmpfdbtable-2021.01.20"
query =>"fdbport:%{[FDBPort]} AND host:%{[host]}"
fields => { "ifDescr" => "ifDescr" }
}

}
if [arp-address] {
split { field => "arp-address" }
mutate {
rename => { "[arp-address][iso.org.dod.internet.mgmt.mib-2.ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaIfIndex]" => "ifIndex"}
rename => { "[arp-address][iso.org.dod.internet.mgmt.mib-2.ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaNetAddress]" => "IPaddress"}
rename => { "[arp-address][iso.org.dod.internet.mgmt.mib-2.ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaPhysAddress]" => "MACaddress"}
remove_field => ["arp-address"]
add_field => {"cmdbtype" => "ARPtable"}
}
elasticsearch {
hosts =>["192.168.6.44:9200"]
index => "nhserear-snmpiftable-2021.01.20"
query =>"ifIndex:%{[ifIndex]} AND host:%{[host]}"
fields => { "ifDescr" => "ifDescr" }
}

}
}

output {
 elasticsearch{
 hosts=> ["192.168.6.44:9200"]
 index=> "nhserear-snmp-%{+YYYY.MM.dd}"
}
}


簡(jiǎn)單做了一個(gè)可視化效果:

image.png

*注:還是有些功能在免代碼情況無法實(shí)現(xiàn),后續(xù)可能通過定制前端實(shí)現(xiàn)

存在的問題

目前發(fā)現(xiàn)至少是華為華三的二層交換機(jī)和三層交換機(jī)非竿,已經(jīng)和傳統(tǒng)我們對(duì)交換機(jī)MAC地址蜕着、ARP表的理解不太一樣了,傳統(tǒng)上我認(rèn)為只要有二層以太幀流入交換機(jī)汽馋,數(shù)據(jù)幀頭部的源MAC地址就會(huì)自動(dòng)被二層交換機(jī)學(xué)習(xí)到侮东,這樣以來,以后再有發(fā)往該MAC地址的數(shù)據(jù)幀交換機(jī)就知道往哪里交換了豹芯,這是以前交換機(jī)原理里面的知識(shí)悄雅。如果按照上面的說明,二層交換機(jī)三層交換機(jī)中MAC地址表應(yīng)該是全的铁蹈,也就是所有流經(jīng)該設(shè)備的源MAC地址都會(huì)被記入MAC地址表宽闲,但最近發(fā)現(xiàn)華為、華三的交換機(jī)上如果存在ARP表項(xiàng)的MAC地址握牧,就不會(huì)在出現(xiàn)在MAC地址表中了容诬,不知道這是不是現(xiàn)在交換設(shè)備的新功能。

通過SNMP獲取的ipNetToMediaTable(.1.3.6.1.2.1.4.22)和通過命令行直接在交換機(jī)上看到的ARP表是有區(qū)別的沿腰,三層交換機(jī)ARP表中能夠顯示IP览徒、MAC地址對(duì)應(yīng)的具體物理端口號(hào),ipNetToMediaTable只能告訴你該IP颂龙、MAC對(duì)應(yīng)的三層接口的IFINDEX习蓬,也就說是三層接口號(hào)。

上面兩個(gè)小問題最后導(dǎo)致一個(gè)問題是措嵌,在交換機(jī)上通過ARP表可以很容易查找到IP躲叼、MAC所在的具體物理端口,而通過SNMP方法企巢,如果查IP枫慷,可以告訴你在那個(gè)三層接口上,例如vlan interface,查MAC地址或听,如果這個(gè)MAC有ARP記錄探孝,則MAC地址表中就不會(huì)記錄,還是只能定位到三層接口神帅,這個(gè)MAC地址沒有ARP記錄再姑,只有這種情況才可能通過MAC地址表獲得具體物理接口位置。

查了很多資料找御,包括H3C私有的MIB庫元镀,目前沒有找到能夠通過SNMP準(zhǔn)確獲取ARP表的方法。

后來發(fā)現(xiàn)并不是交換機(jī)MAC地址霎桅、arp表發(fā)生了變化栖疑,而是做實(shí)驗(yàn)的這套設(shè)備,三層交換機(jī)并不是再VLAN接口上配置的IP地址滔驶,實(shí)現(xiàn)VLAN間路由遇革,而是把物理接口直接改為路由接口(已經(jīng)不是交換接口,部分三層交換機(jī)支持物理路由接口)揭糕,路由接口直連二層交換機(jī)萝快,在這種情況下,三層交換機(jī)上是看不到MAC地址表著角,因?yàn)镸AC地址表是為了二層交換而建立的揪漩,三層路由接口并無直接二層交換的能力。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吏口,一起剝皮案震驚了整個(gè)濱河市奄容,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌产徊,老刑警劉巖昂勒,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異舟铜,居然都是意外死亡戈盈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門谆刨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來塘娶,“玉大人,你說我怎么就攤上這事痴荐。” “怎么了官册?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵生兆,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng)鸦难,這世上最難降的妖魔是什么根吁? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮合蔽,結(jié)果婚禮上击敌,老公的妹妹穿的比我還像新娘。我一直安慰自己拴事,他們只是感情好沃斤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刃宵,像睡著了一般衡瓶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上牲证,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天哮针,我揣著相機(jī)與錄音,去河邊找鬼坦袍。 笑死十厢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的捂齐。 我是一名探鬼主播蛮放,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼辛燥!你這毒婦竟也來了筛武?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤挎塌,失蹤者是張志新(化名)和其女友劉穎徘六,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榴都,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡待锈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嘴高。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竿音。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拴驮,靈堂內(nèi)的尸體忽然破棺而出春瞬,到底是詐尸還是另有隱情,我是刑警寧澤套啤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布宽气,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏萄涯。R本人自食惡果不足惜绪氛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望涝影。 院中可真熱鬧枣察,春花似錦、人聲如沸燃逻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唆樊。三九已至宛琅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間逗旁,已是汗流浹背嘿辟。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留片效,地道東北人红伦。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像淀衣,于是被迫代替她去往敵國和親昙读。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容