Una ACL (lista de control de acceso) es un control de seguridad que permite o deniega el acceso a recursos como consultas DNS, transferencias de zona y actualizaciones dinámicas en función de criterios definidos, como la dirección IP de origen, evaluados regla por regla en el orden en que aparecen. En entornos DNS, las ACL son fundamentales para restringir las transferencias de zona no autorizadas que exponen la topología de la red, para evitar el uso indebido de resolutores recursivos en ataques de amplificación y para controlar quién puede enviar actualizaciones dinámicas, aunque deben combinarse con métodos de autenticación como TSIG para resistir la suplantación de la dirección de origen. Las ACL mal gestionadas fallan a gran escala a medida que se acumulan las excepciones; las entradas obsoletas exponen direcciones desactivadas a su reutilización por parte de hosts ajenos, y los errores en el orden de las reglas o la falta de consideración de las denegaciones implícitas pueden provocar interrupciones del servicio o dejar los servicios excesivamente expuestos a Internet.
Cómo funcionan las ACL
Una ACL es una lista de entradas, cada una de las cuales asocia un criterio de coincidencia con una acción de permitir o denegar. El sistema que aplica la lista compara una solicitud con las entradas y aplica el resultado de la primera coincidencia.
- Llega una solicitud: un cliente o dispositivo intenta realizar una acción, como enviar una consulta DNS, solicitar una transferencia de zona o reenviar un paquete a través de un router.
- Criterios extraídos: El sistema encargado de aplicar las reglas lee los atributos que utiliza la lista para la coincidencia, normalmente la dirección IP de origen y, en los dispositivos de red, también el destino, el protocolo o el puerto. Los servidores DNS también pueden realizar coincidencias basándose en una clave criptográfica.
- Entradas evaluadas por orden: el sistema comprueba las entradas de arriba abajo. La mayoría de las implementaciones se detienen en la primera entrada que coincide y aplican su acción.
- Acción aplicada: una entrada de permiso permite que la solicitud siga adelante. Una entrada de denegación la rechaza o la descarta. Muchos sistemas terminan la lista con una denegación implícita, por lo que se rechaza cualquier solicitud que no coincida con ninguna entrada.
Dado que el orden es importante, una regla de permiso amplia situada por encima de una regla de denegación restrictiva puede hacer que esta última resulte ineficaz. En los servidores DNS, suele haber listas independientes que regulan diferentes funciones, como las consultas, la recursividad, las transferencias y las actualizaciones, de modo que cada función puede tener su propio público. La coincidencia basada en direcciones puede ser falsificada, por lo que las operaciones sensibles, como las actualizaciones dinámicas, están mejor protegidas si se exige además una autenticación, como TSIG.
Problemas habituales con las ACL
Una regla de permiso general situada por encima de una regla de denegación específica implica que la denegación nunca se aplica, por lo que el tráfico que debería bloquearse pasa sin problemas. Los ingenieros suelen detectar esto cuando el contador de accesos de la entrada de denegación se mantiene en cero.
Muchas implementaciones terminan una lista con una regla de denegación tácita, por lo que añadir una primera entrada a una lista que antes estaba vacía puede bloquear de repente todo lo demás. Esto suele provocar una interrupción del servicio justo después de un pequeño cambio.
Las entradas que designan a hosts retirados del servicio permanecen activas tras la reasignación de la dirección. El nuevo host hereda entonces derechos de acceso, como el permiso de transferencia de zona, que nadie tenía intención de concederle.
Una ACL que se basa únicamente en la dirección IP de origen puede ser eludida por paquetes falsificados, especialmente a través de UDP. Combinarla con una autenticación basada en claves o con un filtrado en el perímetro de la red reduce el riesgo.
Permitir consultas desde cualquier dirección en un servidor recursivo lo convierte en un objetivo para ataques de amplificación. Permitir transferencias a cualquier dirección expone todo el contenido de la zona.