Páginas

sábado, 1 de diciembre de 2012

Dnsmasq DHCP Filter


Fuente: http://home.swkls.org/dnsmasq-on-centos-6-for-filtering/
Autor: Steve Andrews

El filtrado DNS es un método rápido y fácil para bloquear el acceso a ciertos sitios web. Se puede utilizar para bloquear la publicidad de terceros dentro de sitios web, bloquear sitios conocidos de malware infectados, filtro de contenido por ejemplo pornografía, etc.

Dnsmasq en CentOS 5.8. Dnsmasq es un ligero DNS de reenvío y almacenamiento en caché del servidor y el servidor DHCP. Asumiendo un servidor con dos tarjetas de red eth0 conectada a Internet y eth1 a la red local.


Instalar dnsmasq

yum install dnsmasq

Modificando /etc/dnsmasq.conf


Creando un fichero específico para los namaserves


Creando el grupo y usuario dnsmasq

groupadd -r dnsmasq
useradd -r -g dnsmasq dnsmasq

Tenemos una lista de bloqueo en el archivo de configuración /etc/dnsmasq.d directorio. Las entradas son básicamente una dirección IP y un dominio, tales como:

address=/facebook.com/127.0.0.1

Podemos crear la lista manualmente:



Agregar regla iptables para permitir acceso al puerto UDP 53
$ipt -A INPUT -s $NETLAN -i eth1 -p udp --sport 53 --dport 1024:65535 -j ACCEPT
service iptables save
service iptables restart

service dnsmasq start
chkconfig dnsmasq on

Para la prueba, se puede establecer la dirección IP del servidor DNS en otra máquina para que apunte al servidor dnsmasq. Puede ser una buena idea limpiar la caché de DNS en la máquina con ipconfig /flushdns asumiendo un ordenador con Windows. Entonces, podemos utilizar nslookup para comprobar Dnsmasq en este caso desde un cliente centos6:


Como era de esperar, haciendo una búsqueda por facebook.com devuelve la dirección de bucle invertido (127.0.0.1), que también debería devolver un error 404 Not Found si intentamos acceder a la página con un navegador web.

También podemos confirmar que está trabajando viendo el archivo de registro que puede encontrar en /var/log/dnsmasq.log.

Ya que estamos en el tema de los registros, vamos a crear un archivo de registro nuevo rotation para nuestros registros de dnsmasq. En primer lugar crear un nuevo archivo en /etc/logrotate.d y luego llenar el nuevo archivo con el siguiente:



Esto debe rotar el registro diario y mantener sólo los 32 registros más actuales en el archivo. Usted puede eliminar el "rotate 32 'o aumentar el número si lo desea.

Podemos mejorar las cosas un poco de sirviendo una página de bloque personalizado en lugar de enviar gente a una página 404, pero necesitamos instalar Apache en primer lugar:

yum install httpd

Tiene que crear una apropiada regla iptables apropiada:
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
service iptables save
service iptables restart
chconfig --levels 235 httpd on

Una sencilla pagina index

vim /var/www/html/index.html


Podemos probar que nuestra página de bloqueo está trabajando, navegando a la dirección IP del servidor, en mi caso 192.168.0.1. También vamos a utilizar esa IP sobre las futuras modificaciones de lista en lugar de 127.0.0.1.

En este momento el bloqueador de páginas un trabajo reenviador DNS y servidor de almacenamiento en caché, pero no bloquea mucho. Vamos a ver como rellenar una lista más grande descargando el paquete de lista de negra de Shalla.de para este ejemplo, extraer la lista de spyware, y formato para Dnsmasq. En primer lugar, vamos a editar nuestro archivo /etc/dnsmasq.conf archivo para incluir otra lista de bloques:

cd /etc
echo "conf-file=/etc/dnsmasq.d/spyware" >> dnsmasq.conf

Descargar y descomprimir blacklist tarball:
wget http://www.shallalist.de/Downloads/shallalist.tar.gz

tar -xzvf shallalist.tar.gz
cd BL/spyware
sed -e 's%^%address=/%' domains > spyware
sed -i 's%$%/192.168.0.1%' spyware
cp spyware /etc/dnsmasq.d/
cd /etc/dnsmasq.d
ls

Veremos un nuevo archivo "spyware" en el directorio.
Reiniciar servicio dnsmasq

service dnsmasq restart

Para la prueba, utilice el equipo cliente configurado anteriormente y realizar un nslookup en cualquier nombre de dominio incluido en el archivo "spyware".

También podemos añadir nuevas listas de bloqueo en nuestro fichero dnsmasq.conf listas negras para otros también. Sólo es necesario añadir una nueva línea en el archivo dnsmasq.conf para una nueva lista (ej.: conf-file =/ etc/dnsmasq.d/porn), crear formato de lista y asegúrese de que está en la carpeta correcta /etc/dnsmasq.d en nuestro caso), y reiniciar el servicio de dnsmasq.

