******************************************************************** Bloqueos DNS en Spamassassin (URIBL_BLOCKED / RCVD_IN_DNSWL_BLOCKED) ******************************************************************** .. include:: enlaces.inc.rst Este problema se produce generalmente cuando no estamos usando un servidor DNS local. Mantener un DNS local consume muchos recursos, sobre todo con Bind_ que es el viene de forma predeterminada, además de los problemas de seguridad. Este problema se resume en que, *Spamassassin* no consigue consultar las listas de bloqueo y reputación basadas en los nombres de dominio. En esta situación, la proporción de spam que entra en el sistema aumenta considerablemente. Antes de explicar mi solución incluyo algunas referencias de donde he cogido información: - https://cwiki.apache.org/confluence/display/spamassassin/DnsBlocklists#dnsbl-block - https://www.dnswl.org/?p=152 - https://kb.isc.org/docs/aa-00538 En primer lugar, este problema de detecta en las cabeceras de los correos recibidos: .. code-block:: text 0.0 RCVD_IN_DNSWL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to DNSWL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. Para entender los bloqueos es necesario ver la consulta que está haciendo Spamassassin. Concretamente estos bloqueos provienen de consultas a: - URIBL_BLOCKED: `uribl.com`_ - RCVD_IN_DNSWL_BLOCKED: `dnswl.org`_ En primer lugar las DNSBL hacen referencia a _DNS block lists. Para entender el bloqueo hay que tener claro que proviene de una reglas de Spamassassin que consultan mediante peticiones DNS. Y éstas peticiones no las realizar Spamassassin directamente, sino que utiliza el servidor DNS que esté configurado en el sistema, probablemente el de tu proveedor de servicio. Para solucionarlo es mejor entender el problema antes de empezar a aplicar recetas a ciegas copiadas la red. Para entenderlo mostraré el procedimiento usado con `dnswl.org`_: *¿Cómo se realiza la consulta?* Pues se realiza mediante peticiones DNS directamente a los servidores que encargados de esta lista: `dnswl.org`_. Este servidor bloquea a quien supera aproximadamente unas 100.000 peticiones al día, es complicado llegar a eso, en un pequeño servidor, entonces... *¿Por qué me han bloqueado?* Pues la respuesta es que tu servidor probablemente no esté bloqueado, quien está bloqueado el servidor DNS que está usando tu sistema. Para comprobarlo se puede hacer lo siguiente: (asegúrate tener instalado el paquete *dnsutils*) .. code-block:: text > dig -t txt amiblocked.dnswl.org ;; ANSWER SECTION: amiblocked.dnswl.org. 21599 IN TXT "You are blocked from using list.dnswl.org through public nameservers" amiblocked.dnswl.org. 21599 IN TXT "yes" ;; Query time: 47 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Sat Apr 04 12:17:08 CEST 2020 ;; MSG SIZE rcvd: 146 Fíjate como en la respuesta se ve que estoy usando los servidores DNS de Goggle. La solución es usar un DNS caché propio, pero en la configuración propuesta usaré además DNS externos (forwarders), como los de Google, para todas las peticiones que no correspondan a listas DNS/RBL. Para probar el bloqueo con `uribl.com`_ puedes encontrar información en http://uribl.com/about.shtml#testing - Si estoy bloqueado esta es la respuesta:: > host -tTXT test.uribl.com.multi.uribl.com Host test.uribl.com.multi.uribl.com not found: 3(NXDOMAIN) - Si no lo estoy la respuesta es:: > host -tTXT test.uribl.com.multi.uribl.com test.uribl.com.multi.uribl.com descriptive text "permanent testpoint" Instalando Bind9 y configurando los forwarders ============================================== Como DNS local usaré *Bind* aunque *Unbound* es una buena alternativa, *Bind* tiene más opciones y hay más documentación. La instalación es fácil:: apt install bind9 La configuración por defecto de Bind utiliza los servidores DNSBL raiz, pero para que funcione mejor se pueden redireccionar las peticiones a DNS públicos de proveedores de servicios. Esta configuración es fácil, sólo hay que editar */etc/bind/named.conf.options* y rellenar la parte *forwarders* con una lista de DNSs públicos:: forwarders { 1.1.1.1; // Cloudflare 1.0.0.1; // Cloudflare 8.8.4.4; // Google 8.8.8.8; // Google 37.235.1.174; // FreeDNS 37.235.1.177; // FreeDNS 64.6.64.6; // Verisign 64.6.65.6; // Verisign 74.82.42.42; // Hurricane Electric 84.200.69.80; // DNS Watch 84.200.70.40; // DNS Watch 91.239.100.100; // censurfridns.dk 109.69.8.51; // puntCAT 208.67.222.220; // OpenDNS 208.67.222.222; // OpenDNS 216.146.35.35; // Dyn Public 216.146.36.36; // Dyn Public }; Tras esto hay que iniciar bind y cambiar los DNS del sistema a localhost. No voy a explicar como cambiar los DNS en Debian10 ya que dependiendo de como tengas configurada la red se hace de una forma u otra. Para comprobar que todo va bien:: > systemctl start bind9 > dig uribl.com .... ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: sáb abr 11 13:10:43 CEST 2020 ;; MSG SIZE rcvd: 191 > host -tTXT test.uribl.com.multi.uribl.com Host test.uribl.com.multi.uribl.com not found: 3(NXDOMAIN) En los 3 comandos anteriores se puede ver como al consultar con los DNS predeterminados en el sistema se está usando el servidor local `SERVER: 127.0.0.1#53(127.0.0.1)` pero el servidor local usa los forwarders y al consultar _uribl.com_ los forwarders están bloqueados. Haciendo consultas directas a `uribl.com`_ y `dnswl.org`_ ========================================================== La idea ahora es mantener los forwarders para todas las peticiones menos para `uribl.com`_ y `dnswl.org`_. Es simple, sólo hay que editar fichero */etc/bind/named.conf.local* hay que poner lo siguiente .. code-block:: text // DNS RBLS zone "dnswl.org" { type forward; forwarders {}; }; zone "uribl.com" { type forward; forwarders {}; }; Recargando la configuración de Bind (o reiniciando el servicio) debería funcionar, esta es la salida de mis pruebas exitosas:: > host -tTXT test.uribl.com.multi.uribl.com test.uribl.com.multi.uribl.com descriptive text "permanent testpoint" > host -t txt amiblocked.dnswl.org amiblocked.dnswl.org descriptive text "no" .. _dnswl.org : https://www.dnswl.org/ .. _uribl.com : https://uribl.com/