预防SYN攻击的配置

什么是SYN攻击?

攻击者短时间伪造不同IP地址的SYN报文,快速占满backlog队列,使服务器不能为正常用户服务,SYN攻击是所有黑客攻击事件中最常见又最容易被利用的一种攻击手法,由来已久,破坏威力巨大。SYN攻击属于DOS攻击的一种, 它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源

TCP连接握手示意图

 

SYN_SENT 状态

• net.ipv4.tcp_syn_retries = 6

-主动建立连接时,发SYN的重试次数

• net.ipv4.ip_local_port_range = 32768 60999

-建立连接时本地口可用范围

SYN_RCVD 状态

• net.ipv4.tcp_max_syn_backlog

-SYN_RCVD状态连接的最大数

• net.ipv4.tcp_synack_retries

-被动建立连接时,发SYN/ACK的重试次数

服务端处理三次握手

如何应对SYN攻击?

SYN攻击的原理就是向服务器发送SYN数据包,并伪造源IP地址。服务器在收到SYN数据包时,会将连接加入backlog队列,并向源IP发送SYN-ACK数据包,并等待ACK数据包,以完成三次握手建立连接。 由于源IP地址是伪造的不存在主机IP,所以服务器无法收到ACK数据包,并会不断重发,同时backlog队列被不断被攻击的SYN连接占满,导致无法处理正常的连接小号cpu资源。

1、减少SYN-ACK数据包的重发次数(默认是5次)

sysctl -w net.ipv4.tcp_synack_retries=3

sysctl -w net.ipv4.tcp_syn_retries=3

2、增大backlog队列(默认是1024

• net.core.netdev_max_backlog

-接收自网卡、但未被内核协议栈处理的报文队列长度

• net.ipv4.tcp_max_syn_backlog

-SYN_RCVD状态连接的最大个数

sysctl -w net.ipv4.tcp_max_syn_backlog=2048

3、超出处理能力时,对新来的SYN丢弃连接

• net.ipv4.tcp_abort_on_overflow

sysctl -w net.ipv4.tcp_abort_on_overflow=1

4、生成验证cookie,重连

• net.ipv4.tcp_syncookies = 1

 sysctl -w net.ipv4.tcp_syncookies=1

-SYN队列满后,新的SYN不进A队列,计算出cookie再以SYN+ACK中的序列号返回客户端,正常客户端发报文时,服务端根据报文中携带的cookie重新恢复连接

注意:synccookies是妥协版的TCP协议,失去了很多功能,所以先应优化服务端应用程序的负载能力,加大应用程序 backlog

 

Tcp Fast Open

开启TFO,加速tcp处理

net.ipv4.tcp_fastopen :系统开启TFO功能

• 0 :关闭

• 1 :作为客户端时可以使用TFO

• 2 :作为服务器时可以使用TFO

• 3 :无论作为客户端还是服务器,都可以使用TFO

sysctl -w net.ipv4.tcp_fastopen=3

禁用Nagle算法?

Nagle算法

-避免一个连接上同时存在大量小报文 . 最多只存在要给小报文 . 合并多个小报文一起发送

-提高带宽利用率

吞吐量优先:启用Nagle算法,tcp_nodelay off

低时延优先:禁用Nagle算法,tcp_nodelay on

示例:禁用跟启用Nagle算法示意

Syntax: tcp_nodelay on | off;

Default: tcp_nodelay on;

Context: http, server, location

Gzip指指令令

nginxgzip的主要作用就是用来减轻服务器的带宽问题,经过gzip压缩后的页面大小可以变为原来的30%甚至更小,这样用户浏览页面时的速度会快很多。gzip的压缩页面需要浏览器和服务器双方都支持,实际上就是服务器端压缩,传到浏览器后浏览器解压缩并解析。目前的大多数浏览器都支持解析gzip压缩过的页面。

参数说明:

语法:gzip on | off;

默认值:gzip off;

作用域:http, server, location, if in location


语法:gzip_min_length length;

默认值:gzip_min_length 20;

作用域:http, server, location

说明:

设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。因为过小的文件内容压缩之后效果不明显,甚至会比不压缩时更大,所以一般建议长度不小于1000或1k。

响应头响应浏览器使用gzip解压

gzip_buffers

语法: gzip_buffers number size;

默认值: gzip_buffers 32 4k|16 8k;

作用域: http, server, location

说明:

设置response响应的缓冲区大小。32 4k代表以4k为单位将响应数据以4k的32倍(128k)的大小申请内存。如果没有设置,缓冲区的大小默认为整个响应页面的大小。

gzip_comp_level

语法:gzip_comp_level level;

默认值:gzip_comp_level 1;

作用域:http, server, location

说明:

设置gzip的压缩级别,可接受的范围是从1到9,数字越大压缩率越高,但更消耗CPU,一般设置6即可。

gzip_types

语法:gzip_types mime-type ...;

默认值:gzip_types text/html;

作用域:http, server, location

说明:

指定哪些类型的相应才启用gzip压缩,多个用空格分隔。通配符”*”可以匹配任意类型。

不管是否指定”text/html”类型,该类型的响应总是启用压缩。

一般js、css等文本文件都启用压缩,如application/x-javascript text/css application/xml 等。

具体的文件类型对应的mimi-type可以参考conf/mime.types文件。

gzip_http_version

语法:gzip_http_version 1.0 | 1.1;

默认值:gzip_http_version 1.1;

作用域:http, server, location

说明:

设置gzip压缩所需要的请求的最小HTTP版本,低于该版本不使用gzip压缩。一般不用修改,默认即可。

gzip_disable

gzip_disable “MSIE [1-6]\.”

语法:gzip_disable regex ...;

默认值:—

作用域:http, server, location

说明:

这个指令是在0.6.23版本增加的。

如果请求的”User-Agent”头信息能被指定的正则表达式匹配,则对响应禁用gzip压缩功能。主要是为了兼容不支持gzip压缩的浏览器,比如IE6,不过IE6早就废弃了

浏览器和服务器进行gzip压缩的请求和处理返回过程

整个请求过程来看,开启 gzip 和不开启 gzip 功能,其 http 的请求和返回过程是一致的,不同的是参数。

当开启HTTPgzip 功能时,客户端发出 http 请求时,会通过 headers 中的 Accept-Encoding 属性告诉服务器我支持 gzip 解压,解压格式(算法)

deflate , sdch 为:```Accept-Encoding:gzip,deflate,sdch`

注意,不是request说自己支持解压,Nginx返回response数据的时候就一定会压缩。这还要看本次Nginx返回数据的格式是什么,如果返回数据的原始数据格式,和设置的gzip_types相符合,这时Nginx才会进行压缩。

Nginx 返回 response headers 是,如果数据被压缩了,就会在 Content-Encoding 属性中标示 gzip ,表示接下来返回的response

content 是经过压缩的;并且在 Content-Type 属性中表示数据的原始格式。 最后返回经过压缩的 response content 给客户端,客户端再进行解压。这里注意一下,在客户端发送的 headers 里面,有一个 deflate,sdch 。这是两种压缩算法

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值