關(guān)注 Linux 的系統(tǒng)狀態(tài),主要從兩個(gè)角度出發(fā),一個(gè)角度是系統(tǒng)正在運(yùn)行什么服務(wù);另外一個(gè)就是
有什么連接或服務(wù)可用。使用 ps 命令可以查看處于活躍狀態(tài)的服務(wù);使用 netstat 命令則可以顯示所有
可用連接和服務(wù),以及它們的狀態(tài)。netstat 還可以顯示 ps 無法顯示的、從 inetd 或 xinetd 中運(yùn)行的服
務(wù),比如 telnet 等。
用 netstat 查看所有服務(wù)
以下命令可以顯示所有的服務(wù):
$ netstat -a
激活I(lǐng)nternet連接 (服務(wù)器和已建立連接的)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:telnet *:* LISTEN
tcp 0 0 *:smtp *:* LISTEN
tcp 0 0 192.168.1.5:32851 nest.anthill.echid:ircd ESTABLISHED
tcp 0 0 *:nfs *:* LISTEN
tcp 0 0 *:60966 *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
tcp 0 0 *:52694 *:* LISTEN
tcp 0 0 localhost:ipp *:* LISTEN
tcp 0 0 localhost:smtp *:* LISTEN
tcp 0 0 *:56445 *:* LISTEN
udp 0 0 *:ipp *:*
Active Unix domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
Unix 2 [ ACC ] STREAM LISTENING 1065 /tmp/ksocket-carla/klaunchertDCh2b.slave-socket
上述顯示中,"Proto"是 Protocol 的簡稱,它可以是 TCP 或 UDP。"Recv-Q"和"Send-Q"指
的是接收隊(duì)列和發(fā)送隊(duì)列,這些數(shù)字一般都應(yīng)該是 0,如果不是,則表示軟件包正在隊(duì)列中堆積。這種情
況只能在非常短的時(shí)間內(nèi)存在,比如在 KMail 中單擊檢查郵件按鈕時(shí),有如下顯示是正常現(xiàn)象:
tcp 0 593 192.168.1.5:34321 venus.euao.com:smtp ESTABLISHED
如果接收隊(duì)列持續(xù)處于阻塞狀態(tài),那么很有可能受到了拒絕式服務(wù)的攻擊。如果發(fā)送隊(duì)列不能被快
速清除,則可能是因?yàn)橛幸粋€(gè)應(yīng)用程序不能將所要發(fā)送的東西傳送完。
"Local Address" 指本機(jī)的 IP 和端口號。"Foreign Address"指所要連接的主機(jī)名稱和服務(wù)。
"State"指現(xiàn)在連接的狀態(tài)。三種常見的 TCP 狀態(tài)如下所示:
a) LISTEN 等待接收連接;
b) ESTABLISHED 一個(gè)處于活躍狀態(tài)的連接;
c) TIME_WAIT 一個(gè)剛被終止的連接。它只持續(xù) 1 至 2 分鐘,然后就會變成 LISTEN 狀態(tài)。
由于 UDP 是無狀態(tài)的,所以其 State 欄總是空白。
持續(xù)獲取有用信息
使用"netstat -a"命令,顯示結(jié)果可能會有數(shù)百行。其實(shí),在這些結(jié)果中可以忽略所有"Active
Unix domain sockets"以后的內(nèi)容。因?yàn)檫@些內(nèi)容是本地內(nèi)部進(jìn)程之間的通信,而不是網(wǎng)絡(luò)連接。使
用以下命令可以避免顯示無用信息:
$ netstat --inet -a
" netstat --inet -a" 命 令 的 顯 示 結(jié) 果 將 只 有 網(wǎng) 絡(luò) 連 接 , 包 括 所 有 正 處 在 " LISTEN" 狀態(tài)和
"ESTABLISHED"狀態(tài)的。
需要特別注意的是,對于普通用戶而言,一般不需要使用 telnet 或 SMTP 服務(wù)。因此需要將其關(guān)閉,
以提高系統(tǒng)安全性;并且要重新配置啟動文件,以保證它們不會在下次系統(tǒng)啟動時(shí)自動重新啟動。
要想持續(xù)不斷地查看隨時(shí)都在更改的網(wǎng)絡(luò)信息,可以使用 netstat 命令的"-c"參數(shù),并且將結(jié)果存
入文件中:
$ netstat --inet -a -c > netstat.txt
這時(shí),查看 netstat.txt 文件即可檢查郵件服務(wù)、Web 服務(wù)和 telnet 服務(wù)等的狀態(tài)變化。
檢查網(wǎng)卡
使用 netstat 命令的"-i"參數(shù)還可以幫助檢查網(wǎng)卡。該命令的顯示結(jié)果如下所示:
Kernel Interface table
eth0 1500 0 86192 0 0 0 60005 0 0 0 BMRU
lo 16436 0 434 0 0 0 434 0 0 0 LRU
在"RX-OK (Received OK)"和"TX-OK (Transmitted OK)"欄應(yīng)該看到很多數(shù)字,而其它地方的
數(shù)字應(yīng)該非常小。如果在"RX-ERR"或"TX-ERR"欄看到很多數(shù)據(jù),則很有可能是網(wǎng)卡或網(wǎng)線出現(xiàn)了
問題。
==================================================
可以是用命令:netstat -lnp來察看系統(tǒng)當(dāng)前監(jiān)聽的端口。其中l(wèi)選項(xiàng)表示顯示正在被監(jiān)聽(listen)的端口;n選項(xiàng)表示直接顯示端口數(shù)字而不是通過察看/etc/service來轉(zhuǎn)換為端口名;p選項(xiàng)表示列出監(jiān)聽的程序。例如:
netsat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:mysql *:* LISTEN
tcp 0 0 *:netbios-ssn *:* LISTEN
tcp 0 0 *:swat *:* LISTEN
tcp 0 0 *:www *:* LISTEN
tcp 0 0 *:linuxconf *:* LISTEN
tcp 0 0 *:finger *:* LISTEN
tcp 0 0 *:login *:* LISTEN
tcp 0 0 *:shell *:* LISTEN
tcp 0 0 *:telnet *:* LISTEN
tcp 0 0 *:ftp *:* LISTEN
udp 0 0 radiusd.301:netbios-dgm *:*
udp 0 0 radiusd.301h:netbios-ns *:*
udp 0 0 *:netbios-dgm *:*
udp 0 0 *:netbios-ns *:*
udp 0 0 *:ntalk *:*
udp 0 0 *:talk *:*
raw 0 0 *:icmp *:* 7
raw 0 0 *:tcp *:* 7
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 0 [ ACC ] STREAM LISTENING 40250 /tmp/mysql.sock
netstat -ln
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:901 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:98 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:79 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:513 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
udp 0 0 192.168.2.33:138 0.0.0.0:*
udp 0 0 192.168.2.33:137 0.0.0.0:*
udp 0 0 0.0.0.0:138 0.0.0.0:*
udp 0 0 0.0.0.0:137 0.0.0.0:*
udp 0 0 0.0.0.0:518 0.0.0.0:*
udp 0 0 0.0.0.0:517 0.0.0.0:*
raw 0 0 0.0.0.0:1 0.0.0.0:* 7
raw 0 0 0.0.0.0:6 0.0.0.0:* 7
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 0 [ ACC ] STREAM LISTENING 40250 /tmp/mysql.sock
================
Netstat命令舉例
請輸入下面的命令:
# netstat -tulpn
或者是
# netstat -npl
請看輸出結(jié)果::
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:6881 0.0.0.0:* LISTEN 6908/python
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 5562/cupsd
tcp 0 0 127.0.0.1:3128 0.0.0.0:* LISTEN 6278/(squid)
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 5854/exim4
udp 0 0 0.0.0.0:32769 0.0.0.0:* 6278/(squid)
udp 0 0 0.0.0.0:3130 0.0.0.0:* 6278/(squid)
udp 0 0 0.0.0.0:68 0.0.0.0:* 4583/dhclient3
udp 0 0 0.0.0.0:6881 0.0.0.0:* 6908/python
請注意,最后一欄給出了關(guān)于程序名稱和端口的信息。在這里,我們解釋一下各參數(shù)的含義:
-t : 指明顯示TCP端口
-u : 指明顯示UDP端口
-l : 僅顯示監(jiān)聽套接字(所謂套接字就是使應(yīng)用程序能夠讀寫與收發(fā)通訊協(xié)議(
protocol
)與資料的程序)
-p : 顯示
進(jìn)程
標(biāo)識符和程序名稱,每一個(gè)套接字/端口都屬于一個(gè)程序。
-n : 不進(jìn)行DNS輪詢(可以加速操作)
==========================================================
語 法:netstat [-acCeFghilMnNoprstuvVwx][-A<網(wǎng)絡(luò)類型>][--ip]
補(bǔ)充說明:利用netstat指令可讓你得知整個(gè)Linux系統(tǒng)的網(wǎng)絡(luò)情況。
參 數(shù):
-a或–all 顯示所有連線中的Socket。
-A<網(wǎng)絡(luò)類型>或–<網(wǎng)絡(luò)類型> 列出該網(wǎng)絡(luò)類型連線中的相關(guān)地址。
-c或–continuous 持續(xù)列出網(wǎng)絡(luò)狀態(tài)。
-C或–cache 顯示路由器配置的快取信息。
-e或–extend 顯示網(wǎng)絡(luò)其他相關(guān)信息。
-F或–fib 顯示FIB。
-g或–groups 顯示多重廣播功能群組組員名單。
-h或–help 在線幫助。
-i或–interfaces 顯示網(wǎng)絡(luò)界面信息表單。
-l或–listening 顯示監(jiān)控中的服務(wù)器的Socket。
-M或–masquerade 顯示偽裝的網(wǎng)絡(luò)連線。
-n或–numeric 直接使用IP地址,而不通過域名服務(wù)器。
-N或–netlink或–symbolic 顯示網(wǎng)絡(luò)硬件外圍設(shè)備的符號連接名稱。
-o或–timers 顯示計(jì)時(shí)器。
-p或–programs 顯示正在使用Socket的程序識別碼和程序名稱。
-r或–route 顯示Routing Table。
-s或–statistice 顯示網(wǎng)絡(luò)工作信息統(tǒng)計(jì)表。
-t或–tcp 顯示TCP傳輸協(xié)議的連線狀況。
-u或–udp 顯示UDP傳輸協(xié)議的連線狀況。
-v或–verbose 顯示指令執(zhí)行過程。
-V或–version 顯示版本信息。
-w或–raw 顯示RAW傳輸協(xié)議的連線狀況。
-x或–unix 此參數(shù)的效果和指定”-A unix”參數(shù)相同。
–ip或–inet 此參數(shù)的效果和指定”-A inet”參數(shù)相同
netstat 的一些常用選項(xiàng)
·netstat –s
本選項(xiàng)能夠按照各個(gè)協(xié)議分別顯示其統(tǒng)計(jì)數(shù)據(jù)。如果我們的應(yīng)用程序(如Web瀏覽器)運(yùn)行速度比較慢,或者不能顯示W(wǎng)eb頁之類的數(shù)據(jù),那么我們就可以用本選項(xiàng)來查看一下所顯示的信息。我們需要仔細(xì)查看統(tǒng)計(jì)數(shù)據(jù)的各行,找到出錯(cuò)的關(guān)鍵字,進(jìn)而確定問題所在。
·netstat –e
本選項(xiàng)用于顯示關(guān)于以太網(wǎng)的統(tǒng)計(jì)數(shù)據(jù)。它列出的項(xiàng)目包括傳送的數(shù)據(jù)報(bào)的總字節(jié)數(shù)、錯(cuò)誤數(shù)、刪除數(shù)、數(shù)據(jù)報(bào)的數(shù)量和廣播的數(shù)量。這些統(tǒng)計(jì)數(shù)據(jù)既有發(fā)送的數(shù)據(jù)報(bào)數(shù)量,也有接收的數(shù)據(jù)報(bào)數(shù)量。這個(gè)選項(xiàng)可以用來統(tǒng)計(jì)一些基本的網(wǎng)絡(luò)流量)。
·netstat –r
本選項(xiàng)可以顯示關(guān)于路由表的信息,類似于后面所講使用route print命令時(shí)看到的 信息。除了顯示有效路由外,還顯示當(dāng)前有效的連接。
·netstat –a
本選項(xiàng)顯示一個(gè)所有的有效連接信息列表,包括已建立的連接(ESTABLISHED),也包括監(jiān)聽連接請(LISTENING)的那些連接。
·netstat –n
LISTEN:偵聽來自遠(yuǎn)方的TCP端口的連接請求
SYN-SENT:再發(fā)送連接請求后等待匹配的連接請求(如果有大量這樣的狀態(tài)包,檢查是否中招了)
SYN-RECEIVED:再收到和發(fā)送一個(gè)連接請求后等待對方對連接請求的確認(rèn)(如有大量此狀態(tài),估計(jì)被flood攻擊了)
ESTABLISHED:代表一個(gè)打開的連接
FIN-WAIT-1:等待遠(yuǎn)程TCP連接中斷請求,或先前的連接中斷請求的確認(rèn)
FIN-WAIT-2:從遠(yuǎn)程TCP等待連接中斷請求
CLOSE-WAIT:等待從本地用戶發(fā)來的連接中斷請求
CLOSING:等待遠(yuǎn)程TCP對連接中斷的確認(rèn)
LAST-ACK:等待原來的發(fā)向遠(yuǎn)程TCP的連接中斷請求的確認(rèn)(不是什么好東西,此項(xiàng)出現(xiàn),檢查是否被攻擊)
TIME-WAIT:等待足夠的時(shí)間以確保遠(yuǎn)程TCP接收到連接中斷請求的確認(rèn)
CLOSED:沒有任何連接狀態(tài)