¿Cómo hacer filtrado de dominios en Linux?

¿Cómo hacer filtrado de dominios en Linux?

Preferiblemente algo similar a iptables. Básicamente, quiero hacer filtrado de dominios/listas blancas/listas negras como lo haría con las IP en iptables. ¿Hay alguna recomendación sobre cómo hacer esto?

Respuesta1

Si reduce el tráfico mediante la resolución de nombres con reglas de iptables, los nombres se resolverán durante la creación de esa regla. Si algo cambia, su regla ya no será válida. Esta podría ser una solución (no una hermosa...):

# iptables -I FORWARD -p udp --dport 53 -m string --hex-string "|03|www|08|facebook|03|com" --algo bm -j DROP

Desde otro host dentro de la LAN:

# host www.facebook.com
www.facebook.com A record not found, try again

Básicamente, le está diciendo a cada paquete dns ( udp/53) que tenga la cadena hexadecimal que www.facebook.com tose elimine. Tenga en cuenta que esto reducirá la resolución de nombres y no el tráfico http en sí.

Los números hexadecimales separados con barras verticales ( |03|www|08|facebook|03|com) son la representación del .símbolo de punto en las consultas DNS. Dirá cuántos de los siguientes caracteres representarán cada parte de unFQDN(host, dominio, dominio de nivel superior) Ejemplo:

anfitrión:mail.google.com

representación hexadecimal:04 6d 61 69 6c 06 67 6f 6f 67 6c 65 03 63 6f 6d

"representación visual:04mail06google03com

Obteniendo el paquete con tcpdump:

# tcpdump -i eth0 -X dst port 53

15:50:11.643672 IP xxx.xxx.xxx.xxx:xxx > ns4.google.com.domain: 16530 A? mail.google.com. (33)
        0x0000:  4500 003d 779a 4000 4011 b390 c949 4742  E..=w.@[email protected]
        0x0010:  d8ef 260a 8424 0035 0029 0fc0 4092 0000  ..&..$.5.)..@...
        0x0020:  0001 0000 0000 0000 046d 6169 6c06 676f  .........mail.go
        0x0030:  6f67 6c65 0363 6f6d 0000 0100 01         ogle.com.....

Pero recuerda:

  • Si está intentando filtrar tráfico más específico como smtp, ftp o http, un proxy de ese protocolo debería ser mejor.
  • Estás "secuestrante" consultas DNS y no estás bloqueando el dominio. Los usuarios no son tan tontos ;)

Fuentes:Aquíyaquí

Respuesta2

Quizás la respuesta a tu pregunta sea demasiado tarde, pero recientemente necesitaba resolver un problema similar y Google me trae aquí.

Después de búsquedas fallidas, escribí una pequeña utilidad en C que intercepta las respuestas DNS, compara el nombre de dominio que contiene con la expresión regular dada y enumera las direcciones IP coincidentes. Aquí lo tienes:https://github.com/vmxdev/sidmat/

No necesita configurar su propio servidor DNS, la utilidad puede capturar respuestas DNS de cualquier servidor

Por ejemplo, para ver las direcciones IP de facebook.com (y subdominios) que están resueltas en este momento, puede ejecutar

# ./sidmat eth0 "^facebook\.com$|\.facebook\.com$"
173.252.120.6
...

donde eth0 es la interfaz de red en el enrutador (o por donde pasan las respuestas DNS)

Puedes integrarlo fácilmente con iptables (o iptables con ipset)

Pero:

  • La utilidad es realmente simple. No realiza muchas comprobaciones, por lo que el atacante puede engañarlo.
  • esta técnica es inútil si los usuarios no usan DNS para la resolución de nombres

Respuesta3

Para incluir en la lista negra, la forma más sencilla probablemente sea utilizardnsmasq

Instalardnsmasq

$ sudo apt-get install dnsmasq

y agregue esta línea a/etc/dnsmasq.conf

address=/facebook.com/127.0.0.1

Esto bloquearáfacebook.comy todos sus subdominios.

Nota: Para ubuntu veresta publicación.

Respuesta4

Si se ejecuta un enlace de almacenamiento en caché local9, a menudo se realiza mediante undummy-block

zone "facebook.com" { type master; file "dummy-block"; };

y el dummy-blockarchivo:

$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                          2         ; Serial
                     604800         ; Refresh
                      86400         ; Retry
                    2419200         ; Expire
                     604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.
@       IN      A       127.0.0.1
*       IN      A       127.0.0.1   

Ver también:

Ejecutando BIND9 e ISC-DHCPcon facebook.comejemplo.

Un enfoque simple basado en DNS para bloquear publicidad web

información relacionada