Tienda Wifi

Tienda Wifi
CiudadWireless es la tienda Wifi recomendada por elhacker.NET

Buscador

Entradas Mensuales

Suscripción

¿Quieres recibir las últimas novedades del blog en tu correo?

¡Suscríbete al feed!

Foro de elhacker.net - Noticias

elhacker.NET en Facebook

Entradas populares

PostHeaderIcon DNS Caching (Caché DNS)




dnsmasq, bind9 o nscd (Name Service Cache Daemon) tres programas que permiten cachear host lookups para los programas en ejecución y guardar los resultados para la siguiente consulta (query), con esto podemos reducir considerablemente el número de consultas DNS (host lookups).



No sólo cuando navegamos hacemos peticiones DNS. En un servidor con mucho tráfico, son muy frecuentes las consultas DNS, para cuando envíamos un simple e-mail ya necesitamos resolver el dominio de destino.


Para ver el tráfico de peticiones DNS podemos usar la aplicación dnstop

dnstop -p -l3 eth0
Mientras se ejecuta, las siguientes opciones están disponibles para modificar la pantalla:

s visualizar la tabla de direcciones de origen 
d mostrar la tabla de direcciones de destino

1         show 1st level query names
2         show 2nd level query names
3         show 3rd level query names

ejemplo d + 3


Queries: 0 new, 924 total                                            Wed May 15 12:58:22 2013

Query Name               Count      %   cum%
-------------------- --------- ------ ------
foro.elhacker.net           77    8.3    8.3
ns93.elhacker.net           43    4.7   13.0
elhacker.net                29    3.1   16.1
121.200.in-addr.arpa        28    3.0   19.2
i.elhacker.net              27    2.9   22.1
www.elhacker.net            27    2.9   25.0
5.202.in-addr.arpa          27    2.9   27.9
76.180.in-addr.arpa         26    2.8   30.7
blog.elhacker.net           26    2.8   33.5
wiki.elhacker.net           24    2.6   36.1
ns993.elhacker.net          18    1.9   38.1
search.live.net             18    1.9   40.0
hwagm.elhacker.net          15    1.6   41.7
199.142.168                 12    1.3   43.0
36.ovh.net                  12    1.3   44.3
181.186.in-addr.arpa        10    1.1   45.3
201.193.in-addr.arpa        10    1.1   46.4
net.ovh.net                 10    1.1   47.5
245.119.in-addr.arpa         9    1.0   48.5
14.107.in-addr.arpa          9    1.0   49.5
labs.elhacker.net            9    1.0   50.4
ns2.elhacker.net             8    0.9   51.3


O direcamente usando el comando tcpdump o iptraf:

 tcpdump -vvv -s 0 -l port 53

Fichero de configuración nscd

nscd (Name Service Cache Daemon) es "GNU C Library" -- Un "daemon" que maneja passwd, group and host lookups para los programas en ejecución y cachea los resultados para la siguiente consulta (query).

Nscd  es  un  demonio  que  proporciona  una  caché  para la mayoría de peticiones comunes del servicio de nombres.

Nscd  no  sabe  nada sobre los protocolos subyacentes para un servicio. Esto también  quiere  decir,  que  si  modifica  /etc/resolv.conf  para consultas DNS, nscd continuará usando el fichero antiguo si usted tiene configurado /etc/nsswitch.conf para ser usado en la búsqueda  de  hosts por DNS. En tal caso, necesita reiniciar nscd.

Cada caché tiene un TTL separado (time-to-live) para sus datos; modificar la base de datos local (/etc/passwd, y demás) provoca que  la caché  se  invalide  en  un  plazo  de quince segundos.

/etc/nscd.conf

#
# /etc/nscd.conf
#
# An example Name Service Cache config file.  This file is needed by nscd.
#
# Legal entries are:
#
# logfile   
# debug-level  
# threads   
# max-threads  
# server-user             
#  server-user is ignored if nscd is started with -S parameters
#       stat-user               
# reload-count  unlimited|
# paranoia  
# restart-interval 
En nuestro caso vamos a usar la caché de hosts:

 enable-cache  hosts  yes
 positive-time-to-live hosts  3600
 negative-time-to-live hosts  20
 suggested-size  hosts  211
 check-files  hosts  yes
 persistent  hosts  yes
 shared   hosts  yes
 max-db-size  hosts  33554432

Veamos la información de los resultados cacheados:
  • nscd -g

hosts cache:

            yes  cache is enabled
            yes  cache is persistent
            yes  cache is shared
            211  suggested size
        5845854  total data pool size
        5237592  used data pool size
           3600  seconds time to live for positive entries
             20  seconds time to live for negative entries
          21192  cache hits on positive entries
           6101  cache hits on negative entries
          43481  cache misses on positive entries
          28143  cache misses on negative entries
             27% cache hit rate
          38773  current number of cached values
          38776  maximum number of cached values
            217  maximum chain length searched
             41  number of delays on rdlock
              0  number of delays on wrlock
              0  memory allocations failed
            yes  check /etc/hosts for changes

Es importante tener en cuenta el valor de "positive-time-to-live cachename"

 Establece el time-to-live para entradas positivas (con éxito consultas) en el caché especificado. valor está en  segundos. Grandes valores pueden aumentar las tasas de hits y caché  reducir los tiempos medios de respuesta, pero pueden aumentar los problemas con coherencia de caché.

Para iniciar el servicio:

service nscd start
Para que se inice al arrancar el sistema:

chkconfig nscd  on

 Para vaciar la cache de las  DNS (también llamado flushdns) usaremos el comando:

nscd -i hosts
 O bien

nscd --invalidate=hosts

 Los hosts se guardan en:

/var/db/nscd/

En nuestro caso el fichero host contiene la información.

Recordar añadir al ficher /etc/resolv.conf tanto si usamos nscd como dnsmasq

nameserver 127.0.0.1
Posibles errores con nscd (quedarnos sin memoria):

 nscd: XXXX no more memory for database 'hosts'

Resultados de dig

dig google.es | grep "Query time"
;; Query time: 19 msec

Resultado cacheado:
 dig google.es | grep "Query time"
;; Query time: 0 msec

Sin embargo, lo que realmente sólo se almacena en memoria caché las respuestas a llamadas al sistema como getpwnam ( gethostbyname (), getpwuid (), getgrnam (), getgrgid()


En este caso podemos usar dnsmasq


dnsmasq

dnsmasq ofrece servicios como caché DNS y un servidor DHCP. Como un servidor de nombres de dominio (DNS), puede almacenar en caché las consultas DNS para mejorar la velocidad de conexión a los sitios visitados anteriormente.

Fichero configuración

/etc/dnsmasq.conf 

listen-address=127.0.0.1 

cache-size: Ajuste el tamaño de la caché de dnsmasq. El valor predeterminado es 150 nombres. Ajustar el tamaño de la caché de cero desactiva caché.

También podemos añadir:


resolv-file=/etc/resolv.dnsmasq

Y copiar el contenido que teníamos en /etc/resolv.conf  a /etc/resolv.dnsmasq 

nameserver 8.8.4.4
nameserver 8.8.8.8
nameserver 208.67.222.222
nameserver 208.67.222.220
nameserver 209.244.0.3
nameserver 209.244.0.4
nameserver 74.82.42.42

En el ejemplo usaremos las DNS públicas de Google, las de openDNS, Level3 y Hurricane Electric.

Lista de servidores DNS Públicos (recursivos):



Proveedor IP DNS Primario  IP DNS Secundario
Level3209.244.0.3209.244.0.4
Google8.8.8.88.8.4.4
Securly184.169.143.224184.169.161.155
Comodo Secure DNS8.26.56.268.20.247.20
OpenDNS Home208.67.222.222208.67.220.220
DNS Advantage156.154.70.1156.154.71.1
Norton ConnectSafe198.153.192.40198.153.194.40
ScrubIT67.138.54.120207.225.209.77
SafeDNS195.46.39.39195.46.39.40
DNSResolvers.com205.210.42.20564.68.200.200
OpenNIC74.207.247.464.0.55.201
Public-Root199.5.157.131208.71.35.137
SmartViper208.76.50.50208.76.51.51
Dyn216.146.35.35216.146.36.36
censurfridns.dk89.233.43.7189.104.194.142
Hurricane Electric74.82.42.42-
puntCAT109.69.8.51


http://pcsupport.about.com/od/tipstricks/a/free-public-dns-servers.htm


 y ahora debemos indicar al fichero /etc/resolv.conf que somos nosotros mismos el servidor DNS de nombres.


nameserver 127.0.0.1


Y ya podemos inicar el servicio:


/etc/init.d/dnsmasq start

Usando bind9 como servidor caché de DNS

Para poder usar bind como servidor caché DNS debe estar configurado como un servidor recursivo. Esto puede ser potencialmente peligroso (DNS poisoning) así que debemos controlar mediante acls quién puede hacer consultas (querys) y quién no.


El servidor DNS recursivo configurado de tal manera que sólo (nosotros) localhost pueda hacer consultas:
options {
[..]
recursion yes;
allow-query { localhost; };
allow-recursion { localhost; };
allow-query-cache { localhost; };
}
O podemos crear una acl

acl "redlocal" {
  127.0.0.1;
  192.168.1.0/24; 
  192.168.2.0/24;
  192.168.3.0/24;
};
 Y dejar sólo a la ip's y rangos de "redlocal" que puedan hacer consultas:

allow-query {
  redlocal;
 };


Añadimos los forwarders que son los que realmente resolverán las peticiones en caso que no sean nuestros propios dominios.

forward only; // solo activar si no tenemos ningún dominio propio en BIND
 forwarders {
213.133.98.98;
213.133.99.99;
213.133.100.100;
8.8.8.8;
8.8.4.4;
208.67.222.222;
208.67.220.220;
209.244.0.3;
209.244.0.4;
74.82.42.42;
   };
 En el caso que seamos un servidor dns de un dominio si nos interesa que cualquiera (any) pueda hacer consultas sobre nuestro dominio. Pero sólo sobre nuestro dominio, por lo tanto el allow-query any debe estar dentro de la zone de elhacker.net

zone "elhacker.net" {
    type master;
    file "/var/named/elhacker.net.hosts";
allow-transfer { none; };
allow-query { any; };
    };
De esta manera los clientes externos no pueden hacer consultas recursivas, pero si pueden consultar nuestro dominio:

nslookup elhacker.net  ns7.elhacker.net
Server:         ns7.elhacker.net
Address:        144.76.224.7#53

Name:   elhacker.net
Address: 144.76.224.7
Pero no los que no son nuestros (gracias allow-query localhost o redlocal de options)

nslookup google.es ns7.elhacker.net
Server:         ns7.elhacker.net
Address:        144.76.224.7#53

** server can't find google.es: REFUSED
Los clientes internos si pueden

nslookup google.es
Server:         127.0.0.1
Address:        127.0.0.1#53

Non-authoritative answer:
Name:   google.es
Address: 173.194.70.94
Si queremos  ver todas las consultas (querys) que está recibiendo el servidor bind, debemos activar el querylog (por defecto desactivado) con el comando:

rndc querylog

Verificar que se ha activado el querylog:

 rndc status
query logging is ON 
 Ver el querylog por defecto en syslog o si los hemos definido en otro lugar:

logging {
channel "querylog" { file "/var/log/querys"; print-time yes; };
category queries { querylog; };
};
En nuestro ejemplo en  /var/log/querys

tail -f /var/log/querys

Para ver todos los resultados caheados (en caché) de BIND en el fichero named_dump.db

rndc dumpdb -cache 
El fichero  named_dump.db se encontrará en el mismo directorio dónde esté indicado con la directiva options directory "/etc"; a no ser que hayamos usado la directiva dump-file con otra ruta

Si tenemos bind chroot:

dump-file "/var/named/data/cache_dump.db";


El fichero estará en /var/named/chroot/var/log

Para ver el contenido:
less  /var/named/chroot/var/log/named_dump.db | grep google.com

Para ver las consultas recursivas:

rndc recursing

Nota importante: aunque tengamos la query-caché activa algunos servidores como google o facebook tienen un valor TTL (Time-To-Live) extremadamente muy bajo (5 minutos o menos), lo que hace que la query caché esté cacheada durante el tiempo que ellos indiquen.

Si queremos aumentar al máximo los valores que se guardan en caché:

options {
// 30 minutos en caché, respuesta dns caheadas no autoritativas, forwarders
 lame-ttl 1800;
 // limpiar caché cada 120 minutos, por defecto es cada 60 minutos
cleaning-interval 120;
// por defecto respuestas negativas son 3 horas
max-ncache-ttl 3600; // 3600 segundos es 1 hora
// caché de resultados positivos
max-cache-ttl 7d; // por defecto es 1 semana 7 dias
};

  Limpiar caché de las DNS


  •  En Windows desde la línea de comandos (cmd) con el comando ipconfig podemos borrar la caché:
ipconfig /flushdns

Para ver la caché de las DNS de Windows
ipconfig /displaydns
  • En Linux si usamos el daemon nscd
/etc/rc.d/init.d/nscd restart 
Si usamos dnsmasq

/etc/init.d/dnsmasq restart
Limpiar caché bind

rndc flush
 Limpiar la cahé de un dominio

rndc flushname elhacker.net

Refrescar caché bind

rndc dumpdb -cache
vi /var/named/data/cache_dump.db

  • En MacOS según la versión:

Para limpiar la cache DNS en Mac OS X Leopard:

lookupd -flushcache

Para limpiar la cache DNS en Mac OS X:

dscacheutil -flushcache

 Limpiar el caché DNS en el navegador Google Chrome 


Pestaña en blanco en el navegador y escribimos en la barra de direcciones del navegador:

chrome://net-internals/#dns

Hacer click en el botón "Clear host caché” para borrar todo el caché DNS que está almacenado.

Para limpiar las conexiones tenemos que abrir en la barra de direcciones:

chrome://net-internals/#sockets


0 comentarios :

Publicar un comentario

Los comentarios pueden ser revisados en cualquier momento por los moderadores.

Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.

Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.