• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于Linux平臺防止IP欺騙的SYN攻擊防火墻的設(shè)計與實現(xiàn)

    2014-06-19 18:13夏躍偉牛文倩劉金廣
    現(xiàn)代電子技術(shù) 2014年9期
    關(guān)鍵詞:防火墻

    夏躍偉 牛文倩 劉金廣

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

    關(guān)鍵詞: 防火墻; SYN攻擊; RED算法; 哈希表

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

    0 引 言

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

    1 系統(tǒng)相關(guān)知識

    1.1 防火墻

    防火墻是防止網(wǎng)絡(luò)攻擊的主要手段之一,目前的防火墻得到很大的發(fā)展,它防止外部網(wǎng)絡(luò)對內(nèi)部網(wǎng)絡(luò)的攻擊,一個防火墻的參考模型如圖1所示。

    圖1 防火墻模型

    1.2 RED算法

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

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

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

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

    圖2 數(shù)據(jù)包丟棄概率[P]和兩個門限值的關(guān)系圖

    2 總體設(shè)計

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

    3 防火墻關(guān)鍵技術(shù)實現(xiàn)

    3.1 包檢測模塊

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

    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; /*上次丟棄分組后收到的分組個數(shù)*/

    u32 qR; /*Cached random number*/

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

    struct tc_red_xstats st;

    };

    圖3 SYN防火墻總體設(shè)計

    隊列的平均長度是判斷丟棄概率的關(guān)鍵因素,利用函數(shù)red_cmp_thresh實現(xiàn)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;

    }

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

    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連接請求數(shù)據(jù)包的丟棄概率經(jīng)過上面的函數(shù)計算以后,根據(jù)和預(yù)定的概率值進行比較,如果概率小于給定的閾值,則接收數(shù)據(jù)包通過主機,如果概率大于給定閾值,則到哈希表中進行查找,哈希表中存在相同的數(shù)據(jù)包信息則接收數(shù)據(jù)包進入主機,如果不存在則刪除數(shù)據(jù)包,同時保存數(shù)據(jù)包的相關(guān)信息到哈希表中。

    定義哈希結(jié)構(gòu)PACK_hash,為了方便系統(tǒng)的快速查找,在這里將其定義為大小為4 096的哈希數(shù)組。

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

    hash_key(struct iphdr src)

    {

    u16 hashavl,hashky;

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

    hashky=hashkvl%32;

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

    }

    3.3 數(shù)據(jù)包信息結(jié)構(gòu)和定時器

    在后面的處理過程中,只用到了數(shù)據(jù)包的源地址和目的地址,所以可以定義數(shù)據(jù)包的信息結(jié)構(gòu):

    struct PACK_info

    {

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

    struct iphdr src,drc; //表示數(shù)據(jù)包的源地址

    struct timer_list time;

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

    u16 spt,dpt ; //數(shù)據(jù)包的源端口和目的端口

    }

    內(nèi)核中提供了對定時器處理函數(shù)[5]如下:

    void init_timer(struct timer_list *timer)

    //初始化定時器隊列結(jié)構(gòu)

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

    int del_timer(struct timer_list *timer)

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

    將它刪除

    3.4 數(shù)據(jù)包匹配

    數(shù)據(jù)包在哈希表中查找相應(yīng)的節(jié)點,匹配數(shù)據(jù)包的源地址和目的地址是否相同。

    基于數(shù)據(jù)包的源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;

    }

    基于數(shù)據(jù)包的目的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 結(jié) 論

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

    參考文獻

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

    [2] 毛德操,胡希明.Linux內(nèi)核源代碼情景分析[M].杭州:浙江大學(xué)出版社,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內(nèi)核的內(nèi)核對象機制分析[J].計算機應(yīng)用,2005,25(1):76?84.

    [6] 何映,覃以威,李丹.基于Windows內(nèi)核態(tài)個人防火墻的設(shè)計與實現(xiàn)[J].現(xiàn)代電子技術(shù),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;

    }

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

    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連接請求數(shù)據(jù)包的丟棄概率經(jīng)過上面的函數(shù)計算以后,根據(jù)和預(yù)定的概率值進行比較,如果概率小于給定的閾值,則接收數(shù)據(jù)包通過主機,如果概率大于給定閾值,則到哈希表中進行查找,哈希表中存在相同的數(shù)據(jù)包信息則接收數(shù)據(jù)包進入主機,如果不存在則刪除數(shù)據(jù)包,同時保存數(shù)據(jù)包的相關(guān)信息到哈希表中。

    定義哈希結(jié)構(gòu)PACK_hash,為了方便系統(tǒng)的快速查找,在這里將其定義為大小為4 096的哈希數(shù)組。

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

    hash_key(struct iphdr src)

    {

    u16 hashavl,hashky;

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

    hashky=hashkvl%32;

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

    }

    3.3 數(shù)據(jù)包信息結(jié)構(gòu)和定時器

    在后面的處理過程中,只用到了數(shù)據(jù)包的源地址和目的地址,所以可以定義數(shù)據(jù)包的信息結(jié)構(gòu):

    struct PACK_info

    {

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

    struct iphdr src,drc; //表示數(shù)據(jù)包的源地址

    struct timer_list time;

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

    u16 spt,dpt ; //數(shù)據(jù)包的源端口和目的端口

    }

    內(nèi)核中提供了對定時器處理函數(shù)[5]如下:

    void init_timer(struct timer_list *timer)

    //初始化定時器隊列結(jié)構(gòu)

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

    int del_timer(struct timer_list *timer)

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

    將它刪除

    3.4 數(shù)據(jù)包匹配

    數(shù)據(jù)包在哈希表中查找相應(yīng)的節(jié)點,匹配數(shù)據(jù)包的源地址和目的地址是否相同。

    基于數(shù)據(jù)包的源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;

    }

    基于數(shù)據(jù)包的目的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 結(jié) 論

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

    參考文獻

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

    [2] 毛德操,胡希明.Linux內(nèi)核源代碼情景分析[M].杭州:浙江大學(xué)出版社,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內(nèi)核的內(nèi)核對象機制分析[J].計算機應(yīng)用,2005,25(1):76?84.

    [6] 何映,覃以威,李丹.基于Windows內(nèi)核態(tài)個人防火墻的設(shè)計與實現(xiàn)[J].現(xiàn)代電子技術(shù),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;

    }

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

    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連接請求數(shù)據(jù)包的丟棄概率經(jīng)過上面的函數(shù)計算以后,根據(jù)和預(yù)定的概率值進行比較,如果概率小于給定的閾值,則接收數(shù)據(jù)包通過主機,如果概率大于給定閾值,則到哈希表中進行查找,哈希表中存在相同的數(shù)據(jù)包信息則接收數(shù)據(jù)包進入主機,如果不存在則刪除數(shù)據(jù)包,同時保存數(shù)據(jù)包的相關(guān)信息到哈希表中。

    定義哈希結(jié)構(gòu)PACK_hash,為了方便系統(tǒng)的快速查找,在這里將其定義為大小為4 096的哈希數(shù)組。

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

    hash_key(struct iphdr src)

    {

    u16 hashavl,hashky;

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

    hashky=hashkvl%32;

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

    }

    3.3 數(shù)據(jù)包信息結(jié)構(gòu)和定時器

    在后面的處理過程中,只用到了數(shù)據(jù)包的源地址和目的地址,所以可以定義數(shù)據(jù)包的信息結(jié)構(gòu):

    struct PACK_info

    {

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

    struct iphdr src,drc; //表示數(shù)據(jù)包的源地址

    struct timer_list time;

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

    u16 spt,dpt ; //數(shù)據(jù)包的源端口和目的端口

    }

    內(nèi)核中提供了對定時器處理函數(shù)[5]如下:

    void init_timer(struct timer_list *timer)

    //初始化定時器隊列結(jié)構(gòu)

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

    int del_timer(struct timer_list *timer)

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

    將它刪除

    3.4 數(shù)據(jù)包匹配

    數(shù)據(jù)包在哈希表中查找相應(yīng)的節(jié)點,匹配數(shù)據(jù)包的源地址和目的地址是否相同。

    基于數(shù)據(jù)包的源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;

    }

    基于數(shù)據(jù)包的目的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 結(jié) 論

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

    參考文獻

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

    [2] 毛德操,胡希明.Linux內(nèi)核源代碼情景分析[M].杭州:浙江大學(xué)出版社,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內(nèi)核的內(nèi)核對象機制分析[J].計算機應(yīng)用,2005,25(1):76?84.

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

    猜你喜歡
    防火墻
    筑牢防火墻 系緊安全帶
    “一封家書”寄深情 筑牢疫情“防火墻”
    全民總動員,筑牢防火墻
    構(gòu)建防控金融風(fēng)險“防火墻”
    防火墻技術(shù)在網(wǎng)絡(luò)安全應(yīng)用中的現(xiàn)狀
    計算機網(wǎng)絡(luò)安全中防火墻技術(shù)的應(yīng)用思考
    智慧防火墻
    海南新農(nóng)合有了“防火墻”
    在舌尖上筑牢抵御“僵尸肉”的防火墻
    下一代防火墻要做的十件事
    江都市| 五家渠市| 新泰市| 平利县| 连山| 东辽县| 望奎县| 莱西市| 东兴市| 荥经县| 西畴县| 天祝| 彭水| 剑川县| 股票| 廊坊市| 西丰县| 多伦县| 福州市| 崇义县| 天台县| 二连浩特市| 金寨县| 胶南市| 花莲县| 岐山县| 布拖县| 石首市| 遂川县| 大洼县| 渝北区| 乐陵市| 东丰县| 东兰县| 启东市| 江川县| 新昌县| 图木舒克市| 灵川县| 宁夏| 乐东|