zoukankan      html  css  js  c++  java
  • syn攻击原理与防护措施

    何为syn攻击?
      先普及下tcp3次握手的知识,在TCP/IP中,tcp协议提供可靠的socket连接服务,通过3次握手建立可靠连接。
    tcp3次握手过程:
      第一阶段:某终端向服务器发送syn(syn=x)请求消息,并进入SYN_SEND状态
      第二阶段:服务器收到syn请求后,会回馈给终端synack消息(synack=x+1)和syn消息(syn=y),并进入SYN_RECV状态
      第三阶段:终端收到服务器的syn和synack,并向服务器反馈ack消息(ack=y+1),完成3次握手开始传输数据。
      了解到tcp3次握手之后呢,我们说一下syn攻击是怎么回事吧。syn其实就是在进行到第二阶段结束后,此时服务器不是已经发送了syn消息和synack消息了吗,这服务器真是个老好人啊,由于tcp3次握手机制,它得等着终端那家伙给它反馈synack消息啊,所以吧,服务器得分配一定的资源等着终端那家伙啊。可是呢,这终端比较坏,不但不回复synack包给服务器,反倒搞一大堆第一阶段的syn请求消息。这下服务器可不好过了啊,得腾出好多好多资源给终端留着啊,最后可能就把自己搞死了。这就是所谓的syn攻击啊,又称为ddos攻击。
    syn攻击的防范?
      1.通过调整sysctl.conf网络内核文件
      第一步,列出系统现有的sysctl.conf配置并筛选出syn字眼【不筛选的话好多的,展示不了】
    [root@centos-linux-01 ~]# sysctl -a|grep syn|grep -v ipv6
    sysctl: reading key "net.ipv6.conf.all.stable_secret"
    sysctl: reading key "net.ipv6.conf.default.stable_secret"
    sysctl: reading key "net.ipv6.conf.eth0.stable_secret"
    sysctl: reading key "net.ipv6.conf.lo.stable_secret"
    fs.quota.syncs = 0
    fs.xfs.inherit_sync = 1
    fs.xfs.xfssyncd_centisecs = 3000
    net.ipv4.tcp_max_syn_backlog = 128
    net.ipv4.tcp_syn_retries = 6
    net.ipv4.tcp_synack_retries = 5
    net.ipv4.tcp_syncookies = 1
      第二步,修改syn_retries与synack_retries的数值为2或3,设置syn_cookies为1【centeros 7默认为打开‘1’】
    [root@centos-linux-01 ~]# vim /etc/sysctl.conf
    net.ipv4.tcp_syn_retries = 2
    net.ipv4.tcp_synack_retries = 2
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_max_syn_backlog = 1024
      这里解释一下以上内容的含义:
      net.ipv4.tcp_syn_retries = 2
      【服务器在等待不到终端的确认消息时,syn消息报文会重新发送,需要根据网络情况尽量减少,如果网络不好的情况下终端可能会出现连不上服务器的情况】
      net.ipv4.tcp_synack_retries = 2
      【服务器在等待不到终端的确认消息时,synack消息报文会重新发送,需要根据网络情况尽量减少,情况和上面一样】
      net.ipv4.tcp_syncookies = 1
      【该功能可以防止部分SYN攻击】
      net.ipv4.tcp_max_syn_backlog = 1024
      【tcp_max_syn_backlog 是SYN队列的长度,加大SYN队列长度可以容纳更多等待连接的网络连接数】
      2.通过防火墙编写高级acl
    iptables -N syn-flood
    iptables -A syn-flood -m limit --limit 50/s --limit-burst 10 -j RETURN
    iptables -A syn-flood -j DROP
    iptables -I INPUT -j syn-flood
    service iptables save
      命令解释:
      -N 创建一个条新的链
      –limit 50/s 表示每秒50次; 1/m 则为每分钟一次
      –limit-burst 表示允许触发 limit 限制的最大包个数 (预设5),它就像是一个容器,最多装10个,超过10个就装不下了,这些包就给后面的规则了
      -I INPUT -j syn-flood 把INPUT的包交给syn-flood链处理
      这里的–limit-burst=10相当于说最开始我有10个可以匹配的包去转发,然后我匹配的包的个数是根据–limit=50/s进行限制的,也就是每秒限制转发50个数据包,多余的会被下面符合要求的DROP规则去处理,进行丢弃,这样就实现了对数据包的限速问题。

  • 相关阅读:
    CI/CD for Power Platform
    SpringMVC异常处理
    SpringMVC框架中的拦截器
    spring实现文件上传
    idea常用的快捷键
    解决maven项目创建过慢的问题
    springmvc—入门程序
    Spring中的 JdbcTemplate
    基于XML的AOP 配置
    基于注解的 AOP 配置
  • 原文地址:https://www.cnblogs.com/huskiesir/p/10212053.html
Copyright © 2011-2022 走看看