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.