999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Linux平臺防止IP欺騙的SYN攻擊防火墻的設計與實現

2014-06-19 18:13:35夏躍偉牛文倩劉金廣
現代電子技術 2014年9期

夏躍偉 牛文倩 劉金廣

摘 要: 目前,SYN FLOOD攻擊占70%~80%。IP欺騙是常用的方式,如何防止IP欺騙的SYN攻擊成為研究熱點。設計是以redhat 5.0 為平臺,結合RED算法設計并實現一個抗SYN攻擊的包過濾防火墻,該防火墻在輕度和中度攻擊的情況下判斷一個數據包的丟棄概率,當被丟棄則保存該數據包到哈希表中,主機等待客戶機重傳TCP連接請求,檢測是否是真實性的IP地址,經過分析研究和實驗的驗證具有較好的吞吐量,同時正常數據包的通過率很高。當遭受的是重度攻擊時,則直接采用的是RED中的隨機丟棄數據包。

關鍵詞: 防火墻; SYN攻擊; RED算法; 哈希表

中圖分類號: TN915.08?34 文獻標識碼: A 文章編號: 1004?373X(2014)09?0083?03

0 引 言

隨著網絡的發展,網絡攻擊的手段越來越多,其中以IP欺騙形式的SYN攻擊所占的比例較大,眾多的專家學者都致力于研究如何有效控制SYN攻擊[1]。也提出了較多的方法,例如狀態檢測算法,該算法主要是利用TCP連接過程中的幾個狀態[2],判斷是否是攻擊性數據包,但是該算法存在一些缺陷,對每個數據包都要檢測其狀態,而且要保存較多的數據包信息,這對系統的吞吐量和內存都有較大的影響。因此,本實驗防火墻致力于提高正常包的通過率,以及系統吞吐量。對于輕度和中度攻擊時的系統性能有很大的提高。

1 系統相關知識

1.1 防火墻

防火墻是防止網絡攻擊的主要手段之一,目前的防火墻得到很大的發展,它防止外部網絡對內部網絡的攻擊,一個防火墻的參考模型如圖1所示。

圖1 防火墻模型

1.2 RED算法

RED算法[3]利用當前隊列的平均長度計算數據包的丟棄概率,如圖2所示,具體由三個原則確定:

(1) 當平均隊列長度[Lav]小于給定的數據包隊列長度最小門限值minth時,數據包丟棄概率[P=0;]

(2) 當平均隊列長度[Lav]大于給定的數據包隊列長度最大門限值maxth時,數據包的丟棄概率[P=1;]

(3) 當平均隊列長度在minth和maxth之間,數據包的丟棄概率在0~1之間。而且[P=max*][(Q-Min)(maxth-minth)。]

圖2 數據包丟棄概率[P]和兩個門限值的關系圖

2 總體設計

因為IP欺騙形式的SYN攻擊,是采用的偽造IP地址和端口,主機發送ACK數據包,攻擊機器是不會做出回應的[4]。所以判斷正常包就可以讓客戶機其超時重傳,從而檢測是否是真實IP。防火墻的設計主要是針對SYN請求數據包,利用RED算法計算當前的TCP連接請求數據包到來時的TCP緩沖區的平均隊列長度[Q,]如果平均隊列長度[Q]小于給定的最小隊列門限值minth,則說明當前沒有SYN攻擊或者只有少數的SYN數據包,這種情況下不會影響本機性能,可以直接接收數據包。如果平均隊列長度大于最大門限值maxth,說明當前遭受到較強的SYN攻擊,則隨機的丟棄數據包。如果平均隊列長度在最小門限minth和最大門限值maxth之間,則計算當前數據包的隨機丟棄概率[P,]如果[P]小于給定的閾值[Pm,]則接收數據包,如果[P]大于給定的閾值,則先到哈希表中查找是否存在相同數據包信息的元素(哈希表存放的是被丟棄的數據包的相關信息),如果找到則接收數據包到本機,如果沒有找到則保存數據包相關信息到哈希表中,同時丟棄該數據包??傮w設計如圖3所示。

3 防火墻關鍵技術實現

3.1 包檢測模塊

采用RED算法實現對數據包的處理,判斷進入到主機的TCP連接請求數據包的丟棄概率,首先要定義RED算法中用到的參數:

struct red_parms{

/* Parameters */

u32 limit; /*隊列長度上限*/

u32 qth_min; /*算法需要的兩個門限值*/

u32 qth_max;

u32 Rmask;

u32 Scell_max; /*最大空閑時間*/

unsigned char flags;

char Wlog; /*log(W)*/

char Plog; /*random number bits*/

char Scell_log;

u8 Stab[256];

unsigned long qave; /*平均隊列長度*/

int qcount; /*上次丟棄分組后收到的分組個數*/

u32 qR; /*Cached random number*/

psched_time_t qidlestart; /*隊列空間開始時間*/

struct tc_red_xstats st;

};

圖3 SYN防火墻總體設計

隊列的平均長度是判斷丟棄概率的關鍵因素,利用函數red_cmp_thresh實現RED算法的隊列長度判斷,對于不同的返回值,計算丟棄概率。

static inline int red_cmp_thresh(struct red_parms *p, unsigned long qavg)

{

if (qavg < p?>qth_min)

return RED_BELOW_MIN_THRESH;

else if (qavg >= p->qth_max)

return RED_ABOVE_MAX_TRESH;

else

return RED_BETWEEN_TRESH;

}

針對不同的隊列長度,計算出當前數據包的丟棄概率:

static inline int red_action(struct red_parms *p, unsigned long qavg)

