根据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请求是200s Camel Jetty中的continuationTimeout是否可用于缓解慢速HTTP Dos攻击?
答案 0 :(得分:0)
我想我找到了正确的配置。它不是 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 的说明:
https://wiki.eclipse.org/Jetty/Howto/Configure_Connectors
答案 1 :(得分:0)
我不知道您使用的是哪个版本的Jetty。但考虑到this documentation,似乎你在maxIdleTime,lowResourcesConnections和lowResourcesMaxIdleTime之间使用了混合。
根据文档,maxIdleTime将用于正常连接,当达到lowResourcesConnections时,jetty将切换为使用lowResourcesMaxIdleTime上的值hold。
请查看this link以获取更多信息。
我还没有测试过自己。但我很快就会这样做。