2009年11月14日

Port number管理

先來看網路連線是如何建立的,如下圖
一般在socket剛剛建立的時候會給予資料串流行態,比方說是TCP或只是UDP,在client端一般大多一開始就給定一個隨機的port number,server端則是在listen的時候給定,有了IP跟port number之後就可以提供足夠的資訊做為聯線的依據

在網路上使用服務的時候,一般至少有四樣資料,client端的IP跟port number,server的IP跟port number,一般使用者不會感覺到port number的存在,理由是,client一般使用的是隨機號碼,由作業系統產生,而server的port number一般使用公開的規範,比方說http網頁服務是使用80,所以也由應用程式自行產生,client的IP也是交由作業系統自行帶出,所以剩下server的IP,該IP由DNS轉換得到。在這樣的前提下http://www.kimo.com.tw可能被轉換出IP=10.2.5.8
client ip=192.168.0.1 port number=33775
server ip=10.2.5.8 port number=80

目前網路上port number 1~1024已經被大多數知名的服務佔用,一般不管client或者額外自行開發的server都不會去佔用該number,知名的有http(80), ftp(21), smtp(25), pop3(110), telnet(23), ...可以參考/etc/service該檔案下的紀錄

伺服器在系統管理的時候,有時就要針對port number做處理,也就是監控有多少port number打開了,可以使用netstate -ntul來觀察有多少服務目前正在listen的狀態。要注意目前主機有提供的service有多少,如果有不算是本機的服務port number被打開了,就要注意了
當然如果說本機的listen port number沒有被額外的打開不表示沒有被入侵的風險,可以進一步觀察netstate -ntu列出所有的連線,看是否有資料外流
如果有發現你認為是不正確的資料流的時候可以使用netstate -ntup,參數p表示列出process id,先把該pid刪除,以停止該資料流,接著就要趕緊檢查有哪些問題,修正系統

當然,如果這樣底層的分析,其實還蠻累人的,所以有其他的工具,比方說nmap可以來幫忙

沒有留言: