使用netstat檢測及監測網路連接
那麼是怎麼監測及檢測的呢?這就要用到我一開始就要提到的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服務。
好了,今天的學習呢,到這兒就結束了,至於能掌握多少,這就要因人而異了,但我相信:天道酬勤!!!
最後,如果哪裡有不對的地方,希望大家多多交流!!!
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive