我正在寻找一种解决方案来防止JetDo服务器被DDoS或类似设备取下。目前servlet将为每个进入连接打开一个新线程,因此1 mio接入连接将打开1 mio线程,Jetty将爆炸。
避免这个帖子的最佳方法是什么?我考虑过在客户端和服务器之间放置一个Apache,因为网络服务器有能力限制从一个ip到例如ip的连接。 5连接/秒。
您如何看待我的想法?
亲切的问候,
亨德里克
答案 0 :(得分:2)
Jetty附带了一个服务质量过滤器,可以做你想要的。 见http://wiki.eclipse.org/Jetty/Feature/Quality_of_Service_Filter
答案 1 :(得分:1)
DosFilter可用于提供DDoS保护。
引用维基的描述,
拒绝服务(DoS)过滤器限制了对请求的暴露 洪水,无论是恶意的,还是由于客户端配置错误造成的。 DoS过滤器跟踪连接的请求数 每秒。如果请求超出限制,Jetty拒绝,延迟, 或限制请求,并发送警告消息。
要启用,您必须在webapp的web.xml或jetty-web.xml
中的配置中包含以下内容<filter>
<filter-name>DoSFilter</filter-name>
<filter-class>org.eclipse.jetty.servlets.DoSFilter</filter-class>
<init-param>
<param-name>maxRequestsPerSec</param-name>
<param-value>30</param-value>
</init-param>
</filter>
检查wiki以进行自定义。
答案 2 :(得分:0)
使用org.eclipse.jetty.servlets.QoSFilter提供新连接的想法很好,但我宁愿使用基于iptables的典型反ddos配置(如本文所述:http://blog.bodhizazen.net/linux/prevent-dos-with-iptables/)。
sudo iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 50/minute --limit-burst 200 -j ACCEPT
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit 50/second --limit-burst 50 -j ACCEPT
在这种情况下,ddos保护与app分离,并且更高效,因为在访问jetty之前额外的包将丢失。