{

switch (red_cmp_thresh(p, qavg)) {

case RED_BELOW_MIN_THRESH:

p->qcount = -1;

return RED_DONT_MARK;

case RED_BETWEEN_TRESH:

if (++p->qcount) {

if (red_mark_probability(p, qavg)) {

p->qcount = 0;

p->qR = red_random(p);

}

} else

p->qR = red_random(p);

}

3.2 哈希表

一個TCP連接請求數據包的丟棄概率經過上面的函數計算以后,根據和預定的概率值進行比較,如果概率小于給定的閾值,則接收數據包通過主機,如果概率大于給定閾值,則到哈希表中進行查找,哈希表中存在相同的數據包信息則接收數據包進入主機,如果不存在則刪除數據包,同時保存數據包的相關信息到哈希表中。

定義哈希結構PACK_hash,為了方便系統的快速查找,在這里將其定義為大小為4 096的哈希數組。

進行哈希函數的查找和插入的哈希函數,可以利用數據包的源地址表示,將源地址的前16位和后16位相加,得到的結果除留余數,具體的函數可以是:

hash_key(struct iphdr src)

{

u16 hashavl,hashky;

hashavl=(u16)(src->saddr>>16+src->saddr&&0x0000ffff);

hashky=hashkvl%32;

//采用32取余數,能夠較好地防止哈希沖突

}

3.3 數據包信息結構和定時器

在后面的處理過程中,只用到了數據包的源地址和目的地址,所以可以定義數據包的信息結構:

struct PACK_info

{

struct list_head pack_list; //哈希沖突時,存儲為一個鏈表

struct iphdr src,drc; //表示數據包的源地址

struct timer_list time;

//定時器,防止哈希表一直被填滿,到達時間就刪除這個節點

u16 spt,dpt ; //數據包的源端口和目的端口

}

內核中提供了對定時器處理函數[5]如下:

void init_timer(struct timer_list *timer)

//初始化定時器隊列結構

vod add_timer(struct timer_list *timer) //啟動定時器

int del_timer(struct timer_list *timer)

//啟動定時器前將它刪除,因為在超時后系統會自動

將它刪除

3.4 數據包匹配

數據包在哈希表中查找相應的節點,匹配數據包的源地址和目的地址是否相同。

基于數據包的源IP 地址進行匹配:

static int check_spkt(struct PACK_info *skb)

{

if (! skb )

return NF_ACCEPT;

if ((skb->src->saddr >= htonl(fw_deny.sipf)) && (skb->src->saddr <= htonl(fw_deny.sipt)))

return NF_DROP;

return NF_ACCEPT;

}

基于數據包的目的IP地址進行匹配:

static int check_dpk(struct sk_buff *skb)

{

if (! skb )

return NF_ACCEPT;

if ((skb->drc->daddr >= htonl(fw_deny.sipf)) && (skb->

drc->daddr <= htonl(fw_deny.dipt)) )

return NF_DROP;

return NF_ACCEPT;

}

4 結 論

本防火墻的設計采用的擁塞控制算法RED算法,同時利用了哈希表相關知識。構建了一個簡單實用的小型防止IP地址欺騙的SYN攻擊的防火墻,經過試驗測試,該防火墻在輕度和重度攻擊時,有較好的防御能力,正常包的通過率保持在98%左右,系統性能較好,吞吐量較大。

參考文獻

[1] 周劍嵐,馮珊.運用hook技術實現的軟件防火墻[J].華中科技大學學報:自然科學版,2004,32(3):83?85.

[2] 毛德操,胡希明.Linux內核源代碼情景分析[M].杭州:浙江大學出版社,2001.

[3] 陳軍,陳志剛.主動隊列管理RED算法的改進與實驗仿真研究[J].計算機工程,2006,9(6):44?47.

[4] POTTER B. Open source firewall alternatives [J]. Network Security, 2006, 18(6): 16?17.

[5] 丁曉波,桑楠,張寧.Linux 2.6內核的內核對象機制分析[J].計算機應用,2005,25(1):76?84.

[6] 何映,覃以威,李丹.基于Windows內核態個人防火墻的設計與實現[J].現代電子技術,2012,35(6):49?52.

{

if (qavg < p?>qth_min)

return RED_BELOW_MIN_THRESH;

else if (qavg >= p->qth_max)

return RED_ABOVE_MAX_TRESH;

else

return RED_BETWEEN_TRESH;

}

針對不同的隊列長度,計算出當前數據包的丟棄概率:

static inline int red_action(struct red_parms *p, unsigned long qavg)

{

switch (red_cmp_thresh(p, qavg)) {

case RED_BELOW_MIN_THRESH:

p->qcount = -1;

return RED_DONT_MARK;

case RED_BETWEEN_TRESH:

if (++p->qcount) {

if (red_mark_probability(p, qavg)) {

p->qcount = 0;

p->qR = red_random(p);

}

} else

p->qR = red_random(p);

}

3.2 哈希表

一個TCP連接請求數據包的丟棄概率經過上面的函數計算以后,根據和預定的概率值進行比較,如果概率小于給定的閾值,則接收數據包通過主機,如果概率大于給定閾值,則到哈希表中進行查找,哈希表中存在相同的數據包信息則接收數據包進入主機,如果不存在則刪除數據包,同時保存數據包的相關信息到哈希表中。

定義哈希結構PACK_hash,為了方便系統的快速查找,在這里將其定義為大小為4 096的哈希數組。

進行哈希函數的查找和插入的哈希函數,可以利用數據包的源地址表示,將源地址的前16位和后16位相加,得到的結果除留余數,具體的函數可以是:

hash_key(struct iphdr src)

{

u16 hashavl,hashky;

hashavl=(u16)(src->saddr>>16+src->saddr&&0x0000ffff);

hashky=hashkvl%32;

//采用32取余數,能夠較好地防止哈希沖突

}

3.3 數據包信息結構和定時器

在后面的處理過程中,只用到了數據包的源地址和目的地址,所以可以定義數據包的信息結構:

struct PACK_info

{

struct list_head pack_list; //哈希沖突時,存儲為一個鏈表

struct iphdr src,drc; //表示數據包的源地址

struct timer_list time;

//定時器,防止哈希表一直被填滿,到達時間就刪除這個節點

u16 spt,dpt ; //數據包的源端口和目的端口

}

內核中提供了對定時器處理函數[5]如下:

void init_timer(struct timer_list *timer)

//初始化定時器隊列結構

vod add_timer(struct timer_list *timer) //啟動定時器

int del_timer(struct timer_list *timer)

//啟動定時器前將它刪除,因為在超時后系統會自動

將它刪除

3.4 數據包匹配

數據包在哈希表中查找相應的節點,匹配數據包的源地址和目的地址是否相同。

基于數據包的源IP 地址進行匹配:

static int check_spkt(struct PACK_info *skb)

{

if (! skb )

return NF_ACCEPT;

if ((skb->src->saddr >= htonl(fw_deny.sipf)) && (skb->src->saddr <= htonl(fw_deny.sipt)))

return NF_DROP;

return NF_ACCEPT;

}

基于數據包的目的IP地址進行匹配:

static int check_dpk(struct sk_buff *skb)

{

if (! skb )

return NF_ACCEPT;

if ((skb->drc->daddr >= htonl(fw_deny.sipf)) && (skb->

drc->daddr <= htonl(fw_deny.dipt)) )

return NF_DROP;

return NF_ACCEPT;

}

4 結 論

本防火墻的設計采用的擁塞控制算法RED算法,同時利用了哈希表相關知識。構建了一個簡單實用的小型防止IP地址欺騙的SYN攻擊的防火墻,經過試驗測試,該防火墻在輕度和重度攻擊時,有較好的防御能力,正常包的通過率保持在98%左右,系統性能較好,吞吐量較大。

參考文獻

[1] 周劍嵐,馮珊.運用hook技術實現的軟件防火墻[J].華中科技大學學報:自然科學版,2004,32(3):83?85.

[2] 毛德操,胡希明.Linux內核源代碼情景分析[M].杭州:浙江大學出版社,2001.

[3] 陳軍,陳志剛.主動隊列管理RED算法的改進與實驗仿真研究[J].計算機工程,2006,9(6):44?47.

[4] POTTER B. Open source firewall alternatives [J]. Network Security, 2006, 18(6): 16?17.

[5] 丁曉波,桑楠,張寧.Linux 2.6內核的內核對象機制分析[J].計算機應用,2005,25(1):76?84.

[6] 何映,覃以威,李丹.基于Windows內核態個人防火墻的設計與實現[J].現代電子技術,2012,35(6):49?52.

{

if (qavg < p?>qth_min)

return RED_BELOW_MIN_THRESH;

else if (qavg >= p->qth_max)

return RED_ABOVE_MAX_TRESH;

else

return RED_BETWEEN_TRESH;

}

針對不同的隊列長度,計算出當前數據包的丟棄概率:

static inline int red_action(struct red_parms *p, unsigned long qavg)

{

switch (red_cmp_thresh(p, qavg)) {

case RED_BELOW_MIN_THRESH:

p->qcount = -1;

return RED_DONT_MARK;

case RED_BETWEEN_TRESH:

if (++p->qcount) {

if (red_mark_probability(p, qavg)) {

p->qcount = 0;

p->qR = red_random(p);

}

} else

p->qR = red_random(p);

}

3.2 哈希表

一個TCP連接請求數據包的丟棄概率經過上面的函數計算以后,根據和預定的概率值進行比較,如果概率小于給定的閾值,則接收數據包通過主機,如果概率大于給定閾值,則到哈希表中進行查找,哈希表中存在相同的數據包信息則接收數據包進入主機,如果不存在則刪除數據包,同時保存數據包的相關信息到哈希表中。

定義哈希結構PACK_hash,為了方便系統的快速查找,在這里將其定義為大小為4 096的哈希數組。

進行哈希函數的查找和插入的哈希函數,可以利用數據包的源地址表示,將源地址的前16位和后16位相加,得到的結果除留余數,具體的函數可以是:

hash_key(struct iphdr src)

{

u16 hashavl,hashky;

hashavl=(u16)(src->saddr>>16+src->saddr&&0x0000ffff);

hashky=hashkvl%32;

//采用32取余數,能夠較好地防止哈希沖突

}

3.3 數據包信息結構和定時器

在后面的處理過程中,只用到了數據包的源地址和目的地址,所以可以定義數據包的信息結構:

struct PACK_info

{

struct list_head pack_list; //哈希沖突時,存儲為一個鏈表

struct iphdr src,drc; //表示數據包的源地址

struct timer_list time;

//定時器,防止哈希表一直被填滿,到達時間就刪除這個節點

u16 spt,dpt ; //數據包的源端口和目的端口

}

內核中提供了對定時器處理函數[5]如下:

void init_timer(struct timer_list *timer)

//初始化定時器隊列結構

vod add_timer(struct timer_list *timer) //啟動定時器

int del_timer(struct timer_list *timer)

//啟動定時器前將它刪除,因為在超時后系統會自動

將它刪除

3.4 數據包匹配

數據包在哈希表中查找相應的節點,匹配數據包的源地址和目的地址是否相同。

基于數據包的源IP 地址進行匹配:

static int check_spkt(struct PACK_info *skb)

{

if (! skb )

return NF_ACCEPT;

if ((skb->src->saddr >= htonl(fw_deny.sipf)) && (skb->src->saddr <= htonl(fw_deny.sipt)))

return NF_DROP;

return NF_ACCEPT;

}

基于數據包的目的IP地址進行匹配:

static int check_dpk(struct sk_buff *skb)

{

if (! skb )

return NF_ACCEPT;

if ((skb->drc->daddr >= htonl(fw_deny.sipf)) && (skb->

drc->daddr <= htonl(fw_deny.dipt)) )

return NF_DROP;

return NF_ACCEPT;

}

4 結 論

本防火墻的設計采用的擁塞控制算法RED算法,同時利用了哈希表相關知識。構建了一個簡單實用的小型防止IP地址欺騙的SYN攻擊的防火墻,經過試驗測試,該防火墻在輕度和重度攻擊時,有較好的防御能力,正常包的通過率保持在98%左右,系統性能較好,吞吐量較大。

參考文獻

[1] 周劍嵐,馮珊.運用hook技術實現的軟件防火墻[J].華中科技大學學報:自然科學版,2004,32(3):83?85.

[2] 毛德操,胡希明.Linux內核源代碼情景分析[M].杭州:浙江大學出版社,2001.

[3] 陳軍,陳志剛.主動隊列管理RED算法的改進與實驗仿真研究[J].計算機工程,2006,9(6):44?47.

[4] POTTER B. Open source firewall alternatives [J]. Network Security, 2006, 18(6): 16?17.

[5] 丁曉波,桑楠,張寧.Linux 2.6內核的內核對象機制分析[J].計算機應用,2005,25(1):76?84.

[6] 何映,覃以威,李丹.基于Windows內核態個人防火墻的設計與實現[J].現代電子技術,2012,35(6):49?52.

主站蜘蛛池模板: 国产大片黄在线观看| 色婷婷成人网| 日韩无码视频网站| 一级片免费网站| 在线国产综合一区二区三区 | 国产精品网址在线观看你懂的| 精品91在线| 制服丝袜一区| 婷婷色在线视频| 亚洲最新地址| 亚洲自拍另类| 日韩av手机在线| 无码专区国产精品一区| 欧美精品亚洲日韩a| 91精品视频网站| 欧美啪啪一区| 国产精鲁鲁网在线视频| 亚洲成人精品| 中文字幕在线观| 91久久国产综合精品| 99久久精品国产精品亚洲| 久久久久久久久亚洲精品| 国产sm重味一区二区三区| 国产精品久久久久无码网站| 久996视频精品免费观看| 国产亚洲精久久久久久久91| 最新国产高清在线| 國產尤物AV尤物在線觀看| 国产精品手机在线播放| 国产主播一区二区三区| 久久亚洲美女精品国产精品| 99re这里只有国产中文精品国产精品| 国产女人在线视频| 色吊丝av中文字幕| 亚洲最大福利视频网| 日韩高清无码免费| 伊人激情久久综合中文字幕| 谁有在线观看日韩亚洲最新视频 | 黄色a一级视频| 久久精品视频亚洲| 国产一级特黄aa级特黄裸毛片 | 91欧洲国产日韩在线人成| 老司机午夜精品网站在线观看| YW尤物AV无码国产在线观看| 亚洲国产中文在线二区三区免| 亚洲中文字幕无码mv| 久久青草热| 91成人在线免费视频| 日本黄色a视频| 欧美色99| 播五月综合| 国产无码制服丝袜| 日本免费a视频| 亚洲综合专区| 国产成人无码AV在线播放动漫 | 欧美成人精品高清在线下载| 亚洲日本中文字幕乱码中文| 亚洲无码91视频| 97青草最新免费精品视频| 九九热精品免费视频| 欧美综合区自拍亚洲综合天堂| 丝袜美女被出水视频一区| 日本免费一级视频| 成人午夜天| 亚洲中文字幕无码爆乳| 狠狠色丁香婷婷综合| 性色生活片在线观看| 国产精品三级av及在线观看| 亚洲日韩日本中文在线| 国产真实乱子伦视频播放| 久久久久久久久亚洲精品| 精品一区二区三区视频免费观看| 国产人成午夜免费看| 国产精品美女自慰喷水| 91无码国产视频| 尤物成AV人片在线观看| 996免费视频国产在线播放| 亚洲精品无码高潮喷水A| 精品无码国产自产野外拍在线| 亚洲丝袜第一页| www.亚洲天堂| 白浆视频在线观看|