背 景
在IT系統(tǒng)運(yùn)維領(lǐng)域,有一個(gè)平臺(tái)或模塊是繞不過去,那就是CMDB。
“配置管理數(shù)據(jù)庫( Configuration Management Database,CMDB)是一個(gè)邏輯數(shù)據(jù)庫,包含了配置項(xiàng)全生命周期的信息以及配置項(xiàng)之間的關(guān)系(包括物理關(guān)系、實(shí)時(shí)通信關(guān)系、非實(shí)時(shí)通信關(guān)系和依賴關(guān)系)。
CMDB存儲(chǔ)與管理企業(yè)IT架構(gòu)中設(shè)備的各種配置信息,它與所有服務(wù)支持和服務(wù)交付流程都緊密相聯(lián),支持這些流程的運(yùn)轉(zhuǎn)、發(fā)揮配置信息的價(jià)值,同時(shí)依賴于相關(guān)流程保證數(shù)據(jù)的準(zhǔn)確性。”
以上的名詞解釋來自于百度百科。
可以看到在對(duì)CMDB的名詞解釋中有這樣一句話“依賴于相關(guān)流程保證數(shù)據(jù)的準(zhǔn)確性”。
相信做過相關(guān)運(yùn)維工作的人看到這句話都會(huì)暗自苦笑,這特么就是一個(gè)大坑。
CMDB數(shù)據(jù)不準(zhǔn)確是運(yùn)維中一個(gè)頻頻出現(xiàn)的場景。
原因也不難解釋,無非以下幾種:
1)管理流程不完善,設(shè)備或系統(tǒng)上線下線、配置變更沒有通知CMDB,存在隨意改動(dòng)的行為, CMDB作為一個(gè)旁路存在于生產(chǎn)業(yè)務(wù)系統(tǒng)之外,形同虛設(shè)。
2)有系統(tǒng)或設(shè)備的管理流程,但對(duì)于權(quán)限管理不到位,開發(fā)人員或維護(hù)人員能自主修改配置或?qū)υO(shè)備做上線下線處理,CMDB同樣難以獲取到這樣的修改信息。
3)更有甚者,對(duì)于一個(gè)后來入駐的運(yùn)維團(tuán)隊(duì)來說,可能在CMDB建設(shè)之初就沒有IT系統(tǒng)環(huán)境的臺(tái)賬或臺(tái)賬不完善,搞不清楚到底有些什么設(shè)備。
由上述情況可以看出要實(shí)施好一套CMDB平臺(tái),需要建立完善的變更服務(wù)流程,需要精細(xì)化控制權(quán)限,還需要在技術(shù)手段上實(shí)現(xiàn)對(duì)IT環(huán)境變更的自發(fā)現(xiàn)能力。
變更服務(wù)流程的建立與IT管理部門的掌控能力有關(guān),運(yùn)維團(tuán)隊(duì)在技術(shù)上除了構(gòu)建相對(duì)易用的ITSM流程以及提供權(quán)限管理入口外,更多的還是需要從管理入手,在此不做過多的闡述。
本文主要從技術(shù)角度探討如何利用常見的工具或系統(tǒng)命令構(gòu)建CMDB的自發(fā)現(xiàn)能力。
CMDB自發(fā)現(xiàn)能力盤點(diǎn)
1. 盲掃
在進(jìn)入一個(gè)新的運(yùn)維場地,或在項(xiàng)目現(xiàn)場做CMDB的POC時(shí),經(jīng)常會(huì)聽到客戶提出問題:
你們的CMDB能不能做設(shè)備的盲掃?
盲掃這個(gè)詞原本是用于衛(wèi)星信號(hào)接收的,對(duì)于IT運(yùn)維領(lǐng)域算是個(gè)外來詞語。
顧名思義,就是在不知道環(huán)境中有什么的情況下,通過平臺(tái)的自主發(fā)現(xiàn)能力來找到未知的設(shè)備。(當(dāng)然這個(gè)盲掃也不會(huì)是什么信息都沒有,畢竟基礎(chǔ)的目標(biāo)系統(tǒng)【核心生產(chǎn)系統(tǒng)】的IP網(wǎng)段等信息還是會(huì)有的)。
對(duì)于盲掃利用最多的是在安全領(lǐng)域。
一名菜鳥黑客的進(jìn)階之路上必然要學(xué)會(huì)使用掃描工具對(duì)攻擊目標(biāo)進(jìn)行盲掃,以此來發(fā)現(xiàn)目標(biāo)系統(tǒng)里都有些什么網(wǎng)絡(luò)設(shè)備、中間件或數(shù)據(jù)庫等,并根據(jù)發(fā)現(xiàn)的信息利用漏洞來開展攻擊行動(dòng)。
而作為系統(tǒng)運(yùn)維團(tuán)隊(duì),同樣可以利用掃描工具實(shí)現(xiàn)對(duì)IT系統(tǒng)的摸底及變更發(fā)現(xiàn)。
我們可以利用掃描工具來實(shí)現(xiàn)對(duì)IP地址段的盲掃,以及對(duì)指定IP的開放端口的掃描,并利用掃描獲取到的信息做進(jìn)一步分析判斷,例如判斷設(shè)備是否存活,該設(shè)備上運(yùn)行了哪些服務(wù),甚至對(duì)于部署在該設(shè)備上操作系統(tǒng)級(jí)版本號(hào)都能一一識(shí)別。
這里我們以Nmap工具為例,講解如何利用該工具來實(shí)現(xiàn)對(duì)于主機(jī)或端口的掃描,并且利用掃描返回的信息做相應(yīng)的判斷。
以下對(duì)于Nmap的描述來自Namp參考指南。
“Nmap(“Network Mapper(網(wǎng)絡(luò)映射器)”)是一款開放源代碼的網(wǎng)絡(luò)探測和安全審核的工具。
它的設(shè)計(jì)目標(biāo)是快速地掃描大型網(wǎng)絡(luò),當(dāng)然用它掃描單個(gè)主機(jī)也沒有問題。Nmap以新穎的方式使用原始IP報(bào)文來發(fā)現(xiàn)網(wǎng)絡(luò)上有哪些主機(jī),那些主機(jī)提供什么服務(wù)(應(yīng)用程序名和版本),那些服務(wù)運(yùn)行在什么操作系統(tǒng)(包括版本信息),它們使用什么類型的報(bào)文過濾器/防火墻,以及一堆其它功能。
雖然Nmap通常用于安全審核,許多系統(tǒng)管理員和網(wǎng)絡(luò)管理員也用它來做一些日常的工作,比如查看整個(gè)網(wǎng)絡(luò)的信息,管理服務(wù)升級(jí)計(jì)劃,以及監(jiān)視主機(jī)和服務(wù)的運(yùn)行?!?/span>
一個(gè)典型的Nmap掃描:
在上述的掃描中,我們可以得到以下信息:
目標(biāo)ip主機(jī)是否存在。
目標(biāo)主機(jī)開放了哪些端口。
目標(biāo)主機(jī)上可能正在跑哪些常見服務(wù)。
目標(biāo)主機(jī)的操作系統(tǒng)甚至版本。
MAC地址。
設(shè)備類型。
1.1 主機(jī)掃描:
1.1.1 Nmap支持十多種不同的主機(jī)探測方式;默認(rèn)發(fā)送四種:
ICMP echo request
a TCP SYN packet to port 443
a TCP ACK packet to port 80
an ICMP timestamp request
整理了一些Nmap的常用參數(shù)功能使用方法如下,給大家參考。
l -sL:List Scan 列表掃描,僅將指定的目標(biāo)IP列舉出來,不進(jìn)行主機(jī)發(fā)現(xiàn)。
l -sP:Ping Scan 只利用ping掃描進(jìn)行主機(jī)發(fā)現(xiàn),不進(jìn)行端口掃描。
n 默認(rèn)情況下發(fā)送ICMP回聲請(qǐng)求和一個(gè)TCP報(bào)文到80端口,非特權(quán)用戶發(fā)送一個(gè)SYN報(bào)文到80端口。
n 可以和除-P0之外的任何發(fā)現(xiàn)探測類型-P*選項(xiàng)結(jié)合使用以達(dá)到更高的靈活性。
l -Pn/-P0:將所有指定的主機(jī)視作開啟的,跳過主機(jī)發(fā)現(xiàn)的過程。
l -PS [portlist]:TCP SYN Ping,發(fā)送一個(gè)設(shè)置了SYN標(biāo)志位的空TCP報(bào)文。
n 默認(rèn)端口為80(可設(shè)置),也可指定端口。
n 目標(biāo)主機(jī)端口關(guān)閉,回復(fù)RST,端口開放,則回復(fù)SYN/ACK,但都表明目標(biāo)主機(jī)在線。
n UNIX機(jī)器上,只有特權(quán)用戶才能發(fā)送和接收原始的TCP報(bào)文,因此非特權(quán)用戶進(jìn)行系統(tǒng)調(diào)用connect(),也發(fā)送一個(gè)SYN報(bào)文來嘗試建立連接。
l -PA [portlist]:TCP ACK ping,發(fā)送一個(gè)設(shè)置了ACK標(biāo)志位的TCP報(bào)文。
n 默認(rèn)端口為80(可設(shè)置),也可指定端口。
n 目標(biāo)主機(jī)在線,回復(fù)RST,不在線則超時(shí)。
n UNIX機(jī)器上,只有特權(quán)用戶才能發(fā)送和接收原始的TCP報(bào)文,因此非特權(quán)用戶進(jìn)行系統(tǒng)調(diào)用connect(),也發(fā)送一個(gè)SYN報(bào)文來嘗試建立連接。
l -PU [portlist]:UDP Ping,發(fā)送一個(gè)空的UDP報(bào)文到指定的端口。
n 默認(rèn)端口為31338(可設(shè)置)。
n 優(yōu)勢(shì)是可以穿越只過濾TCP的防火墻或過濾器。
n 若端口關(guān)閉,則回復(fù)ICMP端口無法到達(dá),說明主機(jī)在線;其他類型的ICMP錯(cuò)誤如主機(jī)/網(wǎng)絡(luò)無法到達(dá)或者TTL超時(shí)則表示主機(jī)不在線;沒有回應(yīng)也被這樣解釋,但不一定正確(因?yàn)榇蠖鄶?shù)開放該端口的服務(wù)會(huì)忽略該UDP報(bào)文)。
l -PE; -PP; -PM:ICMP Ping Types,發(fā)送ICMP Type 8 (回聲請(qǐng)求)報(bào)文,期待從運(yùn)行的主機(jī)得到一個(gè)type 0 (回聲相應(yīng))報(bào)文。
l -PR:ARP Ping
l -n:不用域名解析,加快掃描速度。
l -R:為所有目標(biāo)IP地址作反向域名解析。
l --system-dns:使用系統(tǒng)域名解析器,一般不使用該選項(xiàng),因?yàn)楸容^慢。
1.2 端口掃描:
1.2.1 Nmap將端口分成六個(gè)狀態(tài)
open(開放的):該端口正在接收TCP連接或者UDP報(bào)文。
closed(關(guān)閉的):關(guān)閉的端口接收nmap的探測報(bào)文并做出響應(yīng)。
filtered(被過濾的):探測報(bào)文被包過濾阻止無法到達(dá)端口,nmap無法確定端口的開放情況。
unfiltered(未被過濾的):端口可訪問,但nmap仍無法確定端口的開放情況。
open|filtered(開放或者被過濾的):無法確定端口是開放的還是被過濾的。
closed|filtered(關(guān)閉或者被過濾的):無法確定端口是關(guān)閉的還是被過濾的。
1.2.2 Nmap產(chǎn)生結(jié)果是基于目標(biāo)機(jī)器的響應(yīng)報(bào)文的,而這些主機(jī)可能是不可信任的,會(huì)產(chǎn)生迷惑或者誤導(dǎo)nmap的報(bào)文,更普遍的是非RFC兼容的主機(jī)以不正確的方式響應(yīng)nmap探測,F(xiàn)IN/NULL和Xmas掃描特容易遇到這些問題。
1.2.3 Nmap支持十幾種掃描技術(shù),默認(rèn)情況下執(zhí)行一個(gè)SYN掃描;一般一次只用一種方法,除了UDP掃描(-sU)可能和任何一種TCP掃描結(jié)合使用;一般格式是-s
a) –sS:TCP SYN掃描,半開放掃描,掃描速度快,不易被注意到(不完成TCP連接);且能明確區(qū)分open|closed|filtered。
i. Open SYN/ACK
ii. Closed RST復(fù)位
iii. Filtered 數(shù)次重發(fā)沒響應(yīng),或者收到ICMP不可達(dá)
b) –sT:TCPConnect(),建立連接,容易被記錄;對(duì)原始報(bào)文控制少,效率低。
c) –sU:激活UDP掃描,對(duì)UDP服務(wù)進(jìn)行掃描,如DNS/SNMP/DHCP等,可以和TCP掃描結(jié)合使用。
但是效率低下,開放的和被過濾的端口很少響應(yīng),加速UDP掃描的方法包括并發(fā)掃描更多的主機(jī),先只對(duì)主要端口進(jìn)行快速掃描,從防火墻后面掃描,使用--host-timeout跳過慢速的主機(jī)。
d) –sN; -sF; -sX:TCP Null,Fin, Xmas掃描,從RFC挖掘的微妙方法來區(qū)分開放關(guān)閉端口;除了探測報(bào)文的標(biāo)志位不同,三種掃描在行為上一致。
e) –sA:TCP ACK掃描,只設(shè)置ACK標(biāo)志位,區(qū)分被過濾與未被過濾的。
f) –sW:TCP窗口掃描,依賴于互聯(lián)網(wǎng)上少數(shù)系統(tǒng)的實(shí)現(xiàn)細(xì)節(jié),因此可信度不高;根據(jù)窗口大小來判斷端口是開放的(正數(shù))還是關(guān)閉的(0)。
g) –sM:TCP Maimon掃描,探測報(bào)文是FIN/ACK,端口開放或關(guān)閉,都對(duì)這樣的報(bào)文響應(yīng)RST報(bào)文,但如果端口開放,許多基于BSD的系統(tǒng)只是丟棄該探測報(bào)文。
h) –scanflags:通過指定任意的TCP標(biāo)志位來設(shè)計(jì)掃描,可以是數(shù)字標(biāo)記值,也可以使用字符名如URG/ACK/PSH/RST/SYN/FIN。
i) –sI
j) –sO:IP協(xié)議掃描,可以確定目標(biāo)機(jī)支持哪些IP協(xié)議(TCP, ICMP, IGMP)。
k) –b
1.2.4 端口說明和掃描順序:
默認(rèn)情況下,對(duì)1-1024以及nmap-services文件中列出的更高的端口在掃描。
a) –p
例如,參數(shù) -p U:53,111,137,T:21-25,80,139,8080 將掃描UDP 端口53,111,和137,同時(shí)掃描列出的TCP端口。
注意,要既掃描 UDP又掃描TCP,您必須指定 -sU ,以及至少一個(gè)TCP掃描類型(如 -sS,-sF,或者 -sT)。
b) –p
c) –p U:[UDP ports],T:[TCP ports]:對(duì)指定的端口進(jìn)行指定協(xié)議的掃描。
d) –F:快速掃描(僅掃描100個(gè)最常用的端口),nmap-services文件指定想要掃描的端口;可以用—datadir選項(xiàng)指定自己的小小nmap-services文件。
e) –top-ports
f) –r:不要按隨機(jī)順序掃描端口,默認(rèn)情況下按隨機(jī)(常用的端口前移)。
1.3 服務(wù)與版本探測
1.3.1 nmap-services是一個(gè)包含大約2200個(gè)著名的服務(wù)的數(shù)據(jù)庫,Nmap通過查詢?cè)摂?shù)據(jù)庫可以報(bào)告那些端口可能對(duì)應(yīng)于什么服務(wù)器,但不一定正確。
1.3.2 在用某種掃描方法發(fā)現(xiàn)TCP/UDP端口后,版本探測會(huì)詢問這些端口,確定到底什么服務(wù)正在運(yùn)行。
nmap-service-probes數(shù)據(jù)庫包含查詢不同服務(wù)的探測報(bào)文和解析識(shí)別響應(yīng)的匹配表達(dá)式。
當(dāng)Nmap從某個(gè)服務(wù)收到響應(yīng),但不能在數(shù)據(jù)庫中找到匹配時(shí),就打印出一個(gè)fingerprint和一個(gè)URL給您提交。
1.3.3 用下列選項(xiàng)打開和控制版本探測
a) –sV:打開版本探測。
b) –allports:不為版本探測排除任何端口,默認(rèn)情況下跳過9100端口。
c) –version-intensity
d) –version-light:是—version-intensity2的別名。
e) –version-all:是—version-intensity9的別名。
f) –version-trace:跟蹤版本掃描活動(dòng),打印出詳細(xì)的關(guān)于正在進(jìn)行的掃描的調(diào)試信息。
g) –sR:RPC掃描,對(duì)所有被發(fā)現(xiàn)開放的TCP/UDP端口執(zhí)行SunRPC程序NULL命令,來試圖 確定它們是否RPC端口,如果是, 是什么程序和版本號(hào)。
1.4 操作系統(tǒng)探測
1.4.1 用TCP/IP協(xié)議棧fingerprinting進(jìn)行遠(yuǎn)程操作系統(tǒng)探測,Nmap發(fā)送一系列TCP和UDP報(bào)文到遠(yuǎn)程主機(jī),檢查響應(yīng)中的每一個(gè)比特。
在進(jìn)行一打測試如TCPISN采樣,TCP選項(xiàng)支持和排序,IPID采樣,和初始窗口大小檢查之后, Nmap把結(jié)果和數(shù)據(jù)庫nmap-os-fingerprints中超過 1500個(gè)已知的操作系統(tǒng)的fingerprints進(jìn)行比較,如果有匹配,就打印出操作系統(tǒng)的詳細(xì)信息。
每個(gè)fingerprint包括一個(gè)自由格式的關(guān)于OS的描述文本,和一個(gè)分類信息,它提供供應(yīng)商名稱(如Sun),下面的操作系統(tǒng)(如Solaris),OS版本(如10),和設(shè)備類型(通用設(shè)備,路由器,switch,游戲控制臺(tái)等)。
1.4.2 采用下列選項(xiàng)啟用和控制操作系統(tǒng)檢測
a) –O:啟用操作系統(tǒng)檢測;-A可以同時(shí)啟用操作系統(tǒng)檢測和版本檢測。
b) –osscan-limit:針對(duì)指定的目標(biāo)進(jìn)行操作系統(tǒng)檢測。
c) –osscan-guess|--fuzzy:當(dāng)Nmap無法確定所檢測的操作系統(tǒng)時(shí),會(huì)盡可能地提供最相近的匹配。
由上述的參數(shù)控制可以看出,Nmap在掃描探測方面功能異常強(qiáng)大,因此它也成為一個(gè)已經(jīng)被黑客用到極致的工具。
并且Nmap也同樣是被各種安全防御設(shè)備所關(guān)注的,包括iptable的一些參數(shù)設(shè)定可以防范Nmap的某些掃描行為,以此來提高網(wǎng)絡(luò)安全性。
幸運(yùn)的是,我們作為IT系統(tǒng)的運(yùn)維人員可以在更了解內(nèi)部系統(tǒng)的防護(hù)要求的情況下,靈活地利用Nmap的各種掃描參數(shù)來組合并以此發(fā)現(xiàn)所管轄主機(jī)或設(shè)備,甚至用一些參數(shù)來判斷該主機(jī)開通了哪些服務(wù)或安裝了哪些中間件或數(shù)據(jù)庫軟件。
2、關(guān)系發(fā)現(xiàn)
在網(wǎng)段中發(fā)現(xiàn)了一個(gè)個(gè)目標(biāo)設(shè)備后,我們?cè)俅尉劢沟紺MDB的名詞解釋:
配置管理數(shù)據(jù)庫( Configuration Management Database,CMDB)是一個(gè)邏輯數(shù)據(jù)庫,包含了配置項(xiàng)全生命周期的信息以及配置項(xiàng)之間的關(guān)系(包括物理關(guān)系、實(shí)時(shí)通信關(guān)系、非實(shí)時(shí)通信關(guān)系和依賴關(guān)系)。
CMDB作為配置管理工具,靈活的構(gòu)建配置管理數(shù)據(jù)庫的關(guān)系模型至關(guān)重要。
關(guān)系模型包含很多的關(guān)系維度,例如:
代表管理關(guān)系的科室部門歸屬、設(shè)備科室歸屬、系統(tǒng)科室歸屬等。
代表部署關(guān)系的主機(jī)歸屬機(jī)房,或中間件、數(shù)據(jù)庫、應(yīng)用、進(jìn)程等部署主機(jī)等。
代表邏輯歸屬關(guān)系的應(yīng)用與系統(tǒng)歸屬關(guān)系、進(jìn)程與系統(tǒng)歸屬關(guān)系。
代表調(diào)用關(guān)系的應(yīng)用調(diào)用關(guān)系、服務(wù)模塊之間的調(diào)用關(guān)系等。
對(duì)于邏輯存在的關(guān)系,需要依賴人工梳理,通過構(gòu)建ITSM流程方式進(jìn)行增刪改查的維護(hù)。
而對(duì)于物理存在的關(guān)系,我們會(huì)希望通過自動(dòng)發(fā)現(xiàn)能力來提升維護(hù)效率。例如:
A)主機(jī)常駐進(jìn)程發(fā)現(xiàn)
主機(jī)上運(yùn)行的中間件、數(shù)據(jù)庫等組件或常駐執(zhí)行的進(jìn)程的發(fā)現(xiàn),我們可以通過主機(jī)上部署的agent(默認(rèn)對(duì)于管轄內(nèi)的主機(jī)設(shè)備,我們能安裝agent)執(zhí)行操作系統(tǒng)命令掃描。
常用的命令如:
ps -ef 查看所有的進(jìn)程信息:
UID: 該進(jìn)程執(zhí)行的用戶id。
PID: 進(jìn)程id。
PPID: 該進(jìn)程的父級(jí)進(jìn)程id,如果一個(gè)程序的父級(jí)進(jìn)程找不到,該程序的進(jìn)程被稱為僵尸進(jìn)程。
C: cpu的占用率,形式是百分?jǐn)?shù)(%)。
STIME: 進(jìn)程的啟動(dòng)時(shí)間。
TTY: 終端設(shè)備,發(fā)起該進(jìn)程的設(shè)備識(shí)別符號(hào),如果顯示‘ ?’表示該進(jìn)程并不是由終端發(fā)起。
TIME: 進(jìn)程的執(zhí)行時(shí)間。
CMD: 該進(jìn)程的名稱或?qū)?yīng)的路徑。
B)定時(shí)執(zhí)行任務(wù)發(fā)現(xiàn)
主機(jī)上經(jīng)常會(huì)定時(shí)執(zhí)行的后臺(tái)腳本任務(wù),我們同樣可以通過主機(jī)上部署的agent執(zhí)行操作系統(tǒng)命令來實(shí)現(xiàn)掃描獲取。
常用命令如:
crontab -l 查看定時(shí)任務(wù)。
對(duì)于獲取到的crontab任務(wù),無論是否被注釋,都應(yīng)該錄入到CMDB中進(jìn)行管理,并將狀態(tài)定義為“停用”。
C)安裝了但并未執(zhí)行的應(yīng)用發(fā)現(xiàn)
我們經(jīng)常會(huì)發(fā)現(xiàn)在主機(jī)上有一些并未被運(yùn)行的進(jìn)程或中間件應(yīng)用,特別是作為冷備存在的系統(tǒng)組件。這些組件的發(fā)現(xiàn)能補(bǔ)全系統(tǒng)的完整拼圖,對(duì)于摸底系統(tǒng)的拓?fù)浣Y(jié)構(gòu)很關(guān)鍵。
這些應(yīng)用的發(fā)現(xiàn),由于并無進(jìn)程執(zhí)行,也無定時(shí)任務(wù)配置,往往是通過人工等方式調(diào)用運(yùn)行,因此可以預(yù)置一些常見的安裝目錄包含的關(guān)鍵字符串,例如mysql、tomcat等數(shù)據(jù)庫、中間件等應(yīng)用,往往其部署目錄名稱、路徑都具備一定的可識(shí)別邏輯。
通過模糊掃描這些特定的目錄名,往往能發(fā)現(xiàn)未被執(zhí)行的應(yīng)用。又如應(yīng)用的啟動(dòng)腳本,往往會(huì)帶有“start”之類的關(guān)鍵字段,同樣可以作為未執(zhí)行進(jìn)程發(fā)現(xiàn)的關(guān)鍵入口。
常用命令如:
find -name mysql*
D)關(guān)鍵配置文件發(fā)現(xiàn)
對(duì)于一些應(yīng)用的配置文件,我們需要將其納管并監(jiān)視其是否被修改,同樣首先需要做自發(fā)現(xiàn)。需要注意的是,這部分的發(fā)現(xiàn)只能算是半自動(dòng)了,因?yàn)榘l(fā)現(xiàn)后需要人工進(jìn)行一定的篩查,過濾掉一些無用數(shù)據(jù)。
根據(jù)掃描到的已知數(shù)據(jù)庫、中間件等配置目錄,再對(duì)其默認(rèn)配置目錄進(jìn)行掃描,獲取其關(guān)鍵配置文件。
通過掃描應(yīng)用模塊或進(jìn)程模塊的bin目錄、conf目錄、etc目錄等,并獲取其中的*.conf文件,*.xml文件,*.profile文件,*.application文件等。
常用命令如:
find / -name *.conf
E)應(yīng)用(進(jìn)程)間調(diào)用關(guān)系發(fā)現(xiàn)
調(diào)用關(guān)系的獲取,首先可以通過獲取ip之間的網(wǎng)絡(luò)關(guān)系。再根據(jù)主機(jī)上的端口歸屬進(jìn)程來關(guān)聯(lián)出應(yīng)用關(guān)系的建立。
a. 網(wǎng)絡(luò)端口互聯(lián)關(guān)系
常用的命令如:
netstat -ano
協(xié)議:分為TCP和UDP。
本地地址(Local Address):代表本機(jī)IP地址和打開的端口號(hào)。
外部地址(Foreign Address):遠(yuǎn)程計(jì)算機(jī)IP地址和端口號(hào)。
狀態(tài)(State):表明當(dāng)前的連接狀態(tài)。
PID:對(duì)應(yīng)進(jìn)程 的PID。根據(jù)PID可以找到對(duì)應(yīng)的進(jìn)程。
netstat命令的功能是顯示網(wǎng)絡(luò)連接、路由表和網(wǎng)絡(luò)接口信息,可以讓用戶得知目前都有哪些網(wǎng)絡(luò)連接正在運(yùn)作。
netstat [選項(xiàng)]命令中各選項(xiàng)的含義如下:
-a 顯示所有socket,包括正在監(jiān)聽的。
-c 每隔1秒就重新顯示一遍,直到用戶中斷它。
-i 顯示所有網(wǎng)絡(luò)接口的信息,格式同“ifconfig -e”。
-n 以網(wǎng)絡(luò)IP地址代替名稱,顯示出網(wǎng)絡(luò)連接情形。
-r 顯示核心路由表,格式同“route -e”。
-t 顯示TCP協(xié)議的連接情況。
-u 顯示UDP協(xié)議的連接情況。
-v 顯示正在進(jìn)行的工作。
-A 顯示任何關(guān)聯(lián)的協(xié)議控制塊的地址。主要用于調(diào)試。
-a 顯示所有套接字的狀態(tài)。在一般情況下不顯示與服務(wù)器進(jìn)程相關(guān)聯(lián)的套接字。
-i 顯示自動(dòng)配置接口的狀態(tài)。那些在系統(tǒng)初始引導(dǎo)后配置的接口狀態(tài)不在輸出之列。
其state字段的枚舉值如下:
LISTEN:偵聽來自遠(yuǎn)方的TCP端口的連接請(qǐng)求。
SYN-SENT:再發(fā)送連接請(qǐng)求后等待匹配的連接請(qǐng)求。
SYN-RECEIVED:再收到和發(fā)送一個(gè)連接請(qǐng)求后等待對(duì)方對(duì)連接請(qǐng)求的確認(rèn)。
ESTABLISHED:代表一個(gè)打開的連接。
FIN-WAIT-1:等待遠(yuǎn)程TCP連接中斷請(qǐng)求,或先前的連接中斷請(qǐng)求的確認(rèn)。
FIN-WAIT-2:從遠(yuǎn)程TCP等待連接中斷請(qǐng)求。
CLOSE-WAIT:等待從本地用戶發(fā)來的連接中斷請(qǐng)求。
CLOSING:等待遠(yuǎn)程TCP對(duì)連接中斷的確認(rèn)。
LAST-ACK:等待原來的發(fā)向遠(yuǎn)程TCP的連接中斷請(qǐng)求的確認(rèn)。
TIME-WAIT:等待足夠的時(shí)間以確保遠(yuǎn)程TCP接收到連接中斷請(qǐng)求的確認(rèn)。
CLOSED:沒有任何連接狀態(tài)。
b. 端口歸屬應(yīng)用關(guān)系
根據(jù)前述的查看本機(jī)網(wǎng)絡(luò)端口開放命令查到的數(shù)據(jù),其中有對(duì)應(yīng)的PID,即進(jìn)程號(hào)信息。我們可以使用lsof命令來獲取該端口所歸屬的應(yīng)用信息。
當(dāng)然,我們其實(shí)也可以直接使用lsof -i的命令獲取到某個(gè)端口所對(duì)應(yīng)的進(jìn)程名。
lsof(list open files)是一個(gè)列出當(dāng)前系統(tǒng)打開文件的工具。在linux環(huán)境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規(guī)數(shù)據(jù),還可以訪問網(wǎng)絡(luò)連接和硬件。
所以如傳輸控制協(xié)議 (TCP) 和用戶數(shù)據(jù)報(bào)協(xié)議 (UDP) 套接字等,系統(tǒng)在后臺(tái)都為該應(yīng)用程序分配了一個(gè)文件描述符,無論這個(gè)文件的本質(zhì)如何,該文件描述符為應(yīng)用程序與基礎(chǔ)操作系統(tǒng)之間的交互提供了通用接口。
因?yàn)閼?yīng)用程序打開文件的描述符列表提供了大量關(guān)于這個(gè)應(yīng)用程序本身的信息,因此通過lsof工具能夠查看這個(gè)列表對(duì)系統(tǒng)監(jiān)測以及排錯(cuò)將是很有幫助的。
lsof輸出各列信息的意義如下:
COMMAND:進(jìn)程的名稱。
PID:進(jìn)程標(biāo)識(shí)符。
USER:進(jìn)程所有者。
FD:文件描述符,應(yīng)用程序通過文件描述符識(shí)別該文件。如cwd、txt等 。
TYPE:文件類型,如DIR、REG等。
DEVICE:指定磁盤的名稱。
SIZE:文件的大小。
NODE:索引節(jié)點(diǎn)(文件在磁盤上的標(biāo)識(shí))。
NAME:打開文件的確切名稱。
文章小結(jié)
本文主要闡述了對(duì)CMDB的配置數(shù)據(jù)構(gòu)建過程中,利用一些常見的IT命令或工具實(shí)現(xiàn)以下自發(fā)現(xiàn)能力:
應(yīng)用Nmap工具對(duì)內(nèi)部網(wǎng)絡(luò)的ip地址段實(shí)現(xiàn)盲掃發(fā)現(xiàn)存活設(shè)備及盡可能獲取更多信息。
基于已知的IP主機(jī),通過部署agent并執(zhí)行ps、crontab、find等命令來發(fā)現(xiàn)垂直部署的應(yīng)用、中間件、數(shù)據(jù)組件、進(jìn)程、定時(shí)任務(wù)、未啟動(dòng)應(yīng)用(進(jìn)程)、關(guān)鍵配置信息等配置信息。
使用netstat、lsof等命令發(fā)現(xiàn)當(dāng)前主機(jī)與其他網(wǎng)絡(luò)對(duì)象的互聯(lián)關(guān)系,以及根據(jù)端口與應(yīng)用之間的關(guān)系找到應(yīng)用與應(yīng)用之間的關(guān)系。
利用以上這些命令或小工具的組合,通過腳本或運(yùn)維平臺(tái)上的流程配置、調(diào)度管理等功能進(jìn)行串聯(lián),借助數(shù)據(jù)加工處理能力做采集數(shù)據(jù)的解析,可以實(shí)現(xiàn)很多的CMDB的自發(fā)現(xiàn)場景。
分享
收藏
點(diǎn)贊
在看
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/129660.html
摘要:我加入了騰訊,騰訊企業(yè)文化很好,經(jīng)常會(huì)有很多小組活動(dòng)部門活動(dòng)什么的,但是做運(yùn)維很苦。所以,年的時(shí)候我們幾個(gè)騰訊的同事一同創(chuàng)業(yè),希望把我們的想法和經(jīng)驗(yàn)?zāi)軌騻鬟f出來。這里我列出了騰訊互聯(lián)網(wǎng)運(yùn)維團(tuán)隊(duì)所經(jīng)歷的三個(gè)階段。 本文是數(shù)人云深圳技術(shù)分享課上優(yōu)維科技聯(lián)合創(chuàng)始人彭鯉航的演講實(shí)錄,演講主題是《運(yùn)維自動(dòng)化實(shí)踐》。 精彩觀點(diǎn)搶鮮看 實(shí)現(xiàn)運(yùn)維自動(dòng)化閉環(huán),最主要就是配置管理、狀態(tài)管理和變更管理能力。...
摘要:導(dǎo)讀阿里巴巴轉(zhuǎn)型之后,運(yùn)維平臺(tái)是如何建設(shè)的阿里巴巴高級(jí)技術(shù)專家陳喻結(jié)合運(yùn)維自身的理解,業(yè)務(wù)場景的分析和業(yè)界方法論的一些思考,得出來一些最佳實(shí)踐分享給大家。實(shí)施效果嘉賓介紹陳喻亞松,阿里巴巴高級(jí)技術(shù)專家。 導(dǎo)讀:阿里巴巴DevOps轉(zhuǎn)型之后,運(yùn)維平臺(tái)是如何建設(shè)的?阿里巴巴高級(jí)技術(shù)專家陳喻結(jié)合運(yùn)維自身的理解,業(yè)務(wù)場景的分析和業(yè)界方法論的一些思考,得出來一些最佳實(shí)踐分享給大家。 前言 我是這...
摘要:郭理靖表示,在京東商城的實(shí)踐中,針對(duì)線上系統(tǒng)選擇構(gòu)建兩個(gè)機(jī)房,分別是生產(chǎn)環(huán)境以及在災(zāi)備環(huán)境。在監(jiān)控引擎方面,京東云的嘗試也是比較細(xì)致的,其中包括監(jiān)控服務(wù)報(bào)警服務(wù)等。進(jìn)一步,根據(jù)不同的報(bào)警,我們可以定位到 showImg(https://segmentfault.com/img/bVbtNqp?w=688&h=113); showImg(https://segmentfault.com/...
摘要:郭理靖表示,在京東商城的實(shí)踐中,針對(duì)線上系統(tǒng)選擇構(gòu)建兩個(gè)機(jī)房,分別是生產(chǎn)環(huán)境以及在災(zāi)備環(huán)境。在監(jiān)控引擎方面,京東云的嘗試也是比較細(xì)致的,其中包括監(jiān)控服務(wù)報(bào)警服務(wù)等。進(jìn)一步,根據(jù)不同的報(bào)警,我們可以定位到 showImg(https://segmentfault.com/img/bVbtNqp?w=688&h=113); showImg(https://segmentfault.com/...
摘要:郭理靖表示,在京東商城的實(shí)踐中,針對(duì)線上系統(tǒng)選擇構(gòu)建兩個(gè)機(jī)房,分別是生產(chǎn)環(huán)境以及在災(zāi)備環(huán)境。在監(jiān)控引擎方面,京東云的嘗試也是比較細(xì)致的,其中包括監(jiān)控服務(wù)報(bào)警服務(wù)等。進(jìn)一步,根據(jù)不同的報(bào)警,我們可以定位到 showImg(https://segmentfault.com/img/bVbtNqp?w=688&h=113); showImg(https://segmentfault.com/...
閱讀 1357·2023-01-11 13:20
閱讀 1707·2023-01-11 13:20
閱讀 1215·2023-01-11 13:20
閱讀 1906·2023-01-11 13:20
閱讀 4165·2023-01-11 13:20
閱讀 2757·2023-01-11 13:20
閱讀 1402·2023-01-11 13:20
閱讀 3672·2023-01-11 13:20