[AJUDA] Preciso de dicas de como me proteger de ataques DDOS

Fala galera.

Então, estou precisando do máximo de dicas possíveis sobre proteção contra ataques DDOS que vocês tiverem.

Meu problema está sendo o seguinte: eu crio servidores na Linode/Digital Ocean/Vultr para hospedar sites de clientes e os domínios deles estão usando a Cloudflare, mas mesmo assim alguns sites estão sofrendo ataques DDOS e eu não sei como resolver.

A princípio comecei com a Vultr, depois fui para a DO por causa da limitação de 5 servidores na Vultr, mas depois que começou aparecer esse tipo de problema migrei para Linode que oferece proteção DDOS sem custo adicional(já que na Vultr são $10 e a DO nem oferece). Como o servidor da Linode tinha proteção DDOS eu pensei que resolveria meu problema...ledo engano.....

Depois de muito quebrar cabeça tentando entender como ou porque isso ainda continua acontecendo mesmo o servidor tendo proteção contra DDOS e o domínio usar Cloudflare, descobri que a possível causa é que o hacker estava atacando o IP diretamente. Então em uma pesquisa no tio Google encontrei o site https://search.censys.io/ que através dele é possível descobrir o IP de um dominio.

Fiz alguns testes com domínios de clientes e consegui encontrar o IP do servidor, aparentemente porque eu nomeei eles na Linode/Vultr/DO com o proprio dominio do cliente. Então, parei de usar o dominio do cliente para nomear os servidores testei novamente no site da Censys, e mesmo assim continuo encontrando alguns IP's de um ou outro cliente(não mais de todos como antes).

Tambem descobri que na Cloudflare não devo desativar a opção Proxy Status(nuvem laranja) para evitar a descoberta do IP real do servidor. Mas recentemente criei um servidor para um site meu em Wordpress, segui todos esses aprendizados que tive, e mesmo assim encontrei o IP do meu servidor no site da Censys.

Resumindo, não sei mais o que fazer para impedir que meus clientes sejam alvos faceis de ataques DDOS, então, quem puder me dar dicas do que posso fazer para resolver este problema seria de grande ajuda; até porque futuramente pretendo tirar idéias do papel para criar um ou mais Saas e até lá eu preciso aprender o máximo possível sobre DDOS para tomar todas as precauções.

Opa, antes de tentar ajudar na solução, é importante entender de que modo esse DDOS é feito. É um UDP flood ou simplesmente um request no dominio do seu cliente? Ou até mesmo um flood direto na porta? Que tipo de request é esse que o cloudflare deixa passar? É um GET, u, POST? De novo, pq a cloudflare nao cacheia isso? Seu cliente espera requests vindo dessa região onde esse servidor está? Geralmente um datacenter possui seu bloco de IPs.

Agora vamos lá, caso seu DDOS seja um UDP flood voce pode desativar as portas altas e liberar somente algumas pra sua aplicação.

É um GET ou POST? Ou qualquer outro método? Esse método é esperado no dominio/path do seu cliente? Se não, no cloudflare voce ja cria uma regra pra dar um 405.

Caso seja um método esperado, pq a cloudflare não está cacheando? São requests com query string randomica? Voce espera isso na sua aplicacao? Se nao, outra regra que voce pode criar na cloudflare.

Caso ele esteja chamando a mesma coisa e a cloudflare nao ta cacheando, tem algo errado em alguma regra que ta bypassando tudo isso.

Voce disse que achou o IP desse servidor, ele é de alguma regiao que seu cliente nao espera acessos? Como Asia, sei la? Voce pode colocar um geo block mas isso é muito abrupto. Outro caso seria bloquear uma subnet desse IP, pois provavelmente esse datacenter detem um /16, /8 seja o que for. Bloquei aos poucos, do /24.

--

Bom essa sao algumas dicas, sem saber de fato como esse ddos é feito. Dando detalhes das perguntas acima, fica mais fácil bolar uma solução.

Deixa eu tentar dar um contexto melhor de como eu estruturo os servidores atualmente. . Servidores basicos na Linode utilizando CyberPanel . Não fiz nenhum tipo de configuração adicional relacionado a segurança . Os dominios sao adicionados na Cloudflare e crio um registro A com o IP da Linode . Os sites dos clientes sao sistemas em Laravel A maioria dos clientes nao tem esse problema com ataques, mas um em especifico esta sendo o alvo principal. Ele ate me disse que o responsavel pelo ataque falou com ele, mostrou uma tela de prompt com o bot que faz o ataque(nao achei mais o print pra anexar aqui), e disse que esta fazendo de proposito para chantagear ele(e algumas outras pessoas com sites similares) e tambem por ele ter um site do mesmo tipo que nao e popular(leia-se: inveja). Então minha dúvida é, existe uma configuração de segurança que precise ser feita? Com relação a permitir apenas requisições dos IP's da CF, eu acredito que deve ser feito diretamente no Firewall da Linode, mas a questão é sobre quais portas bloquear, pois fico na duvida com relação as portas dos serviços internos: banco de dados(3306), email(443/587) e redis(6379) por exemplo.
Sim, ha como bloquear as requisicoes que nao sao da CDN, você só precisa pegar o CIDR deles como por exemplo: https://www.cloudflare.com/ips/ E na DigitalOcean permitir que apenas esses IPs acessem a porta da aplicacao. Existem varias implicacoes nisso, como por exemplo algum serviço de terceiro que bata direto na aplicação. Outra forma é você editar o VCL no CloudFlare ou talvez eles tenham um painel para isso e adicionar um header com um valor criptografado em base64 por exeplo, e na Linode, na sua camada web, permitir apenas requests que tenham aquele header. Existem diversas formas de bloquear isso, o mais importante é entender como é o ataque e qual das solucoes melhor te serve. Ou pegar os IPs das CDNs e colocar no banco de dados. Seu banco de dados deveria ser aberto a rede externa mesmo? Se sim, eu recomendaria uma VPN para poder acessá-lo.
No firewall da Linode consigo fazer isso, mas alem do campo IP tem outros campos para cada IP que eu quiser permitir/bloquear: . Protocolo: tcp, udp, icmp e ipencap . Portas(campo de multipla seleção): custom, dns(53), http(80), https(443), mysql(3306) e ssh(22) . Source: todos IPV4, todos IPV6 e IP/Netmask > Seu banco de dados deveria ser aberto a rede externa mesmo? Não, o banco de dados não precisa de acesso externo. Qual seria sua recomendação para configurar esses campos para cada um dos IP's da Cloudflare?
Primeiro passo seria bloquear o acesso externo ao banco e permitir somente da rede interna. Isso já pode te ajudar muito. Mas tome cuidado em como sua aplicacao chama o banco, confira se ela usa a rede interna. Se voce optar pela solucao de bloquear um IP ou um CIDR inteiro, você então vai bloquear todos os prrotocolos/portas tcp/udp FILTRANDO apenas para esse IP ou CIDR, afinal, esse IP não deve sacessar sua rede.
> Voce disse que achou o IP desse servidor, ele é de alguma regiao que seu cliente nao espera acessos? Como Asia, sei la? Voce pode colocar um geo block mas isso é muito abrupto. Esse é o ponto que eu fico curioso, pois se o atacante achou o IP do servidor, a request não vai passar pela Cloudflare. Como nesse caso você faria um geoblock ou qualquer outro controle do tráfego?
Não tinha me atentado a esse fato, de que estavam atacando diretamente o servidor. Bem, como eu disse no linkedin, se não existe uma razao muito plausivel pra origin ser aberta assim, o servidor deveria somente aceitar requests da CDN, fazendo validacao de algum header fake que a CDN passa pra origin por exemplo. E em origin uma regra no webserver que se nao existir esse token, 403. Outra coisa, esses clouds tem um bloco de IP, ele pode criar uma regra liberando somente o CIDR da cloudflare.

