我正在寻找一种解决方案,以防止 Jetty 服务器被 DDoS 或类似的攻击。目前 servlet 将为每个传入连接打开一个新线程,因此 1 个 mio 传入连接将打开 1 个 mio 线程并且 Jetty 将爆炸。
避免这个线程的最佳方法是什么?我考虑在客户端和服务器之间放置一个 Apache,因为网络服务器有能力将来自一个 ip 的传入连接限制为例如 5 个连接/秒。
你觉得我的想法怎么样?
亲切的问候,
亨德里克
我正在寻找一种解决方案,以防止 Jetty 服务器被 DDoS 或类似的攻击。目前 servlet 将为每个传入连接打开一个新线程,因此 1 个 mio 传入连接将打开 1 个 mio 线程并且 Jetty 将爆炸。
避免这个线程的最佳方法是什么?我考虑在客户端和服务器之间放置一个 Apache,因为网络服务器有能力将来自一个 ip 的传入连接限制为例如 5 个连接/秒。
你觉得我的想法怎么样?
亲切的问候,
亨德里克
Jetty 附带了一个服务质量过滤器,它应该可以满足您的需求。请参阅http://wiki.eclipse.org/Jetty/Feature/Quality_of_Service_Filter
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进行自定义。
使用 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 保护与应用程序分离,并且效率更高,因为在访问码头之前会丢弃额外的包。