Camel Jetty 中的 continuationTimeout 是否可以用来缓解慢速 HTTP Dos 攻击?

Does the continuationTimeout in Camel Jetty can be used to mitigate Slow HTTP Dos Attacks?

根据http://camel.apache.org/jetty.html中continuationTimeout的描述, 我尝试配置端点码头:http://www.example.com:4000/xxxHttpService/?continuationTimeout=30000
减轻慢速 HTTP DoS 攻击。

我预计如果客户端无法在 30 秒内发送 HTTP 请求 header,Camel Jetty 将与客户端断开连接。但是当我使用下面的 python 代码进行测试时,continuationTimeout 似乎无法缓解慢速 HTTP Dos 攻击。

CRLF = "\r\n"
xoh_hostname = '127.0.0.1'
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.connect((xoh_hostname, 4000))
s.send("POST /xxxHttpService/ HTTP/1.1%sCache-Control: no-store%s" % (CRLF, CRLF))
starttime = time.time()
data = (s.recv(4096))
endtime = time.time()
print "The seconds Camel Jetty wait for a complete HTTP request header are %s" % str(endtime-starttime)
s.shutdown(1)
s.close()
print 'Received data: ', repr(data)

结果是这样的:

Camel Jetty 等待一个完整的 HTTP 请求的秒数 header 是 200.741626024
收到的数据:''

看来 Camel Jetty 用于等待完整 HTTP 请求的默认超时时间是 200 秒。
Camel Jetty 中的 continuationTimeout 是否可以用来缓解慢速 HTTP Dos 攻击?

我想我找到了正确的配置。它不是 continuationTimeout,但 maxIdleTime 可用于缓解慢速 HTTP DoS 攻击。

我在代码中设置如下:

JettyHttpComponent jettyComponent = getContext().getComponent("jetty", JettyHttpComponent.class);
Map<String, Object> socketConnectorProperties = new HashMap<String, Object>();
socketConnectorProperties.put("maxIdleTime", "50000"); //set timeout is 50s 
jettyComponent.setSocketConnectorProperties(socketConnectorProperties);

然后如下测试,果然通过了测试。

[root@clab295node10 ~]# python mytest.py
The seconds Camel Jetty wait for a complete HTTP request header are 50.6753239632

您可以在下面找到 maxIdleTime 的说明 link:
https://wiki.eclipse.org/Jetty/Howto/Configure_Connectors

我不知道您使用的是哪个版本的 Jetty。但考虑到 this documentation,您似乎混合使用了 maxIdleTime、lowResourcesConnections 和 lowResourcesMaxIdleTime。

根据文档,maxIdleTime 将用于正常连接,当达到 lowResourcesConnections 时,jetty 将切换为使用保持在 lowResourcesMaxIdleTime 上的值。

查看 this link 了解更多信息。

我还没有测试过自己。不过我很快就会做的。