No caso, se o ataque estiver diretamente para o IP de seu server, não está passando pela cloudflare. Você poderia bloquear tráfego que não viesse dos IPs da cloudflare. Tive um problema similar a alguns anos, e devido ao fato de não ter mais recebido reclamações deste meu ex-cliente, parece ter funcionado...

As faixas de ip da Cloudflare você confere aqui: https://www.cloudflare.com/ips/

Sim, eu ate encontrei em um site uma dica relacionada a isso, mas nao consegui testar isso muito a fundo para ter certeza que funciona. Mas vou ver se consigo combinar com um cliente que tem sido o principal alvo de ataques pra tentar testar uma configuração de firewall na linode com os ip's da CF pra ver se apenas isso resolve(ou nao, rs).

Salve vergilSparda! Todo DataCenter possui estratégia de proteção contra ataques DDoS, mas isso não impede de você possuir um droplet/vps/virtual machine (seja qual serviço utiliza para hospedar um site/aplicação), que possa sofrer ataques diretos.

CloudFlare sem dúvida é provavelmente a melhor solução pronta para uso. Mas vai umas dicas adicionais para você configurar em seus servidores e diminuir e evitar que esses ataques aconteçam:

  • Configure o Firewall, libere apenas as portas que vc utiliza;
  • Desative as solicitações de ping via firewall, vc evita requisições em massa desse tipo, evita dor de cabeça do seu site cair ou seu droplet ser suspenso por algum sistema de segurança e ficar fora até vc resolver;
  • Quando vc recebe um ataque DDoS, utilize o firewall para bloquear os intervalos de IP. Isso você pode pesquisar de como monitorar logs no seu servidor e coletar esses dados;
  • A maioria dos provedores desses serviços que citou, possuem balanceamento de carga ou Load Balance, se seu site/serviço é muito requisitado para uso ou tem muito acesso simultâneo, vale a pena configurar um balanceamento de carga para não sobrecarregar;
  • E por último, analise bem a viabilidade do projeto, se ele possui expectativa de acesso/uso simultâneo constante e pesado, isso serve como item de base para definir qual serviço de hospedagem escolher.

Uma dica extra, dê uma estudada em AWS, GCP(Google Cloud Platform) e Azure, são as gigantes em infraestrutura, possuem planos de baixo custo e capacidade de atender qualquer tamanho de aplicação. Um site pequeno a médio porte, encaixa bem em serviços da AWS por exemplo, usando um TierFree(Tipo um pacote grátis de uso), mas a curva de aprendizado é grande, AWS é complexa e precisa ter domínio básico do que quer fazer lá.

Fora isso, se tiver "bala na agulha", contrate uma consultoria de Penteste(Hacker Ético), para descobrir vulnerabilidades e aplicar correções para se proteger desse tipo de ataque.

E nunca se esqueça: Não há nesse planeta, algo que seja 100% seguro.

Abraço e espero ter ajudado.

Obrigado pelas dicas, vou dar uma pesquisa sobre esse bloqueio de ping, ja que a faixa de IP nao vai resolver porque eu ja andei dando uma olhada e os ataques vem de paises diferentes. Sobre AWS/GCP/Azure, sei da boa reputação e disponibilidade deles, porém o custo não é previsível, e para os sites dos clientes que tenho isso nao serve, ate porque sao sites simples em Laravel, e como eu separo cada cliente em seu proprio servidor eu nao conseguiria usar um desses 3 pra isso no TierFree. Sem contar a complexidade maior pra configurar o serviço neles que ja tenho uma ideia de como é, apesar de nunca ter tentado, rs.

Olá vergilSparda! A Azion oferece suporte nativo a ataques DDoS com proteção de escudo (Origin Shield) para seus servidores. https://www.azion.com/pt-br/lp/protecao-contra-ddos-para-sites-aplicacoes-redes/

