查看單個文章
舊 2006-07-07, 11:59 PM   #6 (permalink)
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

解析LINUX網路之三大利器



隨著Internet的迅猛發展,網路已無處不在,但是,它可能隨時受到來自各方的攻擊。瞭解哪些人正在訪問資源、哪些人正在享受服務、哪些人正在發送大量LJ等,對網路管理員來說是非常必要的。利用linux中較常見的網路分析工具Tcpdump、Nmap和Netstat,可以使網路管理工作更加輕鬆。

Tcpdump主要是截獲通過本機網路接頭的資料,用以分析。Nmap是強大的連接阜掃瞄工具,可掃瞄任何主機或網路。Netstat可用來檢查本機當前提供的服務及狀態。這三者各有所長,結合起來,就可以比較透徹地瞭解網路狀況。


Tcpdump


Tcpdump能夠截獲當前所有通過本機網卡的資料包。它擁有靈活的過濾機制,可以確保得到想要的資料。由於Tcpdump只能收集通過本機的資料,因此它的應用受到了一些限制,大多應用在網關或服務器自我檢測上。例如,在作為網關的主機上,想知道本機網路中IP地址為192.168.0.5的主機現在與外界通信的情況,就可以使用如下命令:

tcpdump -i eth0 src host 192.168.0.5


在預定情況下,Tcpdump會將資料輸出到螢幕。如果資料量太大,可能根本看不清具體的內容,這時我們可以把它重定向到文件再進行分析。如果眼神不錯,就可以清楚地瞭解這位仁兄剛才的一舉一動:

訪問了新浪網主頁
20:05:32.473388 192.168.0.5.1872 > www.sina.com.http:
S 1372301404:1372301404(0) win 64240 <mss
1460,nop,nop,sackOK> (DF)
……
進行了netbios廣播進行名字查詢
20:05:33.823388 192.168.0.5.netbios-dgm >
192.168.0.255.netbios-dgm: NBT UDP PACKET(138)
……
到新華網POP3服務器收信
20:05:41.953388 192.168.0.5.1878 > pop.xinhuanet.com.pop3: S
1374956462:1374956462(0) win 64240 <mss 1460,nop,nop,sackOK> (DF)
……
到深圳963收信
20:05:45.633388 192.168.0.5.1881 > szptt154.szptt.net.cn.pop3:
P 34:40(6) ack 146 win 64095 (DF)
……


例如,上面這條訊息表明了在20:05:45的時候,192.168.0.5通過1881源連接阜連接到963電子郵局的POP3連接阜。對於普通的網路分析,這些訊息已經足夠了。這就是Tcpdump的基本功能,其它高階功能都是在這一基礎上的細化和增強。

例如,我只想知道192.168.0.5當前正在訪問哪些Web站點,可以用下面這條命令:

tcpdump -i eth0 src host 192.168.0.5 and dst port 80


該命令的目的是截獲所有由eth0進入、源地址(src)為192.168.0.5的主機(host),並且(and)目標(dst)連接阜(port)為80的資料包。得到的資料如下:

20:05:32.473388 192.168.0.5.1872 > www.sina.com.http:
S 1372301404:1372301404(0) win 64240 <mss 1460,nop,nop,sackOK> (DF)
……
20:06:33.42344 192.168.0.5.1873 > www.sohu.com.http:
S 1374301404:1374301404(0) win 64245 <mss 1460,nop,nop,sackOK> (DF)
……
20:07:31.343248 192.168.0.5.1874 > www.21cn.com.http:
S 1377301404:1377301404(0) win 64241 <mss 1460,nop,nop,sackOK> (DF)
……


顯然,通過and或者not這些邏輯組合,就可以得到特定的資料。Tcpdump還可以監聽不同的資料類型(如TCP、UDP),以用不同的網路範圍(如Host主機、Net網路),甚至用Ether直接指定物理地址。

用Tcpdump在網路中獲取訊息如此清晰,是不是有一種一覽無餘的感覺。正是因為Tcpdump功能過於強大,連個人隱私和敏感資料的保護都成了問題,所以通常只有root用戶能夠使用這一工具。


Nmap


Nmap設計的初衷是系統管理員可以方便地瞭解自己的網路執行情況,例如有多少台主機在執行、分別提供什麼樣的服務。因此,它掃瞄的速度非常快,尤其適合大型網路。在對網路進行掃瞄時,Nmap主要利用ICMP echo探測主機是否開啟。凡是瞭解TCP/IP協議的都知道,對於一個TCP連接阜,無論是否使用防火牆進行過濾,該主機都會對該連接阜發出的請求做出一定響應。所以即使配置了嚴格的防火牆規則,nmap照樣可以找到這些主機。例如,在一台IP地址為192.168.0.1的linux主機上執行下列命令:

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all


它的作用就是對所有ICMP echo不予理睬,也就是讓通常用來測試網路的Ping命令失效。這樣至少可以抵擋POD(Ping of Death)的攻擊。在任何一台機器上Ping這台主機,得到的都會是請求超時,如:

Pinging 192.168.0.1 with 32 bytes of data:
Request timed out.
Request timed out.Request timed out.Request timed out.
Ping statistics for 192.168.0.1:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss)


這台主機是否下線了?用Nmap探測試試看:

nmap -sP 192.168.0.1
Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )
Host gw.somewhere.net (192.168.0.1) appears to be up.


探測結果好像該主機還開著呢!這裡,-sP指定使用Ping echo 進行掃瞄(Scan)。

利用這一特點,可以很快知道目的網路究竟有多少主機處於執行狀態:

