一種防止同步包攻擊的方法和裝置的制造方法【
技術領域:
】[0001]本發(fā)明涉及通信
技術領域:
,尤其涉及一種防止同步(SYN,synchronous)包攻擊的方法和裝置?!?br>背景技術:
】[0002]在傳輸控制協(xié)議/因特網互聯(lián)協(xié)議(TCP/IP,Transmiss1nControlProtocol/InternetProtocol)協(xié)議中,TCP協(xié)議提供可靠的連接服務,采用三次握手建立一個連接。[0003]假設一臺客戶端與有一臺服務器進行通訊,三次握手的過程如下:[0004]第一次握手,建立連接時,客戶端發(fā)送TCP包(標識位SYN=j)到服務器,并進入SYN_SEND狀態(tài),此時客戶端等待服務器確認此TCP包;[0005]第二次握手,服務器收到TCP包,必須確認客戶的SYN(ack=j+1),同時自己也發(fā)送一個TCP包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態(tài);[0006]第三次握手,客戶端收到服務器的TCP包含標識位SYN+ACK,向服務器發(fā)送確認包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務器進入ESTABLISHED狀態(tài),完成三次握手。[0007]上述三次握手完成后,客戶端便可以與服務器進行數(shù)據(jù)通信,從三次握手步驟來看,如果客戶端在第三次握手時不發(fā)送SYN+ACK包,那么服務器就收不到此包,這種情況下服務器端一般會重試再次發(fā)送SYN+ACK給客戶端并等待一段時間后丟棄這個未完成的連接,這段時間的長度我們稱為SYNTimeout,一般來說這個時間是分鐘的數(shù)量級(大約為30秒-2分鐘),此時等待過程中會占用一定的系統(tǒng)資源,如果來自多個端口的SYN+ACK包都無法收到,那么多個線程將處于等待連接,這樣系統(tǒng)資源可能會最終被耗盡,出現(xiàn)死機或者系統(tǒng)重啟情況,這種攻擊即為SYNflood攻擊,可見SYN包攻擊就是利用了TCP/IP協(xié)議TCP建立連接的第三次握手漏洞來實施對服務器攻擊。[0008]如果內網中某臺機器作為服務器對外提供某些應用服務,在無防火墻的情況下,來自外部的大量SYN包攻擊路由器下的主機,如果主機件性能不優(yōu),輕則導致正常業(yè)務不能工作,嚴重時可能導致主機宕機或網絡癱瘓。[0009]現(xiàn)有技術中,在路由器上的解決方法是直接在用戶空間通過iptables命令行執(zhí)行一些限制SYN包數(shù)目的命令,但是,如果檢測到達到閥值就將用戶數(shù)據(jù)丟掉,且對用戶誤操作沒有修正的余地。【
發(fā)明內容】[0010]為了解決上述技術問題,本發(fā)明提供了一種防止同步包攻擊的方法和裝置,能夠防止當前路由器的內網設備遭受SYN包攻擊,有效的保證內網設備由于SYN包攻擊造成設備資源耗盡而宕機和網絡癱瘓。[0011]本發(fā)明提供了一種防止同步包攻擊的方法,包括:預先在內核注冊鉤子函數(shù)、創(chuàng)建跟蹤監(jiān)測鏈表和黑名單鏈表,并設置同步包閥值和重檢間隔時間;利用鉤子函數(shù)解析客戶端向服務器發(fā)送的TCP連接數(shù)據(jù)包,其中客戶端和服務器第一次握手發(fā)的TCP連接數(shù)據(jù)包為同步數(shù)據(jù)包;當來自同一IP地址的同步數(shù)據(jù)包的數(shù)量達到同步包閥值時,將所述IP地址添加到跟蹤監(jiān)測鏈表中,對所述IP地址對應的客戶端后續(xù)發(fā)送的TCP連接數(shù)據(jù)包進行跟蹤;對跟蹤的TCP連接數(shù)據(jù)包進行解析,如果確定所述TCP連接數(shù)據(jù)包是攻擊數(shù)據(jù)包,則將所述TCP連接數(shù)據(jù)包對應的IP地址添加到黑名單鏈表中。[0012]進一步地,所述跟蹤監(jiān)測鏈表包括IP地址字段和TCP連接數(shù)據(jù)包字段;所述跟蹤監(jiān)測鏈表的長度為要跟蹤檢測的IP地址的數(shù)目。[0013]進一步地,所述黑名單鏈表包括IP地址字段和黑名單標識位字段;所述黑名單標識位為第一值時,表示所述IP地址永久加入黑名單鏈表,所述IP地址對應的客戶端發(fā)出的TCP連接數(shù)據(jù)包直接丟棄;所述黑名單標識位為第二值時,表示所述IP地址重檢間隔時間內在加入黑名單鏈表,所述IP地址對應的客戶端發(fā)出的TCP連接數(shù)據(jù)包在重檢間隔時間內無法發(fā)送到服務器。[0014]進一步地,所述同步包閥值表示每秒允許來自同一IP地址的同步數(shù)據(jù)包的最大數(shù)量;所述重檢間隔時間表示第一次將IP地址加入黑名單鏈表后,第二次檢測到同步數(shù)據(jù)包達到同步包閥值的時間。[0015]進一步地,所述方法還包括:通過Jiffes變量差值統(tǒng)計每秒同步數(shù)據(jù)包的數(shù)量;啟動時將該Jiffies變量初始化為0,每次鉤子函數(shù)對同步數(shù)據(jù)包進行解析中斷處理程序時增加Jiffies變量的值。[0016]進一步地,所述TCP連接數(shù)據(jù)包包括序列字段和確認字段;所述對跟蹤的TCP連接數(shù)據(jù)包進行解析的步驟包括:根據(jù)序列字段和確認字段,對跟蹤的TCP連接數(shù)據(jù)包進行解析。[0017]進一步地,所述根據(jù)序列字段和確認字段,對跟蹤的TCP連接數(shù)據(jù)包進行解析的步驟包括:在客戶端和服務器的第一次握手時,截獲客戶端向服務器發(fā)送的第一TCP連接數(shù)據(jù)包,獲取第一TCP連接數(shù)據(jù)包的序列值,設為X,其中X為整數(shù);將第一TCP連接數(shù)據(jù)包放行發(fā)送到服務器;在客戶端和服務器的第二次握手時,截獲服務器向客戶端返回作為應答的第二TCP連接數(shù)據(jù)包,獲取第二TCP連接數(shù)據(jù)包的確認值,所述第二TCP連接數(shù)據(jù)包的確認值為X+1;獲取第二TCP連接數(shù)據(jù)包的序列值,設為Y,其中Y為整數(shù)。[0018]進一步地,所述方法還包括:判斷在預設時間內客戶端和服務器是否進行第三次握手;如果截獲到客戶端向服務器發(fā)送的第三TCP連接數(shù)據(jù)包,獲取第三TCP連接數(shù)據(jù)包序列值,所述第三TCP連接數(shù)據(jù)包的序列值為Y+1,則確定客戶端不是攻擊客戶端;如果沒有截獲到客戶端向服務器發(fā)送的第三TCP連接數(shù)據(jù)包,而截獲到進行第一次握手的第一TCP連接數(shù)據(jù)包,則確定客戶端是攻擊客戶端,所述攻擊客戶端發(fā)出的TCP連接數(shù)據(jù)包是攻擊數(shù)據(jù)包。[0019]進一步地,所述如果確定所述TCP連接數(shù)據(jù)包是攻擊數(shù)據(jù)包,則將所述TCP連接數(shù)據(jù)包對應的IP地址添加到黑名單鏈表中之后,還包括:將所述IP地址對應的黑名單標識位設置為第二值;在所述間隔重檢間隔時間內,如果截獲到客戶端向服務器發(fā)送的TCP連接數(shù)據(jù)包,判斷所述客戶端的IP地址是否在黑名單鏈表中;如果所述IP地址在黑名單鏈表中,則將所述TCP連接數(shù)據(jù)包進行丟棄。[0020]進一步地,所述方法好包括:經過所述間隔重檢間隔時間后,再次統(tǒng)計所述IP地址對應的每秒同步數(shù)據(jù)包的數(shù)量;如果同步數(shù)據(jù)包的數(shù)量達到同步包閾值,則將所述IP地址對應的黑名單標識位設置為第一值;如果同步數(shù)據(jù)包的數(shù)量沒有達到同步包閾值,則將所述IP地址從黑名單鏈表中刪除。[0021]本發(fā)明還提供了一種防止同步包攻擊的裝置,包括:設置模塊,用于預先在內核注冊鉤子函數(shù)、創(chuàng)建跟蹤監(jiān)測鏈表和黑名單鏈表,并設置同步包閥值和重檢間隔時間;第一處理模塊,用于利用鉤子函數(shù)解析客戶端向服務器發(fā)送的TCP連接數(shù)據(jù)包,其中客戶端和服務器第一次握手發(fā)的TCP連接數(shù)據(jù)包為同步數(shù)據(jù)包;第二處理模塊,用于當來自同一IP地址的同步數(shù)據(jù)包的數(shù)量達到同步包閥值時,將所述IP地址添加到跟蹤監(jiān)測鏈表中,對所述IP地址對應的客戶端后續(xù)發(fā)送的TCP連接數(shù)據(jù)包進行跟蹤;第三處理模塊,用于對跟蹤的TCP連接數(shù)據(jù)包進行解析,如果確定所述TCP連接數(shù)據(jù)包是攻擊數(shù)據(jù)包,則將所述TCP連接數(shù)據(jù)包對應的IP地址添加到黑名單鏈表中。[0022]進一步地,所述跟蹤監(jiān)測鏈表包括IP地址字段和TCP連接數(shù)據(jù)包字段;所述跟蹤監(jiān)測鏈表的長度為要跟蹤檢測的IP地址的數(shù)目;所述黑名單鏈表包括IP地址字段和黑名單標識位字段;所述黑名單標識位為第一值時,表示所述IP地址永久加入黑名單鏈表,所述IP地址對應的客戶端發(fā)出的TCP連接數(shù)據(jù)包直接丟棄;所述黑名當前第1頁1 2 3 4