慢速DOS攻击漏洞
作者:互联网
漏洞描述:
利用的HTTP POST:POST的时候,指定一个非常大的content-length,然后以很低的速度发包,比如10-100s发一个字节,hold住这个连接不断开。这样当客户端连接多了后,占用住了webserver的所有可用连接,从而导致DOS。
修复方法:
对web服务器的http头部传输的最大许可时间进行限制,修改成最大许可时间为8秒。
tomcat
tomcat配置文件conf/server.xml中,
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" /> //把connectionTimeout的20000改成8000即可。
springboot
配置springboot内置tomcat:
package com.using.judge.web.client.config;
import org.apache.catalina.connector.Connector;
import org.apache.coyote.http11.Http11NioProtocol;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
public class WebServerConfiguration {
@Bean
public EmbeddedServletContainerFactory createEmbeddedServletContainerFactory()
{
TomcatEmbeddedServletContainerFactory tomcatFactory = new TomcatEmbeddedServletContainerFactory();
//tomcatFactory.setPort(8082);
tomcatFactory.addConnectorCustomizers(new MyTomcatConnectorCustomizer());
return tomcatFactory;
}
}
class MyTomcatConnectorCustomizer implements TomcatConnectorCustomizer
{
public void customize(Connector connector)
{
Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
//设置最大连接数
protocol.setMaxConnections(2000);
//设置最大线程数
protocol.setMaxThreads(2000);
protocol.setConnectionTimeout(30000);
}
}
nginx
关闭慢速连接
您可以关闭正在写入数据的连接,这可能意味着尝试尽可能保持连接打开(从而降低服务器接受新连接的能力)。Slowloris是这种类型的攻击的一个例子。该client_body_timeout指令控制NGINX在客户机体写入之间等待的时间,该client_header_timeout 指令控制NGINX在写入客户机标题之间等待的时间。这两个指令的默认值是60秒。本示例将NGINX配置为在来自客户端的写入或头文件之间等待不超过5秒钟:
server {
client_body_timeout 5s;
client_header_timeout 5s;
# ...
}
标签:protocol,tomcat,org,springframework,漏洞,client,import,DOS,慢速 来源: https://blog.csdn.net/jiangshuanshuan/article/details/101447689