Ate encontrei algumas empresas similares que tambem oferecem esse tipo de serviço específico, mas acredito que são focadas em soluções empresarias, já que nenhuma delas tem qualquer tabela de preço do serviço em seus sites, rs. Entao não acredito que sejam opções para clientes comuns ou sites mais simples.
Olá VergilSparda, a Azion oferece tanto solução empresarial quanto para clientes comuns. Trabalho na empresa e, apesar de não ser da área de vendas, posso te ajudar nesta jornada. Pode me enviar um email e conversamos melhor a respeito: diego.victoria@azion.com

Verifique se estas soluções utilizadas oferecem proteção DDOS em nivel de infraestrutura e não apenas em nível de software. Pode resolver. Foi o que funcionou para mim.

A Linode oferece protecao DDOS por padrao nos serviços deles, mesmo assim nao adiantou nada para o meu caso, rs.
E pelo que dizem no site é em nivel de infra mesmo. " DDoS Protection The Linode Cloud automatically detects and mitigates distributed denial-of-service (DDoS) attacks on your infrastructure from large-volume traffic intended to make your service unavailable to legitimate users. " Cara precisa entender melhor o que são e como estão ocorrendo esses ataques para que você possa se defender melhor. As vezes uma simples configuração htaccess já resolve seu problema uma vez que as outras medidas ja foram tomadas. Avalie melhor como esses ataques tem ocorrido e por onde. Para então pensar em medidas.

É uma pena que esteja passando por isso, o TabNews também passou e passa por ataques DDoS.

No nosso caso, nós rejeitamos qualquer conexão que venha de fora do range de IPs da Cloudflare (então se alguém bater direto no IP, vai ser rejeitado). Isto foi implementado aqui:

https://github.com/filipedeschamps/tabnews.com.br/blob/075756795d0a5edc2223c4efded6cdd48ea92824/models/ip.js#L44

E fazemos esta conferência no Middleware (que roda na Edge da Vercel):

https://github.com/filipedeschamps/tabnews.com.br/blob/075756795d0a5edc2223c4efded6cdd48ea92824/middleware.public.js#L14

Assim pelo menos temos algum controle.

Se descobrir formas melhores, por favor, não deixe de vir atualizar esta publicação.

Fala tel..ops Filipe, rs. Me tira uma duvida, voce fez essa configuracao no proprio codigo, mas no servidor voce fez algo assim tambem? No meu caso, isso é possível de fazer no firewall da Linode/DO/Vultr, mas lá eu preciso especificar nao so os IP's da Cloudflare mas tambem as portas. Mas ai fica uma duvida ne: como eu faço com as portas de email(443/587), banco de dados(3306) e redis(6379)?

O grátis da Cloudflare é bem limitado! Você pode usar o Tunel da Cloudflare para esconder por um tempo o IP original!

https://developers.cloudflare.com/pages/how-to/preview-with-cloudflare-tunnel/ Quem sabe a linode tenha tuneis tbm!

Achei interessante esse site https://search.censys.io/ como faz para gente pesquisar pelos dominios? Abraços!

Parece que esse tunel da CF e mais algo para preview de sites do que uma proteção de fato, porque na pagina diz que ele funciona como o Ngrok. No link da Censys, basta informar o dominio que voce quer (sem http://, apenas dominio.extensao) que ele vai pesquisar, se encontrar algum registro vai aparecer o IP e outras informações do servidor.
O ngrook também funciona para colocar sites no ar em produção. Quando você não quer pagar uma hospedagem ainda! Conheci gente que tinha sites com muitas visitas via esse tipo de coisa. No caso ele usava o no-ip Então creio que de pra fazer um esquema com Tunel direto do VPS que você tem! Com o dominio :) Pode ser o ngrook ou no-ip tbm Pelo menos pra esconder o IP por um tempo! > No link da Censys, basta informar o dominio que voce quer (sem http://, apenas dominio.extensao) q Obrigado, tava muito confuso o site ou eu sou lerdo kkk Meus sites não aparecem dado nenhum. Todos via cloudflare com proxy ativado! Fiquei até com medo de ter pesquisado errado kkk Ai pesquisei pelo google e apareceu um monte de informação! kkk