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?
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?
Respuestas:
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 to
ser 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.@.@....IGB
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:
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:
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 .
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-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-DHCP con facebook.com
ejemplo.
Un enfoque simple basado en DNS para bloquear la publicidad web