# Guía: Proteger tu Servidor Web (Caddy/OpenClaw) con Cloudflare Zero Trust y UFW

Tener un servidor web o un panel de control expuesto a internet es un riesgo constante. En esta guía, vamos a construir una doble barrera de seguridad de nivel empresarial para tu servidor Ubuntu:

1.  **El Muro Frontal:** Usaremos Cloudflare Zero Trust para obligar a cualquier visitante a iniciar sesión con tu cuenta de Google antes de ver tu web.
    
2.  **El Candado Trasero:** Configuraremos el cortafuegos de Ubuntu (UFW) para que tu servidor rechace cualquier conexión directa a su IP pública, a menos que venga de Cloudflare o de tu propia casa.
    

* * *

### PARTE 1: Configurar Cloudflare Zero Trust con Google

*Requisito previo: Tu dominio debe estar gestionado en Cloudflare y con el proxy activado (la "nube naranja" en la pestaña DNS).*

#### Paso 1.1: Obtener tu "Team Domain" en Cloudflare

Antes de ir a Google, necesitamos saber cuál es el identificador único de tu escudo en Cloudflare.

1.  Entra en tu cuenta de Cloudflare y accede al panel de **Zero Trust** (en el menú lateral izquierdo).
    
2.  Ve abajo del todo en el menú lateral y haz clic en **Settings** (Ajustes).
    
3.  En las pestañas superiores, elige **Team name**.
    
4.  Apunta o copia la URL exacta que aparece bajo **Team domain** (será algo parecido a `https://tu-equipo.cloudflareaccess.com`). *¡Guarda esta URL porque la usaremos ahora!*
    

#### Paso 1.2: Crear las credenciales en Google Cloud

Vamos a autorizar a Cloudflare para que use los sistemas de inicio de sesión de Google como "portero".

1.  Ve a la [Consola de Google Cloud](https://console.cloud.google.com/) e inicia sesión con tu cuenta.
    
2.  Crea un proyecto nuevo (ej. "Seguridad Servidor").
    
3.  Ve a **API y servicios > Pantalla de consentimiento de OAuth**. Elige "Externo" y rellena tu email y el nombre de la app.
    
4.  Ve a **Credenciales > Crear credenciales > ID de cliente de OAuth** y selecciona **Aplicación web**.
    
5.  En **Orígenes de JavaScript autorizados**, pega tu Team Domain de Cloudflare: `https://tu-equipo.cloudflareaccess.com`
    
6.  En **URI de redireccionamiento autorizados**, pega tu Team Domain seguido de la ruta de respuesta: `https://tu-equipo.cloudflareaccess.com/cdn-cgi/access/callback`
    
7.  Haz clic en Crear. Copia el **ID de cliente** y el **Secreto de cliente** que aparecerán en pantalla.
    

#### Paso 1.3: Conectar Google con Cloudflare

1.  Vuelve al panel de **Zero Trust** en Cloudflare.
    
2.  En el menú lateral izquierdo, ve a **Integrations > Identity providers**.
    
3.  Haz clic en **Add new identity provider** y selecciona **Google**.
    
4.  Pega el ID y el Secreto de cliente que copiaste de Google y haz clic en Save.
    

#### Paso 1.4: Proteger tu dominio (Crear la Aplicación y la Política)

1.  En el menú lateral de Zero Trust, ve a **Access controls > Applications** y pulsa **Add an application**. Selecciona **Self-hosted**.
    
2.  **Pestaña 1 (Configuración):** Ponle un nombre (ej. `OpenClaw-Admin`). En *Public hostname*, escribe tu subdominio (ej. `openclaw`) y selecciona tu dominio (ej. `tudominio.com`). Pulsa Next.
    
3.  **Pestaña 2 (La Política VIP):** Ponle un nombre a la regla (ej. `SoloYo`) y asegúrate de que la acción es **Allow**.
    
4.  En la sección *Include*, abre el desplegable **Selector** y elige **Emails**. En el campo *Value*, escribe tu correo de Google exacto. Pulsa Next y luego **Add application**.
    

* * *

### PARTE 2: Cerrar la "Puerta Trasera" con UFW en Ubuntu

Si alguien averigua la IP pública de tu servidor, podría escribirla en su navegador y saltarse todo el muro de Cloudflare. Vamos a blindar el servidor para que solo hable con Cloudflare.

#### Paso 2.1: Limpiar las reglas web abiertas (El método infalible)

Conéctate por SSH a tu servidor. Vamos a ver las reglas de tu cortafuegos numeradas para no cometer errores al borrarlas:

```plaintext
sudo ufw status numbered
```

Debes borrar todas las reglas que abran los puertos 80, 443 o el puerto directo de tu aplicación (ej. 18789), **dejando viva ÚNICAMENTE la regla de OpenSSH**. Para borrar una regla, usa su número (siempre borrando de los números más altos a los más bajos para que no se desordenen). Ejemplo:

```plaintext
sudo ufw delete 4
```

#### Paso 2.2: Permitir exclusivamente las IPs de Cloudflare

Copia y pega estos dos bloques de código en tu terminal para descargar la lista oficial de IPs de Cloudflare y permitirlas en tu servidor:

```plaintext
for i in $(curl -s https://www.cloudflare.com/ips-v4); do
  sudo ufw allow from $i to any port 80,443 proto tcp
done
```

```plaintext
for i in $(curl -s https://www.cloudflare.com/ips-v6); do
  sudo ufw allow from $i to any port 80,443 proto tcp
done
```

#### Paso 2.3: (Opcional) Permitir tu IP personal para uso de DNS Local

Si planeas modificar el archivo `hosts` de tu ordenador para acceder directamente a la IP del servidor usando el subdominio (haciendo *Split DNS*), Cloudflare no intervendrá y el UFW te bloqueará. Para evitarlo, añade la IP pública de tu casa a la lista de permitidos:

```plaintext
sudo ufw allow from TU_IP_PERSONAL to any port 80,443 proto tcp
```

#### Paso 2.4: Recargar el Firewall

Aplica todos los cambios blindando el sistema:

```plaintext
sudo ufw reload
```

* * *

**¡Misión cumplida!** Tu servidor es ahora una fortaleza. Nadie puede acceder a tus aplicaciones web sin pasar por el inicio de sesión de Google administrado por Cloudflare, y la puerta trasera directa a tu IP está cerrada a cal y canto.
