# rm-rf.es

Habilitar rate-limit en Bind 9

A partir de la versión 9.9 de Bind, está disponible una funcionalidad que permite mitigar ataques de denegación de servicio al DNS mediante ratelimit. Básicamente lo que permite es limitar el número de queries por cliente a partir de una serie de criterios.

Para poder utilizar rate-limit es necesario compilar manualmente las fuentes de Bind, normalmente las versiones precompiladas no son del tipo «Extended Support» por lo que no tendremos la posibilidad de hacer uso de esta característica.

Actualmente la versión estable es la 9.9.8-P2, no obstante echad un vistazo al sitio web de ISC para descargar siempre la última.

A la hora de compilar, debemos tener en cuenta el parámetro --enable-rrl para habilitar la funcionalidad de rate-limit:

  --enable-rrl            use DNS Response Rate Limiting

Este sería un ejemplo válido de compilación:

# wget https://www.isc.org/downloads/file/bind-9-9-8-p2/?version=tar-gz
# tar -xzvf bind-9.9.8-G2.tar.gz
# cd bind-9.9.8-P2
# ./configure --prefix=/dns --enable-threads --with-libtool \
 --with-openssl=/usr/ssl --enable-rrl --enable-fetchlimit \ 
 --with-openssl=/usr --localstatedir=/dns/var/state
# make
# make install

Una vez compilado y arrancado, vemos que tenemos la versión con soporte extendido:

# /dns/sbin/named -V
BIND 9.9.8-P2 (Extended Support Version) 
built by make with '--prefix=/dns' '--enable-threads' '--with-libtool'
'--with-openssl=/usr/ssl' '--enable-rrl' '--enable-fetchlimit'
'--with-openssl=/usr' '--localstatedir=/dns/var/state'
compiled by GCC 4.8.3 20140911 (Red Hat 4.8.3-9)
compiled with OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013
linked to OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013

Una configuración básica de rate-limit, la añadimos dentro del bloque «options» o de una vista «view» del archivo de configuración named.conf

        rate-limit {
              responses-per-second 15;
              log-only yes;
        };

Se puede jugar con los siguientes parámetros:

rate-limit {
     [ domain domain-name ; ]
     [ responses-per-second [size number] [ratio fixedpoint] number ; ]
     [ referrals-per-second number ; ]
     [ nodata-per-second number ; ]
     [ nxdomains-per-second number ; ]
     [ errors-per-second number ; ]
     [ all-per-second number ; ]
     [ window number ; ]
     [ log-only yes_or_no ; ]
     [ qps-scale number ; ]
     [ ipv4-prefix-length number ; ]
     [ ipv6-prefix-length number ; ]
     [ slip number ; ]
     [ exempt-clients { address_match_list } ; ]
     [ max-table-size number ; ]
     [ min-table-size number ; ] 
};
Salir de la versión móvil