El desarrollador Mike Cardwell detalla el proceso seguido para crear una versión endurecida de la imagen oficial de PowerDNS Recursor, motivada por el despliegue de un nuevo servidor con Flatcar Container Linux. La imagen oficial, basada en Debian, ronda los 355 MB y contiene alrededor de 7.500 archivos, una superficie de ataque considerable para un servicio de resolución DNS.
La solución parte de compilar pdns-recursor de forma estática con Musl dentro de un contenedor Alpine, conservando solo dos ejecutables (recursor y rec_control) que se trasladan a una imagen Docker "scratch" sin shell ni herramientas del sistema. El proceso verifica la firma PGP del código fuente con las claves de release documentadas y reduce la imagen inicial a 36 MB. Se omiten SNMP y la opción URL de zoneToCache por arrastrar dependencias con historical frecuente de CVEs, lo que también reduce el ruido en escáneres de vulnerabilidades.
A continuación se incorpora un launcher en C que aplica Landlock para confinar el acceso al sistema de archivos y a la red antes de transferir el control al proceso de PowerDNS, y un perfil seccomp con una lista blanca de syscalls generada con strace y validada mediante smoke tests en varias arquitecturas y kernels. Se descartan syscalls peligrosas como memfd_create, io_uring o bpf.
El artículo también recomienda opciones de Compose (read_only, tmpfs noexec, cap_drop ALL, no-new-privileges, ipc none) y describe una canalización CI en GitLab que reconstruye a diario las dos últimas ramas estables de PowerDNS para absorber automáticamente parches de seguridad de Alpine. Por último, se genera un SBOM en tiempo de compilación para que herramientas como Trivy, Grype u OSV Scanner puedan identificar vulnerabilidades en una imagen que, al no tener una distribución base, queda ciega para los escáneres.
