• CentOS防SYN攻击


    netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn

    172 ESTABLISHED

      59 CONNECTED

      589 SYN_RECV

      15 STREAM

    SYN居然这么高,继续追查是那些ip发出的SYN:

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

    首先说一下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@web ~]# 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@web ~]# 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@web ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more
      20 10.92.10.220
      1 125.43.36.199

    明显SYN连接数已经下来了

  • 相关阅读:
    理解 QEMU/KVM 和 Ceph(2):QEMU 的 RBD 块驱动(block driver)
    Neutron VxLAN + Linux Bridge 环境中的网络 MTU
    理解 QEMU/KVM 和 Ceph(1):QEMU-KVM 和 Ceph RBD 的 缓存机制总结
    [译] 企业级 OpenStack 的六大需求(第 3 部分):弹性架构、全球交付
    [译] 企业级 OpenStack 的六大需求(第 2 部分):开放架构和混合云兼容
    [译] 企业级 OpenStack 的六大需求(第 1 部分):API 高可用、管理和安全
    Javascript中的Array(数组) 、{}(映射) 与JSON解析
    HTML中显示特殊字符,如尖括号 “<”,">"等等
    Ubuntu 12.04 安装配置 Apache2
    Python中函数的参数传递与可变长参数
  • 原文地址:https://www.cnblogs.com/suihui/p/4323653.html
Copyright © 2020-2023  润新知