DHCP - dnsmasq asignando direcciones IP :
dhcp-range=192.168.0.150,192.168.0.200

De modo que nuestro archivo /etc/dnsmasq.conf queda así:


Comprobaciones finales desde el cliente:



Automatizar el proceso de descarga y formateo nuestro blacklist(s).

service crond start
chkconfig crond on

Siguiendo con Shalla Blacklists como ejemplo, formatearemos tres listas del total descargado: spyware, redirector, y porn. También es necesario estar seguro que las listas están referenciadas en el archivo /etc/dnsmasq.conf

conf-file=/etc/dnsmasq.d/spyware
conf-file=/etc/dnsmasq.d/redirector
conf-file=/etc/dnsmasq.d/porn


A continuación vamos a escribir un script (secuencia de comandos) para buscar y dar formato a nuestras listas negras. Creamos un nuevo fichero en /etc/dnsmasq.d/ directorio llamado blacklistprep.sh con el siguiente contenido:

cd /etc/dnsmasq.d
rm shallalist.tar.gz
wget http://www.shallalist.de/Downloads/shallalist.tar.gz
tar -zxvf shallalist.tar.gz
cd /etc/dnsmasq.d/BL/porn
# edit porn list for dnsmasq formatting
sed -e 's%^%address=/%' domains > porn
sed -i 's%$%/192.168.0.1%' porn
cp porn /etc/dnsmasq.d/
# edit redirect list for dnsmasq formatting
cd /etc/dnsmasq.d/BL/redirector
sed -e 's%^%address=/%' domains > redirector
sed -i 's%$%/192.168.0.1%' redirector
cp redirector /etc/dnsmasq.d/
# edit malware list for dnsmasq formatting
cd /etc/dnsmasq.d/BL/spyware
sed -e 's%^%address=/%' domains > spyware
sed -i 's%$%/192.168.0.1%' spyware
cp spyware /etc/dnsmasq.d/
service dnsmasq restart

El mismo script un poco más elaborado sería algo como esto:


Ahora, podemos programar el script con crontab para ejecutar cada semana a la medianoche. En nuestra línea de comando, introducimos:

crontab -e

00 0 * * 0 sh /etc/dnsmasq.d/blacklistprep.sh

Para ejecutar manualmente, debemos hacer lo siguiente:

cd /etc/dnsmasq.d
sh ./blacklistprep.sh

Las tres listas contienen alrededor de 873.000 entradas. A partir de este post he observado que algunas entradas (es decir, dominios), al menos en las listas de Shalla, contienen un carácter raro o dos, como el carácter de barra vertical, que hace que Dnsmasq se ahogue en el reinicio. 

Tal vez sea mejor dejar caer el reinicio del servicio al final del script blacklistprep.sh (/sbin/service dnsmasq restart) y reiniciar manualmente el servicio para atrapar a estos sucesos. 

Solucionar errores archivo porn:

Al intentar reiniciar el servicio dnsmasq nos advierte de un error en el formato de una de las entradas
dnsmasq: error at line 620442 of /etc/dnsmasq.d//porn

La solución fué sencilla, aislé la entrada del error así;
cd /etc/dnsmasq.d/
cat porn | nl | grep 406923
406923 address=/hitchbitch.tv|/192.168.0.1


Luego editar el archivo utilizando vi 
vim porn
esc 
/hitchbitch.tv
address=/hitchbitch.tv|/192.168.0.1

Borrar el caracter barra vertical que aparece justo después de tv:


guardar y cerrar
:wq
Reiniciar dnsmasq para comprobar si existen más errores. 
/sbin/service dnsmasq restart

En mi caso encontré 4 entradas erróneas:

406923 address=/hitchbitch.tv|/192.168.0.1
435758 address=/jaydenjaymes,com/192.168.0.1
501295 address=/moherland.pl,/192.168.0.1
620442 address=/sendesık.com/192.168.0.1


Otras listas no tienen que ser un problema cuando se utiliza una línea de reinicio en términos de errores en el formateo. Por ejemplo, hagamos una prueba con la lista violence repitiendo el proceso:


Fuentes de listas de dominios:

Integral: 

Ad-Blocking:

Linux es genial!

1 comentario:

  1. We are the worlds leading publisher of Squid 'Native ACL' formatted blacklists, that allow for web filtering directly with Squid proxy. Of course we also offer alternative formats for the most widely used third party plugins, such as DansGuardian and Squidguard. And while our blacklists are subscription based, they are as a result of our efforts, of a much higher degree of quality than the free alternatives.

    We hope to serve you,

    --
    Signed,

    Benjamin E. Nichols
    http://www.squidblacklist.org

    ResponderEliminar