使用netstat檢測及監測網絡連接

大家都知道,Linux上的web服務每天都要面臨成千上萬的連接,這些連接都是要遵循TCP協議的,這都是衆所周知的(至於TCP協議,這裏就不在過多的介紹,不懂的同學可以自己搜索,友好多)。既然都是TCP協議連接,那就不得不面臨一個網路最大的安全問題,DOS***及DDOS***,這些***是沒有辦法抹除的,因爲這是針對TCP協議本身的一個設計缺陷兒造成的。所以,這就要求運維人員,時刻監測系統安全,是否處於被DOS***狀態那麼是怎麼監測及檢測的呢?這就要用到我一開始就要提到的netstat命令。先簡單的介紹一下netstat命令的主要作用:可以查看系統當前的連接狀態,不管是TCP連接還是udp協議連接,以及每個連接的進程號、是哪個應用程序、連接所用的端口號,這些都可以陳列出來。是不是很強大。

在講監測檢測之前,先給大家在普及一個知識,那就是TCP連接的狀態,TCP進行3次握手,其過程有很多狀態,不同的連接狀態,都有想對應的狀態碼,看下面列表:

  • LISTEN:偵聽來自遠方的TCP端口的連接請求

  • SYN-SENT:再發送連接請求後等待匹配的連接請求

  • SYN-RECEIVED:再收到和發送一個連接請求後等待對方對連接請求的確認

  • ESTABLISHED:代表一個打開的連接

  • FIN-WAIT-1:等待遠程TCP連接中斷請求,或先前的連接中斷請求的確認

  • FIN-WAIT-2:從遠程TCP等待連接中斷請求

  • CLOSE-WAIT:等待從本地用戶發來的連接中斷請求

  • CLOSING:等待遠程TCP對連接中斷的確認

  • LAST-ACK:等待原來的發向遠程TCP的連接中斷請求的確認

  • TIME-WAIT:等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認

  • CLOSED:沒有任何連接狀態

大家最好一定要記住這些狀態,因爲運維人員在監控系統併發連接狀態時,監控系統返回的也是這些狀態碼!

瞭解完這些後,還要再瞭解一個Linux系統的腳本中的一個小知識點,那就是“|”管道符,管道符的作用就不多說了,這裏就簡單提一下,因爲下面的例子要用到。

好了,終於可以進入正題了,是不是都有點心急了呢 ?嘿嘿

以下這條命令將會顯示出netstat的幫助信息,不懂的以及不太瞭解這個命令有哪些參數可用的都可以在這個命令的返回信息中看到

#netstat --help

顯示當前所有活動的網絡連接:

#netstat -na

顯示出所有處於監聽狀態的應用程序及進程號和端口號:

#netstat -aultnp

如果想對一個單一的進行查詢,只需要在命令後面再加上“| grep $”。這裏就用到了管道符,以及grep篩選命令,$代表參數,也就是你要查詢的那個。

如要顯示所有80端口的網絡連接:

#netstat -aultnp | grep 80

如果還想對返回的連接列表進行排序,這就要用到sort命令了,命令如下:

#netstat -aultnp | grep :80 | sort

當然,如果還想進行統計的話,就可以再往後面加wc命令。如:

#netstat -aultnp | grep :80 | wc -l

其實,要想監測出系統連接是否安全,要進行多狀態的查詢,以及要分析,總結,還有就是經驗。總的下來,纔可以判斷出連接是否處於安全狀態。

下面就給大家再舉一些例子,讓大家徹底的明白,及徹底的理解這個命令的用處,使其發揮出最大功能。

#netstat -n -p|grep SYN_REC | wc -l

這個命令可以查找出當前服務器有多少個活動的 SYNC_REC 連接。正常來說這個值很小,最好小於5。 當有Dos***或者郵件炸彈的時候,這個值相當的高。儘管如此,這個值和系統有很大關係,有的服務器值就很高,也是正常現象。

#netstat -n -p | grep SYN_REC | sort -u

列出所有連接過的IP地址。

#netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'

列出所有發送SYN_REC連接節點的IP地址。

#netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

使用netstat命令計算每個主機連接到本機的連接數。

#netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

列出所有連接到本機的UDP或者TCP連接的IP數量。

#netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

檢查 ESTABLISHED 連接並且列出每個IP地址的連接數量。

#netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1

列出所有連接到本機80端口的IP地址和其連接數。80端口一般是用來處理HTTP網頁請求。

怎麼樣,是否能弄懂上面的這些命令及作用?在這兒呢,邪惡負責的說一句話:如果你能把上面的這些都徹底的理解消化了,能舉一反三了,那麼,恭喜您,您在Linux系統網絡檢測這一小塊已經是一個高手了,不在是菜鳥或者小白了,爲自己鼓鼓掌吧!!!

說明一點:命令及參數是死的,但是人是活的,要想發揮出其最大的功能,還需要自己去摸索,自己去理解及配合其他命令一起使用。同時,netstat -an在Windows上也管用哦!

那麼,如果真的發現有大量的假連接了,那麼也不要慌,要先找出一些“另類的IP地址”,怎麼解釋呢,因爲在進行Dos***時,會爲造出大量的假IP去連接服務器,進行3次握手,所以,這就要根據經驗去找出假IP,然後通過防火牆規則,添加一個規則拒接這個假IP的網段連接。

例如:

#iptables -A INPUT 1 -s $IPADRESS -j DROP/REJECT

注意,你需將$IPADRESS 替換成需要拒絕連接的IP地址。執行完iptables 後呢,要重啓一下web服務。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章