¿Cómo hacer el filtrado de dominios en Linux?

12

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


fuente
¿Qué / por qué estás tratando de bloquear? ¿Está tratando de filtrar HTTP o SMTP o NTP salientes / entrantes? Se pueden usar diferentes herramientas para diferentes escenarios.
Creek
1
Algunas sugerencias que podrían ayudarlo son denyhosts.sourceforge.net/faq.html y fail2ban.org/wiki/index.php/Main_Page .
Ramesh
1
@josten idealmente usaría un proxy HTTP como Squid . El bloqueo de los nombres de dominio en el iptablesse puede hacer , pero puede ser arriesgado
Creek

Respuestas:

8

Si elimina el tráfico utilizando la resolución de nombres con las reglas de iptables, los nombres se resolverán durante la creación de esa regla. Si algo cambia, tu 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, estás diciendo a cada paquete dns ( udp/53) que tiene la cadena hexadecimal de www.facebook.com toser descartada. Tenga en cuenta que esto eliminará la resolución de nombres, y no el tráfico http en sí.

Los números hexadecimales separados con tuberías ( |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 un FQDN (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á tratando de filtrar traffig más específicos como smtp, ftp o http, un proxy de ese protocolo debería ser mejor.
  • Estás "secuestrando" consultas dns y no bloqueando el dominio. Los usuarios no son tan tontos;)

Fuentes: aquí y aquí


fuente
¿Por qué algo tipo es bm?
Gaurav Kansal
Algoritmo Boyer-Moore - en.wikipedia.org/wiki/…
4

Tal vez la respuesta a su pregunta es demasiado tarde, pero recientemente tuve que 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 de DNS, compara el nombre de dominio con las expresiones regulares dadas y enumera las direcciones IP coincidentes. Aquí está: https://github.com/vmxdev/sidmat/

No necesita configurar su propio servidor DNS, la utilidad puede detectar 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 donde pasan las respuestas DNS)

Puede 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
vmx
fuente
3

Para poner en la lista negra, la forma más fácil es usar dnsmasq

Instalar en pc dnsmasq

$ sudo apt-get install dnsmasq

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

address=/facebook.com/127.0.0.1

Esto bloqueará facebook.com y todos sus subdominios.

Nota: Para ubuntu ver esta publicación .

exprimir
fuente
1

Si ejecuta un enlace de almacenamiento en caché local, a menudo se realiza mediante un dummy-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-DHCP con facebook.comejemplo.

Un enfoque simple basado en DNS para bloquear la publicidad web


fuente