Ya sea que esté ejecutando un recursor DNS abierto o un servidor DNS autorizado, el problema es el mismo y la mayoría de las soluciones posibles también son las mismas.
La mejor solucion
Las cookies DNS son un estándar propuesto que brinda a los servidores DNS una manera de exigir a los clientes que envíen una cookie para demostrar que la dirección IP del cliente no ha sido falsificada. Esto costará un viaje de ida y vuelta adicional para la primera búsqueda, que es la sobrecarga más baja que cualquier solución podría ofrecer.
Reserva para clientes mayores
Debido a que las cookies de DNS aún no están estandarizadas, por supuesto será necesario admitir clientes más antiguos ahora y en los años venideros.
Puede calificar las solicitudes de límite de clientes sin soporte de cookies DNS. Pero los límites de velocidad hacen que sea más fácil para un atacante hacer DoS su servidor DNS. Tenga en cuenta que algunos servidores DNS tienen una función de límite de velocidad diseñada solo para servidores DNS autorizados. Como está preguntando acerca de un solucionador recursivo, tales implementaciones de limitación de velocidad pueden no ser aplicables en su caso. El límite de velocidad por diseño se convertirá en el cuello de botella para su servidor y, por lo tanto, un atacante deberá enviarle menos tráfico para que se eliminen las solicitudes legítimas de lo que lo haría si no hubiera un límite de velocidad.
Una ventaja de los límites de velocidad es que en caso de que un atacante inunde su servidor DNS con solicitudes DNS, es más probable que le quede capacidad que le permitirá enviar mensajes al servidor e investigar la situación. Además, los límites de velocidad pueden diseñarse para eliminar principalmente las solicitudes de IP de clientes que envían muchas solicitudes, lo que puede ser suficiente para protegerlo contra DoS de los atacantes que no tienen acceso a IP de clientes falsos.
Por esas razones, un límite de velocidad un poco por debajo de su capacidad real puede ser una buena idea, incluso si en realidad no protege contra la amplificación.
Usando TCP
Es posible forzar a un cliente a utilizar TCP enviando un código de error que indica que la respuesta es demasiado grande para UDP. Esto tiene un par de inconvenientes. Cuesta dos viajes de ida y vuelta adicionales. Y algunos clientes defectuosos no lo admiten.
El costo de dos viajes de ida y vuelta adicionales se puede limitar solo a la primera solicitud con este enfoque:
Cuando la IP del cliente no ha sido confirmada, el servidor DNS puede enviar una respuesta truncada para obligar al cliente a cambiar a TCP. La respuesta truncada puede ser tan corta como la solicitud (o más corta si el cliente usa EDNS0 y la respuesta no), lo que elimina la amplificación.
Cualquier IP de cliente que complete un protocolo de enlace TCP y envíe una solicitud de DNS en la conexión se puede incluir temporalmente en la lista blanca. Una vez en la lista blanca, esa IP puede enviar consultas UDP y recibir respuestas UDP de hasta 512 bytes (4096 bytes si se usa EDNS0). Si una respuesta UDP desencadena un mensaje de error ICMP, la IP se elimina de la lista blanca nuevamente.
El método también se puede revertir usando una lista negra, lo que significa que las direcciones IP de los clientes pueden realizar consultas a través de UDP de forma predeterminada, pero cualquier mensaje de error ICMP hace que la IP se ponga en una lista negra que necesita una consulta TCP para salir de la lista negra.
Un mapa de bits que cubra todas las direcciones IPv4 relevantes podría almacenarse en 444 MB de memoria. Las direcciones IPv6 tendrían que almacenarse de alguna otra manera.
No sé si algún servidor DNS ha implementado este enfoque.
También se ha informado que algunas pilas TCP pueden explotarse en ataques de amplificación. Sin embargo, eso se aplica a cualquier servicio basado en TCP y no solo a DNS. Dichas vulnerabilidades deben mitigarse actualizando a una versión del kernel donde la pila TCP ha sido reparada para no enviar más de un paquete en respuesta a un paquete SYN.