Camel Jetty 中的 continuationTimeout 是不是可用于缓解慢速 HTTP Dos 攻击?

Posted

技术标签:

【中文标题】Camel Jetty 中的 continuationTimeout 是不是可用于缓解慢速 HTTP Dos 攻击?【英文标题】:Does the continuationTimeout in Camel Jetty can be used to mitigate Slow HTTP Dos Attacks?Camel Jetty 中的 continuationTimeout 是否可用于缓解慢速 HTTP Dos 攻击? 【发布时间】:2015-03-03 20:56:45 【问题描述】:

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

我预计如果客户端无法在 30 秒内发送 HTTP 请求标头,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 请求标头的秒数为 200.741626024 收到的数据:''

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

【问题讨论】:

【参考方案1】:

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

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

查看this link 了解更多信息。

我还没有测试过自己。但我很快就会这样做。

【讨论】:

【参考方案2】:

我想我找到了正确的配置。它不是 continuationTimeout,而是 ma​​xIdleTime 可用于缓解慢速 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

您可以在以下链接中找到 ma​​xIdleTime 的说明:https://wiki.eclipse.org/Jetty/Howto/Configure_Connectors

【讨论】:

以上是关于Camel Jetty 中的 continuationTimeout 是不是可用于缓解慢速 HTTP Dos 攻击?的主要内容,如果未能解决你的问题,请参考以下文章

Apache Camel作为HTTP代理:如何使用参数路由到URL

Apache Camel http 到 http 路由(有可能吗?)

HTTP 403禁止-Auth JASS Spring Camel

Jetty服务器关闭流生成500错误

docker jetty10 启动 war

Apache Camel 2.18中的IN子句