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.

Gabriel Hinz
Engenheiro DevOps

Gabriel faz parte da nossa equipe de sentinelas dedicados para transformar o mundo digital.

Instagram