nmap -sP 192.168.0.0/24 //24表明目標是一個網路而非單個主機
Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )
Host (192.168.0.2) appears to be up.
Host www.somesite.net (192.168.0.5) appears to be up.
Host (192.168.0.8) appears to be up.
……
Host (192.168.0.253) appears to be up.
Host fake.somesite.net (192.168.0.254) appears to be up.
Nmap run completed -- 256 IP addresses (19 hosts up) scanned in 6 seconds


既然已經知道了哪些主機還開著,就可以進一步探測這些主機的訊息,如開啟的連接阜、提供的服務及操作系統類型等。從上面掃瞄的結果可以知道,192.168.0.5這台機器正在執行。想要瞭解該主機的詳細訊息,可以執行:

nmap 192.168.0.5


稍後會顯示如下內容:

Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )
Interesting ports on www.somewhere.net (192.168.0.5):
(The 1537 ports scanned but not shown below are in state: closed)
Port State Service
80/tcp open http
135/tcp open loc-srv
139/tcp open netbios-ssn
443/tcp open https
1031/tcp open iad2
1433/tcp open ms-sql-s
Nmap run completed -- 1 IP address (1 host up) scanned in 0 seconds


由上可以斷定,這是一台執行Windows操作系統的主機,因為它開啟了MS SQL Server的專用連接阜1433,還提供了HTTP服務等。這些訊息如果被不懷好意的人得到,就可以採用對應的攻擊辦法。其實,強大的Nmap本身就可以依據TCP/IP的指紋特徵猜測對方使用的操作系統。我們可以用-O來開啟這一選項:

nmap -O 192.168.0.5


得到的結果是:

Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )
Interesting ports on www.somewhere.net (192.168.0.5):
(The 1536 ports scanned but not shown below are in state: closed)
Port State Service
80/tcp open http
135/tcp open loc-srv
139/tcp open netbios-ssn
443/tcp open https
1032/tcp open iad3
1433/tcp open ms-sql-s
Remote operating system guess: Microsoft NT 4.0 Server SP5 + 2047 Hotfixes
Nmap run completed -- 1 IP address (1 host up) scanned in 2 seconds


它猜測的遠端主機類型是Microsoft NT 4.0 Server SP5 + 2047 Hotfixes,並且相當準確和詳盡。


Netstat


Netstat主要用於linux/Unix主機察看自身的網路狀況,如開啟的連接阜、在為哪些用戶服務以及服務的狀態等等。此外,它還顯示系統路由表、網路接頭狀態等。可以說,它是一個綜合性的網路狀態察看工具,不過中規中舉。

例如在一台普通linux服務器上執行Netstat,顯示可能像這樣:

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 xxx.net.http-alt xxx.net:1209 ESTABLISHED
tcp 0 0 xxx.net.http-alt xxx.net:1509 ESTABLISHED
tcp 0 0 xxx.net.ssh whoami.net:1867 ESTABLISHED
tcp 0 0 xxx.net:1209 xxx.net.http-alt ESTABLISHED
tcp 0 0 xxx.net:1509 xxx.net.http-alt ESTABLISHED

Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 8 [ ] DGRAM 858 /dev/log
unix 2 [ ] DGRAM 190986
unix 2 [ ] DGRAM 190051
unix 2 [ ] DGRAM 1252
unix 2 [ ] DGRAM 1233
unix 2 [ ] DGRAM 1049
unix 2 [ ] DGRAM 867
unix 2 [ ] STREAM CONNECTED 507


下半部分被稱作Unix域套接頭,通常不必在意。有用的是上半部被稱為有源TCP連接的部分,它顯示了當前所有已建立的連接。由此不難看出,當前這台服務器與主機myself.net有一些處於半關閉狀態的HTTP連接,還與主機whoami.net有一個SSH連接。

在預定情況下,Netstat只顯示已建立連接的連接阜。要顯示處於監聽狀態的所有連接阜,使用-a參數即可:

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:http-alt *:* LISTEN
tcp 0 0 *:8009 *:* LISTEN
tcp 0 0 *:mysql *:* LISTEN
tcp 0 0 *:netbios-ssn *:* LISTEN
tcp 0 0 *:http *:* LISTEN
tcp 0 0 *:ftp *:* LISTEN
tcp 0 0 xxx.net.http-alt xxx.net:1209 ESTABLISHED
tcp 0 0 xxx.net.http-alt xxx.net:1509 ESTABLISHED
tcp 0 0 xxx.net.ssh myself.net:1867 ESTABLISHED
tcp 0 0 xxx.net:1209 xxx.net.http-alt ESTABLISHED
tcp 0 0 xxx.net:1509 xxx.net.http-alt ESTABLISHED
……


這樣,當前正在監聽但並未建立連接的連接阜也可以顯示了出來。由此不難看出,這台服務器同時提供HTTP、FTP、SSH、NMBD及一個MySQL資料庫服務。

Netstat還可以方便地代替route命令顯示當前核心路由表:

netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
218.208.80.176 * 255.255.255.248 U 40 0 0 eth1
192.168.0.0 * 255.255.255.0 U 40 0 0 eth0
127.0.0.0 * 255.0.0.0 U 40 0 0 lo
default x.x.x.x 0.0.0.0 UG 40 0 0 eth1


以上結果與route顯示完全一樣。

此外,它還可以代替ifconfig顯示網路接頭狀態:

netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 3441803 0 0 0 3717339 0 0 0 BMRU
eth0: 1500 0 - no statistics available - BMRU
eth0: 1500 0 - no statistics available - BMRU
eth1 1500 0 1770949 0 0 0 1496183 0 0 0 BMRU
lo 16436 0 38255 0 0 0 38255 0 0 0 LRU


以上這些表明,利用網路分析工具瞭解網路的狀況非常簡單,幾乎不費什麼力氣就可以獲取很多有用的資料。
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1630 篇, 收花: 3204 次