En un artículo anterior, el autor explicó cómo migró sus sitios web a un VPS con OpenBSD y mencionó la necesidad de repetir bloques de código casi idénticos en httpd.conf para bloquear rutas maliciosas, ya que httpd carece de macros integradas. En esta nueva publicación detalla cómo resolver esa repetición con m4, un preprocesador de texto POSIX presente en OpenBSD y en la mayoría de distribuciones Linux.
Tras una introducción a los dos tipos de macros —las que operan sobre el árbol sintáctico abstracto (como las de Lisp) y las expansoras de texto «tontas» (como el preprocesador de C)—, el texto se centra en m4 como procesador puramente textual, con casi medio siglo de antigüedad, capaz de manipular cualquier entrada sin conocer su estructura. El autor resume las funciones clave: divert(-1) y divert(0) controlan la salida de texto; dnl suprime el resto de una línea; define(X, Y) sustituye todas las apariciones de X por Y, y los macros admiten hasta nueve parámetros posicionales con $1–$9, con evaluación recursiva.
Con esa base, muestra cómo aplicarlo a httpd.conf. Define un macro BLOCK para convertir cada línea location "..." {block drop} en BLOCK(ruta), y luego agrupa todas las rutas maliciosas en un macro BLOCKLIST reutilizable. Repite el patrón con ACME (para los retos de Let's Encrypt), TLS (certificado y clave por dominio) y HEADERS (conjunto de cabeceras de seguridad y caché). El resultado es que una definición de servidor completa —con escucha TLS, HSTS, gzip-static, ACME, TLS(dominio), BLOCKLIST y HEADERS— sustituye las decenas de líneas previas, de modo que modificar la respuesta a bots o ajustar cabeceras solo требует editar la definición del macro y regenerar el fichero con m4.
