Apache 웹 서버에 대한 “slowloris”DOS 공격을 가장 잘 방어하는 방법은 무엇입니까? 역 프록시

최근에는 “slowloris”라는 스크립트가 주목을 받고 있습니다. slowloris의 기본 개념은 새로운 공격이 아니지만 최근 주목을 받아 일부 Apache 웹 사이트에 대한 공격이 약간 증가했습니다.

현재로서는 이에 대한 100 % 방어는 보이지 않습니다.

우리가 지금까지 결정한 가장 좋은 솔루션은 MaxClients를 늘리는 것입니다.

물론 이것은 침입자의 컴퓨터에 대한 요구 사항을 증가시키는 것 이상을 수행하지 않으며 실제로 서버를 100 % 보호하지 않습니다.

다른 보고서에 따르면 Apache 서버 앞에 역 프록시 (예 : Perlbal)를 사용하면 공격을 방지 할 수 있습니다.

mod_evasive를 사용하여 한 호스트의 연결 수를 제한하고 mod_security를 ​​사용하여 slowloris가 발행 한 것처럼 보이는 요청을 거부하는 것이 지금까지 최선의 방어 인 것 같습니다.

ServerFault의 모든 사람이 이와 같은 공격을 겪고 있습니까? 그렇다면 방어 / 방어를 위해 어떤 조치를 취했습니까?

참고 :이 질문은 Windows IIS 서버가 영향을받지 않는다는 것을 이해하기 때문에 Apache 서버에 관한 것입니다.



답변

한여름 중순 (6 월 23 일)에 시골에서 맥주를 ​​마셔야 할 공격이있었습니다.

나는 Apache를 Varnish 뒤에 두었습니다 . 이는 slowloris로부터 보호 될뿐만 아니라 웹 요청을 상당히 가속화했습니다.

또한 iptables나를 도왔습니다.

iptables -I INPUT -p tcp --dport 80 \
         -m connlimit --connlimit-above 20 --connlimit-mask 40 -j DROP

이 규칙은 포트 80에 대한 하나의 호스트를 20 개의 연결로 제한합니다. 이는 악의적이지 않은 사용자에게는 영향을 미치지 않지만 한 호스트에서 slowloris를 사용할 수 없게 만듭니다.


답변

그렇게 간단한 mod_antiloris .


답변

모든 아파치 모듈이 스레드로부터 안전하다면 이벤트 또는 작업자 MPM으로 전환하여 slowloris를 물리 칠 수 있습니다. 심판 : 여기


답변

지금은 서버에서 IP 당 최대 동시 연결을 제한하는 더 이상 할 일이없는 것 같습니다.


답변

시도 할 수있는 사용자 패치가 있습니다. 서버의 부하에 따라 시간 초과를 수정하지만 상태를 고려할 때 심각한 테스트없이 프로덕션 시스템에서 시간 초과를 사용하지 않을 수 있습니다. 봐 여기.


답변

iptable 기반 방화벽은 1ip의 여러 연결로부터 사용자를 보호해야합니다.


답변

이것이 다른 사람에게 도움이된다면 다음 구성으로 Apache 2.2.15 이상 에서이 문제를 극복 할 수 있습니다.

LoadModule reqtimeout_module modules/mod_reqtimeout.so
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500

자세한 정보는 여기 : https://httpd.apache.org/docs/2.2/mod/mod_reqtimeout.html