2011-03-17 153 views
0

我正在尋找解決方案來防止Jetty服務器被DDoS或類似服務器拒絕。目前,servlet將爲每個輸入連接打開一個新線程,因此1 mio輸入連接將打開1 mio線程,並且Jetty將爆炸。防洪碼頭服務器?

避免此線程的最佳方法是什麼?我想過在客戶端和服務器之間放置一個Apache,因爲網絡服務器能夠限制從一個IP到例如5個連接/秒。

您對我的想法有什麼看法?

親切的問候,

亨德里克

回答

2

碼頭船舶與服務過濾器的質量應該做你想做的。 請參閱http://wiki.eclipse.org/Jetty/Feature/Quality_of_Service_Filter

+0

這並不能解決每個傳入請求的新線程問題。我正在尋找一種解決方案,而不會爲不需要的連接生成線程。 – Hendrik 2011-03-18 12:41:22

+0

這聽起來像是你不明白過濾器是如何工作的,或者你不瞭解Jetty的線程模型。 (1)如果配置正確,Jetty將不會爲每個連接打開一個新線程,它將重新使用池中的線程,並在該池達到其限制時拒絕新連接。 (2)該過濾器停放連接,以便它們在停放時不使用線程。 – Tim 2011-03-20 07:34:17

+0

QoS過濾器至少需要Java 1.5,但Jetty instace運行在Java 1.4環境中...... 那麼,我最初的想法是什麼? – Hendrik 2011-03-21 14:04:04

1

DosFilter可用於提供DDoS保護。

要從維基引述的描述中,

拒絕服務(DoS)的過濾器限制暴露於請求 洪水,是否是惡意的,或作爲客戶端配置錯誤的結果。 DoS過濾器記錄每秒來自連接 的請求數。如果請求超出限制,Jetty拒絕,延遲,或者限制請求,併發送警告消息。

爲了使您必須包括對Web應用中的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定製的配置如下。

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防護從應用程序分離,更富有成效,因爲額外的軟件包將訪問碼頭前下降。