2011-03-17 4 views
0

나는 방호벽 (Jetty) 서버가 DDoS 또는 유사한 것에 의해 쓰러지지 않도록하는 해결책을 찾고있다. 현재 서블릿은 각 연결에 대해 새 스레드를 열어서 1 개의 mio 연결은 1 개의 mio 스레드를 열어서 Jetty가 폭발 할 것입니다.부두 서버의 홍수 방지?

이 스레드를 피하는 가장 좋은 방법은 무엇입니까? 나는 클라이언트와 서버 사이에 아파치를 두는 것에 대해 생각했다. 웹 서버가 하나의 IP에서 다른 서버로 연결을 제한하는 능력을 가지고 있기 때문이다. 5 연결/초.

내 아이디어에 대해 어떻게 생각하십니까?

친절 감사를

헨드릭

당신이 원하는 일을해야 서비스 필터의 품질과

답변

2
+0

이렇게하면 incomming 요청 당 새 스레드의 문제가 해결되지 않습니다. 원하지 않는 연결을위한 스레드를 생성하지 않고 솔루션을 찾고 있습니다. – Hendrik

+0

필터가 작동하는 방식을 이해하지 못했거나 Jetty의 스레딩 모델을 이해하지 못하는 것 같습니다. (1) Jetty가 제대로 구성되어 있으면 각 연결에 대해 새 스레드가 열리지 않으며 풀에서 스레드를 다시 사용하고 풀이 한계에 도달하면 새 연결을 거부합니다. (2) 필터는 연결되어있는 동안 스레드를 사용하지 않도록 연결을 유지합니다. – Tim

+0

QoS 필터에는 최소한 Java 1.5가 필요하지만 Jetty instace는 Java 1.4 환경에서 실행됩니다. 그래서 처음 생각은 무엇입니까? – Hendrik

1

DosFilter은 DDoS 보호를 제공하는 데 사용할 수 있습니다.

서비스의 거부 (DoS) 필터 한계를 노출

악성 여부, 또는 잘못 클라이언트의 결과로, 홍수를 요청, 위키에서 설명을 인용합니다. DoS 필터는 연결의 요청 수를 초당 개로 추적합니다. 요청이 제한을 초과하면 Jetty는 을 거부하거나 지연하며 요청을 조절하고 경고 메시지를 보냅니다.

당신이 웹 애플리케이션의 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 ​​보호는 응용 프로그램과 구분되어 있으므로 부두에 액세스하기 전에 추가 패키지가 삭제되므로 생산성이 향상됩니다.