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 to
se 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 ;)
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-block
archivo:
$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.com
ejemplo.
Un enfoque simple basado en DNS para bloquear publicidad web