DDoS (ataques distribuídos de negação de serviço) geralmente são bloqueados no nível do servidor, certo?
Existe uma maneira de bloqueá-lo em um nível de PHP, ou pelo menos reduzi-lo?
Se não, qual é a maneira mais rápida e comum de impedir ataques DDoS?
php
security
ddos
denial-of-service
coderama
fonte
fonte
Respostas:
DDOS é uma família de ataques que sobrecarrega os principais sistemas do datacenter, incluindo:
Antes de começar a construir sua defesa DDOS, considere qual é o valor em risco de pior caso. Para um serviço não crítico e gratuito para uma pequena comunidade, o valor total em risco pode ser amendoim. Para um sistema pago, voltado para o público e de missão crítica para um negócio estabelecido de bilhões de dólares, o valor pode ser o valor da empresa. Neste último caso, você não deve usar StackExchange :) De qualquer forma, para se defender contra DDOS, você precisa de uma abordagem de defesa em profundidade:
Mantenha todos os seus sistemas e pacotes de software atualizados com os patches de segurança mais recentes - e todos eles:
Certifique-se de ter um bom firewall ou dispositivo de segurança configurado e regularmente revisado por um especialista em segurança qualificado . Regras fortes no firewall são uma boa defesa contra muitos ataques simples. Também é útil ser capaz de gerenciar a largura de banda disponível para cada serviço aberto.
Tenha boas ferramentas de monitoramento de rede - isso pode ajudá-lo a entender:
O ataque pode ser simplesmente o uso pesado de serviços de sites legítimos (por exemplo, acessando URIs 'legais' executando consultas ou inserindo / atualizando / excluindo dados) - milhares ou milhões de solicitações provenientes de dezenas a milhões de endereços IP diferentes trarão um site para seu joelhos. Como alternativa, alguns serviços podem ser tão caros para executar que apenas algumas solicitações causam um DOS - pense em um relatório realmente caro. Portanto, você precisa de um bom monitoramento no nível do aplicativo do que está acontecendo:
Restrições e limites sensatos em sua aplicação . Por exemplo, você pode:
Por último, mas não menos importante, escreva um documento do Plano de Resposta do DOS e faça com que ele seja revisado internamente por todas as partes relevantes: Negócios, Gerenciamento, a equipe de desenvolvimento de SW, a equipe de TI e um especialista em segurança. O processo de redação do documento fará com que você e sua equipe reflitam sobre os problemas e os ajudem a se preparar caso o pior aconteça às 3 da manhã do seu dia de folga. O documento deve abranger (entre outras coisas):
Portanto, preâmbulo à parte, aqui estão algumas respostas específicas:
Na verdade, não - a maioria dos piores ataques DDOS são de baixo nível (no nível do pacote IP) e são tratados por regras de roteamento, firewalls e dispositivos de segurança desenvolvidos para lidar com ataques DDOS.
Alguns ataques DDOS são direcionados ao próprio aplicativo, enviando URIs e solicitações HTTP válidas. Quando a taxa de solicitações aumenta, seu (s) servidor (es) começam a ter problemas e você terá uma interrupção do SLA. Nesse caso, existem coisas que você pode fazer no nível do PHP:
Monitoramento no nível do aplicativo: certifique-se de que cada solicitação de registro de serviço / página de uma forma que você possa ver o que está acontecendo (para que você possa tomar medidas para mitigar o ataque). Algumas ideias:
Tenha um formato de registro que você possa carregar facilmente em uma ferramenta de registro (ou Excel ou similar) e analisar com ferramentas de linha de comando (grep, sed, awk). Lembre-se de que um DDOS gerará milhões de linhas de registro. Você provavelmente precisará fatiar e cortar seus logs (especialmente com relação ao URI, tempo, IP e usuário) para descobrir o que está acontecendo e precisa gerar dados como:
Registre o endereço IP de cada solicitação. NÃO reverta o DNS - ironicamente, o custo de fazer isso torna um DDOS mais fácil para os invasores
Limites de taxa razoáveis: você pode implementar limites de quantas solicitações um determinado IP ou usuário pode fazer em um determinado período de tempo. Um cliente legítimo poderia fazer mais de 10 solicitações por segundo? Os usuários anônimos podem acessar relatórios caros?
CAPTCHA para acesso anônimo: implemente um CAPTCHA para todas as solicitações anônimas para verificar se o usuário é uma pessoa, não um bot DDOS.
O mais rápido provavelmente é ceder à chantagem, embora isso possa não ser desejável.
Caso contrário, a primeira coisa a fazer é entrar em contato com seu provedor de hospedagem e / ou CDN e trabalhar com eles (se eles ainda não o contataram perguntando o que diabos está acontecendo ...). Quando ocorre um DDOS, provavelmente afetará colateralmente outros clientes do provedor de hospedagem, e o provedor pode estar sob pressão considerável para encerrar seu site simplesmente para proteger seus recursos. Esteja preparado para compartilhar seus logs (toda e qualquer informação) com o provedor; esses logs, combinados com seus monitores de rede, podem, juntos, fornecer informações suficientes para bloquear / mitigar o ataque.
Se você está esperando um DDOS, é uma boa ideia qualificar seu provedor de hospedagem no nível de proteção que ele pode oferecer. Eles devem ter experiência em DDOS e ferramentas para mitigá-lo - compreender suas ferramentas, processos e procedimentos de escalonamento. Também pergunte sobre o suporte que o provedor de hospedagem tem de seus provedores upstream. Esses serviços podem significar um custo inicial ou mensal, mas trate isso como uma apólice de seguro.
Enquanto estiver sob ataque, você precisará pegar seus logs e extraí-los - tente descobrir o padrão do ataque. Você deve considerar desligar o acesso anônimo e limitar os serviços sob ataque (ou seja, diminuir o limite de taxa do aplicativo para o serviço).
Se tiver sorte e você tiver uma base de clientes pequena e fixa, poderá determinar os endereços IP válidos de seus clientes. Se for esse o caso, você pode mudar para uma abordagem de lista branca por um curto período. Certifique-se de que todos os seus clientes saibam que isso está acontecendo para que possam ligar se precisarem de acesso de um novo IP :)
Doug McClean tem ótimos conselhos em: https://stackoverflow.com/a/1029613/1395668
fonte
De acordo com a parte PHP da questão;
Embora eu não dependa do PHP para isso, ele pode ser implementado, mas precisa considerar todas essas possibilidades ou mais;
Pseudo simples;
<?php // Assuming session is already started $uri = md5($_SERVER['REQUEST_URI']); $exp = 3; // 3 seconds $hash = $uri .'|'. time(); if (!isset($_SESSION['ddos'])) { $_SESSION['ddos'] = $hash; } list($_uri, $_exp) = explode('|', $_SESSION['ddos']); if ($_uri == $uri && time() - $_exp < $exp) { header('HTTP/1.1 503 Service Unavailable'); // die('Easy!'); die; } // Save last request $_SESSION['ddos'] = $hash; ?>
fonte
O nível de php está muito atrasado na cadeia de solicitação.
Colocar seu servidor apache atrás de um dispositivo de código aberto pode ser uma boa opção para você.
http://tengine.taobao.org/ tem alguma documentação e código-fonte de mais módulos voltados para a prevenção de DDOS. É uma expansão do nginx, portanto, você pode configurá-lo facilmente como um proxy reverso para sua instância do apache.
Consulte: http://blog.zhuzhaoyuan.com/2012/01/a-mechanism-to-help-write-web-application-firewalls-for-nginx/ para saber como combater a colisão com ataques DoS.
Totalmente esquecido também, http://www.cloudflare.com é um dos melhores firewalls de aplicativos da web gratuitos, eles têm planos gratuitos e pagos e vão te salvar de DDOS, nós o usamos para muitos de nossos sites de alto tráfego apenas por seus recursos de cache . É incrível!
fonte
Você não pode fazer isso em nível de PHP. DDOS é um tipo de ataque que envia muitas solicitações ao seu servidor web. Seu servidor web rejeitará a solicitação antes de chamar seu script PHP.
Se você estiver usando o Apache, aqui estão algumas dicas do Apache: http://httpd.apache.org/docs/trunk/misc/security_tips.html
fonte
O DDoS é mais bem tratado por dispositivos de rede muito caros e especialmente desenvolvidos. Os hosts geralmente não são bons em fazer proteção DDoS porque estão sujeitos a um desempenho relativamente baixo, esgotamento do estado, largura de banda limitada, etc. O uso de iptables, mods apache e serviços semelhantes pode ajudar em algumas situações se você não tiver acesso ao hardware de mitigação de DDoS ou um serviço de mitigação de DDoS, mas está longe do ideal e ainda deixa você em risco de ataque.
fonte
Que tal algo assim no lado do PHP:
//if user does not change IP, then ban the IP when more than 10 requests per second are detected in 1 second $limitps = 10; if (!isset($_SESSION['first_request'])){ $_SESSION['requests'] = 0; $_SESSION['first_request'] = $_SERVER['REQUEST_TIME']; } $_SESSION['requests']++; if ($_SESSION['requests']>=10 && strtotime($_SERVER['REQUEST_TIME'])-strtotime($_SESSION['first_request'])<=1){ //write the IP to a banned_ips.log file and configure your server to retrieve the banned ips from there - now you will be handling this IP outside of PHP $_SESSION['banip']==1; }elseif(strtotime($_SERVER['REQUEST_TIME'])-strtotime($_SESSION['first_request']) > 2){ $_SESSION['requests'] = 0; $_SESSION['first_request'] = $_SERVER['REQUEST_TIME']; } if ($_SESSION['banip']==1) { header('HTTP/1.1 503 Service Unavailable'); die; }
fonte
Existem plug-ins que você pode usar no apache para ddos / dos. Bom começo aqui http://www.debianadmin.com/how-to-protect-apache-against-dosddos-or-brute-force-attacks.html
Se você está no LEMP, pode conferir aqui. http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
Esses são bons pontos de partida baratos.
fonte
Você não usar proteção baseada em PHP, é horrível e dificilmente terá um impacto em tudo! Configure seu servidor da web para solicitações de limite de taxa, por exemplo em Nginx usando o módulo limit_req ( http://nginx.org/en/docs/http/ngx_http_limit_req_module.html )
Embora, eu recomendaria usar CloudFlare para combater a camada 4 - entretanto, não ataques baseados na camada 7, a menos que você esteja disposto a pagar.
fonte
Os DDOS são geralmente bloqueados no nível do servidor. Ative a proteção DDOS no nível do servidor. Por favor, verifique as notas abaixo para proteções DDOS.
Definições de configuração do servidor Apache HTTP que podem ajudar a evitar problemas de DDOS:
A diretiva RequestReadTimeout permite limitar o tempo que um cliente pode levar para enviar a solicitação.
Aguarde 10 segundos para receber a solicitação incluindo os cabeçalhos e 30 segundos para receber o corpo da solicitação:
RequestReadTimeout header=10 body=30
Aguarde pelo menos 10 segundos para receber o corpo da solicitação. Se o cliente enviar dados, aumente o tempo limite em 1 segundo para cada 1000 bytes recebidos, sem limite superior para o tempo limite (exceto para o limite fornecido indiretamente por LimitRequestBody):
RequestReadTimeout body=10,MinRate=1000 RequestReadTimeout header=10-30,MinRate=500 RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
A diretiva KeepAliveTimeout também pode ser reduzida em sites sujeitos a ataques DoS. Alguns sites até mesmo desligam os keepalives completamente por meio do KeepAlive, o que obviamente tem outras desvantagens no desempenho. Os valores de várias diretivas relacionadas ao tempo limite fornecidas por outros módulos devem ser verificados.
As diretivas LimitRequestBody, LimitRequestFields, LimitRequestFieldSize, LimitRequestLine e LimitXMLRequestBody devem ser configuradas com cuidado para limitar o consumo de recursos acionado pela entrada do cliente. Ajuste a diretiva MaxRequestWorkers para permitir que o servidor controle o número máximo de conexões simultâneas sem ficar sem recursos.
fonte
Etapas anti DDOS :
fonte