Mitigando uma inundação http? [duplicado]

2

Eu tenho um proxy de proteção de ddos para lidar com inundações SYN e coisas do tipo. Mas inundações http ainda estão passando. Por alguma razão, seu proxy de ddos não está bloqueando nenhuma das inundações. Portanto, há cerca de 500 ips conectados à caixa quantas vezes for possível e no máximo em cerca de 20k conexões. Isso está causando php para gerar processos 1k sobrecarregando a caixa. Como posso atenuar essa inundação http? Eu pensei que a criação de um arquivo htaccess que exigisse um cookie para acessar o site funcionaria, mas a reescrita parece estar invocando o php, o que faz com que a caixa seja sobrecarregada.

Como posso atenuar isso?

    
por Will 21.03.2011 / 15:58

4 respostas

2

Você está no caminho certo com a abordagem baseada em cookies, mas a verificação inicial precisa ser feita usando um processo muito mais barato que um thread Apache / PHP. Eu sugiro um proxy nginx na frente do seu host que obriga a redirecionar e definir um cookie. Do que apenas as solicitações com o cookie apropriado são permitidas até mesmo para o seu host PHP.

E enquanto você estiver configurando um proxy, esse software relativamente novo de detecção de bot é bastante impressionante:

link

Também sugiro que a apresentação de DDoS seja vinculada a essa página:

link

Ele cobre os conceitos anti-DDoS em geral e descreve por que eles escreveram o Roboo.

    
por 21.03.2011 / 16:35
3

Em uma situação como a sua, a melhor coisa a fazer é estabelecer uma taxa e / ou limite de conexões IP com seu servidor (no seu proxy de proteção DDoS - se vale a pena qualquer coisa que seja capaz de fazer isso - ou no seu servidor usando qualquer software de firewall disponível (pf, iptables, etc.)).

Seu objetivo é interromper os ataques antes que eles atinjam seu servidor usando um firewall separado ou seu proxy de proteção DDoS (computacionalmente gratuito) ou o mais cedo possível - como durante o processo de handshake TCP - em seu servidor (computacionalmente barato) tentando lidar com isso no servidor web / camada de aplicação (computacionalmente caro: você tinha que configurar toda a conexão TCP e começar a falar com o servidor web antes de perceber que não quer responder a esta requisição em particular).

    
por 21.03.2011 / 16:15
0

Eu adicionaria à resposta de Voretak que você deveria tentar o alvo "LIMIT" no iptables.

Extraído de: link

Exemplo: limite de conexões SSH por IP / host Permitir apenas 3 conexões ssg por host do cliente:

/sbin/iptables  -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
# save the changes see iptables-save man page, the following is redhat and friends
# specific command
service iptables save
    
por 05.08.2013 / 17:20
0

Conseguimos atenuar esse ataque com uma regra de htaccess

RewriteEngine On

SetEnvIf User-Agent ".*MSIE 6.0; Windows NT 5.1; SV1.*" dontlog
RewriteCond %{HTTP_USER_AGENT} ".*MSIE 6.0; Windows NT 5.1; SV1.$" [OR]
RewriteCond %{HTTP_USER_AGENT} ".*MSIE 6.0; Windows NT 5.1;1813.$" [OR]
RewriteCond %{HTTP_USER_AGENT} "^(?:User-Agent: )?Mozilla/4.0 \(compatible; MSIE 6.0; Windows NT 5.1;(?: SV1|1813)\)$" [OR] 
RewriteCond %{HTTP_USER_AGENT} "MSIE 6.0; Windows NT 5.1; SV1"
RewriteRule ^(.*)$ http://127.0.0.1/$1 [R=302,L]

e ou iptables

iptables -I INPUT 1 -p tcp --dport 80 -m string --string "MSIE 6.0; Windows NT 5.1; SV1" --algo bm -j DROP

você pode querer adicionar várias portas ao iptables

    
por 05.08.2013 / 15:47