Uso de dns-suffix para redirección informativa

En lugar de bloquear un dominio con NXDOMAIN, puede configurarse una política de tipo dns-suffix que permita redirigir al usuario a una página informativa (por ejemplo, un portal gubernamental).

Este mecanismo funciona en dos partes:

  1. Configuración en el resolver (RPZ): Se define una política de tipo add-suffix en la sección Blackhole Domains. Por ejemplo, ante una consulta a badsite.com, el resolver responderá con un CNAME como:

    badsite.com.prohibited.domain.com.
    
  2. Configuración en la zona DNS del dominio receptor: En la zona prohibited.domain.com, se debe crear la siguiente entrada wildcard:

    * IN A xxx.xxx.xxx.xxx
    

    Esto asegura que cualquier subdominio como badsite.com.prohibited.domain.com resuelva a la IP del servidor web que gestionará la redirección.

  3. Configuración del servidor web (nginx): En el servidor web que responde en xxx.xxx.xxx.xxx, se debe crear un vhost de nginx que capture cualquier subdominio bajo prohibited.domain.com y redirija al sitio deseado.

    A continuación se muestra un ejemplo completo del nginx.conf:

    server {
        listen 80;
        server_name .prohibited.domain.com;
        location / {
            return 301 https://government-portal.com;
        }
    }
    
    server {
        listen 443 ssl;
        server_name .prohibited.domain.com;
        ssl_certificate     /etc/nginx/ssl/fullchain.pem;
        ssl_certificate_key /etc/nginx/ssl/privkey.pem;
        location / {
            return 301 https://government-portal.com;
        }
    }
    

Con esta configuración, los usuarios que intenten acceder a dominios prohibidos serán redirigidos a una página explicativa, en lugar de recibir simplemente un error DNS.

Configurar certbot para la generacion de certificados

Se detallan los pasos a seguir en Debian para la generacion de certificados SSL para ser puestos en Nginx

apt install certbot

Instalar un servidor en una IP p.ej. 1.2.3.4

Poner un registro A de servidor.dominio.com apuntando a 1.2.3.4

Poner un registro CAA que diga «issue 0 letsencrypt.org»

El puerto 80 debe estar libre de firewall

Ejecutar:

systemctl list-timers | grep certbot

Esto es para para asegurarse que haya un timer de renovación de certbot.

Editar el siguiente archivo:

/etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh

Dentro de ese archivo poner:

#!/bin/bash
cp /etc/letsencrypt/live/servidor.dominio.com/fullchain.pem /etc/ssl/certs/fullchain.pem
cp /etc/letsencrypt/live/servidor.dominio.com/privkey.pem /etc/ssl/private/privkey.pem
systemctl reload nginx

Dentro del nginx configurar:

server {
    listen 443 ssl;
    server_name ~^(.+\.)*servidor\.dominio\.com$;

    ssl_certificate     /etc/ssl/certs/fullchain.pem;
    ssl_certificate_key /etc/ssl/private/privkey.pem;

    return 301 https://servidor.dominio.com$request_uri;
}


server {
    listen 443 ssl http2;
    server_name servidor.dominio.com;

    ssl_certificate     /etc/ssl/certs/fullchain.pem;
    ssl_certificate_key /etc/ssl/private/privkey.pem;

    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256';
    ssl_prefer_server_ciphers on;

    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;

    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

    location / {
       root /var/www/html;
       index index.html index.htm;
       }
 }