今天早上一到公司登录公司官网的时候感觉挺慢,登录服务器查看官网访问情况:

  [root@web ~]# 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

  570 x.x.x.x

  (ip 就不写出了,是山东枣庄联通的一个ip),只是这一个ip就发出了这么多的syn请求连接,本来我们web服务器的并发数不是很高,这样一来正常的用户请求得不到相应,页面无法打开。因为硬件防火墙归集团IT部管理,我没有权限,所以只能在本地服务器上做些措施对SYN***进行部分减缓。

  首先说一下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连接数已经下来了。

转载于:https://blog.51cto.com/dadloveu/1285668

一次SYN***之战之Linux如何防SYN***相关推荐

  1. linux cookie 地址,SYN Cookie原理及其在Linux内核中的实现

    在目前以IPv4为支撑的网络协议上搭建的网络环境中,SYN Flood是一种非常危险而常见的DoS攻击方式.到目前为止,能够有效防范SYN Flood攻击的手段并不多,而SYN Cookie就是其中最 ...

  2. Linux 防止cc syn ack 攻击

    三次握手的过程及相关概念 TCP/IP协议使用三次握手来建立连接,过程如下: 1.第一次握手,客户端发送数据包syn到服务器,并进入SYN_SEND状态,等待回复 2.第二次握手,服务器发送数据报sy ...

  3. Linux tcp防止syn 攻击,Linux运维知识之linux 防御SYN攻击

    本文主要向大家介绍了Linux运维知识之linux 防御SYN攻击,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 一.默认syn配置 sysctl -a | grep _syn ...

  4. linux回包不是来包的ip,Linux 只能收到 SYN 包 不能回包

    Linux 只能收到 SYN 包 不能回包 问题 如果用户发现云主机不能登录,例如无法远程 22 端口或其他端口,但是更换网络环境正常,服务端抓包发现客户端发包只有 SYN,没有回包,可以执行 net ...

  5. linux下防DDOS攻击软件及使用方法详解

    互联网如同现实社会一样充满钩心斗角,网站被DDOS也成为站长最头疼的事.在没有硬防的情况下,寻找软件代替是最直接的方法,比如用 iptables,但是iptables不能在自动屏蔽,只能手动屏蔽. 一 ...

  6. 浅谈iptables防SYN Flood攻击和CC攻击

    何为syn flood攻击: SYN Flood是一种广为人知的DoS(拒绝服务攻击)是DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻 ...

  7. linux服务器怎么防,Linux服务器防攻击的各种方案

    Linux服务器防袭击的各类计划 信任入席站长都对服务器袭击很敏感,谁都经验过,这里就给大伙分享一下Linux服务器防袭击的各类计划. 1.使用防火墙 1.Linux自带防火墙 Centos6下com ...

  8. 支付宝技术专家李战斌:安防视频行为分析系统的技术演进及应用场景 | 2018FMI人工智能与大数据高峰论坛(深圳站)

    10月28日FMI 2018人工智能与大数据高峰论坛深圳场圆满落幕,支付宝技术专家李战斌以安防视频行为分析系统的技术演进及应用场景为主题进行了精彩的分享. 支付宝技术专家李战斌 以下是李战斌的演讲内容 ...

  9. Linux系统防CC攻击自动拉黑IP增强版Shell脚本

    Linux系统防CC攻击自动拉黑IP增强版Shell脚本 文章目录 一.Shell代码 二.执行脚本 三.效果测试 四.附加说明 前天没事写了一个防CC攻击的Shell脚本,没想到这么快就要用上了,原 ...

最新文章

  1. 必须要调整心态,积极起来,不能再偷懒
  2. C语言从未排序的链接列表中删除重复项的算法(附完整源码)
  3. [转+个人整理]从D触发器的逻辑结构说明建立时间和保持时间
  4. android手机活跃度,微信Android机型活跃度曝光,这个结果你满意吗?
  5. nlinfit函数 matlab,Matlab中拟合函数nlinfit和lsqcurvefit的问题
  6. android音量键广播,音量控制键控制的音频流(setVolumeControlStream)描述
  7. 看看如何有效地在你的设计工作中使用霓虹色?
  8. String:字符串常量池
  9. JetBrains系列WebStorm等中文输入法无法跟随光标的问题的解决办法
  10. 运维管理_运维BIM软件-EcoDomus运维管理系统
  11. iis p访问php密码,访问IIS网站需要输入用户名密码(非匿名登录)问题汇总
  12. Java-多线程第三篇3种创建的线程方式、线程的生命周期、线程控制、线程同步、线程通信...
  13. 汇编软件DOSBox使用教程
  14. 【VirtualAPP 双开系列06】启动加载第三方 APP 过程
  15. 简单BP神经网络分类手写数字识别0-9
  16. [分享]来自CSDN的精华网址
  17. 高定价预计将降低iPhone XS的需求
  18. 2022苹果春季发布会带来新款iPhoneSE价格预计2500左右
  19. HR最不喜欢的六类求职者
  20. 阿里云天池Python训练营任务一

热门文章

  1. kotlin学习笔记——重载操作符
  2. python学习day06--01
  3. poj 2769 感觉♂良好 (单调栈)
  4. 随笔② Java中的关键字 --- final关键字
  5. Yii2 的 redis 应用
  6. 一步步学习操作系统(1)——参照ucos,在STM32上实现一个简单的多任务(“啰里啰嗦版”)...
  7. 【剑指offer】数字在排序数组中出现的次数
  8. learning python学习小记(一)
  9. Silverlight 3D开源项目,取材于CodePlex和微软的开源项目,主要是更新至Silverlight RTM版...
  10. android中使用startActivityForResult回传数据