Slow http 拒绝服务原理:
请求以很低的速度发送post请求数据包,当客户端连接了许多以后,占用了所有webserver可用连接,从而导致服务夯死。http慢速攻击是利用http合法机制,在建立连接后,尽量长时间保持连接,不释放,达到对HTTP服务攻击,攻击者发送POST请求,自行构造报文向服务器提交数据,将报文长度设置一个很大的值,且在随后每次发送中,每次只发送一个很小的报文,这样导致服务器一直等待数据,连接始终一直被占用。
如果攻击者使用多线程或傀儡机子去做同样操作,服务器WEB容器很快就被占满TCP连接从而不再接受新请求。
测试工具:工具链接
解决方案:
1:配置nginx,在上篇博客已配置
2:配置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);
}
}
如果配置不生效,或者报错,把项目中配置文件*.yml中server.port......信息删掉,在上面这段代码中配置即可。
参考资料:https://www.cnblogs.com/softidea/p/5751596.html