|簡體中文

比思論壇

 找回密碼
 按這成為會員
搜索



查看: 480|回復: 0
打印 上一主題 下一主題

Linux如何防御SYN攻击

[複製鏈接]

989

主題

1

好友

5260

積分

教授

Rank: 8Rank: 8

  • TA的每日心情
    奮斗
    2024-5-15 16:35
  • 簽到天數: 1232 天

    [LV.10]以壇為家III

    推廣值
    2
    貢獻值
    378
    金錢
    1880
    威望
    5260
    主題
    989

    回文勇士 文明人 中學生 高中生 簽到勳章 簽到達人 男生勳章 大學生 文章勇士 附件高人 附件達人 文章達人 教授

    樓主
    發表於 2013-3-13 09:48:59
    首先说一下SYN的攻击原理:  

    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

    第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

    第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据.

    如果用户与服务器发起连接请求只进行到第二次握手而不再响应服务器,服务器就会不停地等待用户的确认,如果过多这样的连接就会把服务器端的连接队列占满就会导致正常的用户无法建立连接。所以我们直接从SYN的连接上进行如下改动:

    查看linux默认的syn配置:

    [root@paulvps ~]# sysctl -a | grep _syn

    net.ipv4.tcp_max_syn_backlog = 1024

    net.ipv4.tcp_syncookies = 1

    net.ipv4.tcp_synack_retries = 5

    net.ipv4.tcp_syn_retries = 5

      
    tcp_max_syn_backlog 是SYN队列的长度,加大SYN队列长度可以容纳更多等待连接的网络连接数。tcp_syncookies是一个开关,是否打开SYN Cookie 功能,该功能可以防止部分SYN攻击。tcp_synack_retries和tcp_syn_retries定义SYN 的重试连接次数,将默认的参数减小来控制SYN连接次数的尽量少。

    以下是我修改后的参数,可以根据自己服务器的实际情况进行修改:

    [root@paulvps ~]# more /etc/rc.d/rc.local

    #!/bin/sh

    # This script will be executed *after* all the other init scripts.

    # You can put your own initialization stuff in here if you don't

    # want to do the full Sys V style init stuff.

    touch /var/lock/subsys/local

    ulimit -HSn 65535

    /usr/local/apache2/bin/apachectl start

    #####

    sysctl -w net.ipv4.tcp_max_syn_backlog=2048

    sysctl -w net.ipv4.tcp_syncookies=1

    sysctl -w net.ipv4.tcp_synack_retries=3

    sysctl -w net.ipv4.tcp_syn_retries=3

      
    为了不重启服务器而使配置立即生效,可以执行

    #sysctl -w net.ipv4.tcp_max_syn_backlog=2048

    #sysctl -w net.ipv4.tcp_syncookies=1

    #sysctl -w net.ipv4.tcp_synack_retries=3

    #sysctl -w net.ipv4.tcp_syn_retries=3

      
    也有的人喜欢用访问控制列表来防止SYN的攻击,在一定程度上减缓了syn的攻击:

    Syn 洪水攻击

    #iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT

      
    --limit 1/s 限制syn并发数每秒1次

    防端口扫描

    # iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

      
    死亡之ping

    # iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

    #>iptables-save >/etc/sysconfig/iptables

      
    进行查看,#iptables -L

    ACCEPT tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN limit: avg 1/sec burst 5

    ACCEPT tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/RST limit: avg 1/sec burst 5

    ACCEPT icmp -- anywhere anywhere icmp echo-request limit: avg 1/sec burst 5

      
    再次进行查看syn连接:

    [root@paulvps ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more

    重要聲明:本論壇是以即時上載留言的方式運作,比思論壇對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,讀者及用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,讀者及用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本論壇受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者及用戶發現有留言出現問題,請聯絡我們比思論壇有權刪除任何留言及拒絕任何人士上載留言 (刪除前或不會作事先警告及通知 ),同時亦有不刪除留言的權利,如有任何爭議,管理員擁有最終的詮釋權。用戶切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。

    手機版| 廣告聯繫

    GMT+8, 2024-5-23 11:44 , Processed in 0.044828 second(s), 17 queries , Gzip On, Memcache On.

    Powered by Discuz! X2.5

    © 2001-2012 Comsenz Inc.

    回頂部