En esta entrada, veremos como configurar un servicio de Cloudfare (gratuito) para proteger, de forma básica, una web por lo que uno de los objetivo será que el usuario no entre directamente al servidor donde se aloja la web sino que acceda, de forma segura (SSL), antes por Cloudfare el cual nos permitirá filtrar y controlar los accesos previamente.
Antes de nada, veremos que la web (www.changeofhabit.com) responde a la IP (139.162.206.138) del servidor ubicado en Linode
[root@node01 ~]# ping -c 2 -4 www.changeofhabit.com
PING www.changeofhabit.com (139.162.206.138) 56(84) bytes of data.
64 bytes from li1369-138.members.linode.com (139.162.206.138): icmp_seq=1 ttl=64 time=0.029 ms
64 bytes from li1369-138.members.flinode.com (139.162.206.138): icmp_seq=2 ttl=64 time=0.117 ms
Para ello, vamos a aceder a la siguiente ubicacion:
https://www.cloudflare.com > Websites > + Add a site > changeofhabit.com > Free > Continue
Se realizará un análisis de los DNS actuales (Review your DNS records) y a continuación Continue donde dejaremos los siguientes DNS propios de Cloudfare:
- jay.ns.cloudflare.com
- lily.ns.cloudflare.com
Continue > Get started
Seleccionaremos las siguientes opciones:
Automatic HTTPS Rewrites: Enable
Always Use HTTPS: Enable
Brotli: Enable
Para finalizar la configuracion: Finish
Ahora vamos a configurar SSL/TLS para poder encriptar la conexion end-to-end con un certificado que deberemos añadir a posteriori
https://www.cloudflare.com > SSL/TLS > Overview > Full
https://www.cloudflare.com > SSL/TLS Recommender: Enable
https://www.cloudflare.com > HTTP Strict Transport Security (HSTS): Enable
Seguiremos configurando el servicio dando de alta una extension de seguridad del sistema de DNS (DNSSEC) y que deberemos añadir a nuestro proveedor de dominios. En mi caso Google.
https://www.cloudflare.com > DNS > Settings > DNSSEC > Enable DNSSEC
Recogeremos los valores y los introduciremos accediendo via https://domains.google.com > DNS > DNSSEC
Seguidamente vamos a añadir la resolución DNS al proveedor de dominio para que resuelva Cloudfare en lugar de directamente el servidor:
https://domains.google.com > DNS > Servidores de nombres personalizados: jay.ns.cloudflare.com, lily.ns.cloudflare.com
Volvemos a Cloudfare y valodaremos la conexión anteriormente realizada. Este proceso puede tardar 24h (tiempo hasta que se repliquen en los DNS de forma mundial)
https://www.cloudflare.com > Overview > Check nameservers now
Una vez finalizado el proceso, veremos que la resolución ya es diferente donde los DNS principales resuelven Cloudfare en lugar de Linode
- https://www.ssllabs.com/ssltest/analyze.html?d=www.changeofhabit.com
- https://lookup.icann.org > www.changeofhabit.com
Una vez rengamos la resolución correcta, finalizaremos la configuracion SSL/TLS activando las siguientes opciones:
- https://www.cloudflare.com > SSL/TLS > Overview > Full (strict)
- https://www.cloudflare.com > SSL/TLS > Edge Certificates > Certificate Transparency Monitoring
En este punto vamos a crear unas simples reglas de bloqueo para que el WAF pueda filtras accesos no deseados en función del país origen.
Vamos a bloquear los siguientes países: Russian Federation, Taiwan, China e Iran.
https://www.cloudflare.com > Security > Bots > Bot Fight Mode
https://www.cloudflare.com > Security > WAF > Create rule
Le llamaremos a la regla:
Rule Name: BLOCK Countries
Añadiremos bloque con un or del siguiente modo para cada pais:
Field: Country
Operator: equals
Value: Russian Federation
y como paso final:
Choose action: Block y Deploy
A modo resumen, la configuracion será la siguiente:
Como se puede observar, tras unos dias configurados nos aparecerán bloqueos maliciosos de dichos países:
Otras configuracion que podemos aplicar a modo de mejora y recomendación son las siguientes:
- https://www.cloudflare.com > Caching > Configuration > Crawler Hints
- https://www.cloudflare.com > Caching > Configuration > Always Online
- https://www.cloudflare.com > Network > Pseudo IPv4 > Add header
- https://www.cloudflare.com > Scrape Shield > Hotlink Protection
- https://www.cloudflare.com > Rules > configuration Rules > Automatic HTTPS Rewrites
- https://www.cloudflare.com > Rules > configuration Rules > Hotlink Protection
Finalmente y para confirmar, veremos el siguiente mensaje si hemos integrado la web con Cloudfare de forma correcta: