Utilizar o poder de Proxy Web da Cloudflare oferece diversos benefícios para as aplicações, desde o controle de conteúdo criptografado com certificado SSL até regras de entrada e implementações de regras de Web Application Firewall (WAF). No entanto, em meio aos benefícios, podemos esquecer a configuração da nossa extremidade para lidar exclusivamente com o tráfego da Cloudflare, restringindo o acesso de outras origens. Abrindo espaço para usuários mal-intencionados explorarem e contornarem as camadas de proteção da Cloudflare.
Neste post exploraremos rapidamente formas estratégicas de evitar o acesso e melhorar a nossa implementação de segurança na ponta das nossas aplicações, utilizando o webserver Nginx.
1- Configurando Aplicação na Cloudflare
Para esta implementação iremos restringir a origem para acessos específicos à nossa aplicação, que estará sendo utilizada apenas pela Cloudflare. Nessa etapa iremos configurar um dos nossos sites para estar utilizando o Proxy da Cloudflare.
Oberve que estamos direcionando o www.meusite.com.br para o CNAME meu.nginx.com onde está a nossa origem, e também ativamos o Proxy
2 - Identificando o Proxy da Cloudflare
Para complementar nossa ideia precisamos identificar por quais endereços de IP a Cloudflare estará utilizando para se comunicar de seu Proxy com a nossa Origem (Nginx). A Cloudflare disponibiliza a lista de seus IPs de comunicação através do link: https://www.cloudflare.com/pt-br/ips/
Nesse endereço podemos listar os range de IPs IPV4 e IPV6 utilizados pela Cloudflare, e iremos utilizar eles em nossa configuração.
3 - Criando Nossa Configuração no Nginx
Ao acessar nosso servidor Nginx, podemos começar nossa configuração adicionando um arquivo na raiz do Nginx "/etc/nginx" (pode mudar dependendo da versão utilizada). Dentro da raiz vamos criar um arquivo chamado cloudflare_ips.conf
Cada range de IP deve estar nesse mesmo formato apresentado:
allow: 0.0.0.0/0;
# Insira os ranges de IPv4
allow 173.245.48.0/20;
allow 103.21.244.0/22;
allow 103.22.200.0/22;
....
# Insira os ranges de IPV6
allow 2400:cb00::/32;
allow 2606:4700::/32;
allow 2803:f800::/32;
...
4 - Adicionando a Restrição na Aplicação
Agora que o arquivo cloudflare_ips.conf foi criado, vamos para o virtualhost onde se encontra a nossa aplicação e então adicionar o seguinte código:
include /etc/nginx/cloudflare_ips.conf;
deny all;
server {
listen 80;
server_name meusite.com.br;
server_name www.meusite.com.br;
...
# Adicione as seguintes linhas
include /etc/nginx/cloudflare_ips.conf;
deny all;
...
}
Ao realizar esta etapa, valide e reinicie o Nginx
# Validar
nginx -t
# Se estiver tudo Ok
nginx -s reload
A partir de agora o Nginx irá aceitar somente conexões onde a origem são os servidores da Cloudflare, evitando o acesso indesejado
5 - Outras Formas de Configurar
Ao possuir a lista de CIDRs dos IPs da Cloudflare, também é possível realizar regras de roteamento dentro do servidores e também da rede local para validar que as requisições venham exclusivamente da Cloudflare e não de outras origens.
Se estiver utilizando um provedor de cloud, como a nuvem da AWS, é possível restringir o acesso ao servidor web através de grupos de segurança removendo o acesso completo da web e adicionando apenas o range específico:
6 - Conclusão
Ao seguir os passos apresentados neste guia, você estará equipado para impedir tentativas de bypass de proxy web na Cloudflare ao utilizar o Nginx. Fortaleça suas defesas, proteja sua aplicação e mantenha-se seguro no mundo digital em constante evolução.