De preferência algo semelhante a iptables
. Basicamente, quero fazer filtragem de domínio/lista branca/lista negra como faria com IPs em iptables
. Há alguma recomendação sobre como fazer isso?
Responder1
Se você eliminar o tráfego usando resolução de nomes com regras de iptables, os nomes serão resolvidos durante a criação dessa regra. Se algo mudar, sua regra não será mais válida. Esta poderia ser uma solução (não muito bonita...):
# iptables -I FORWARD -p udp --dport 53 -m string --hex-string "|03|www|08|facebook|03|com" --algo bm -j DROP
De outro host dentro da LAN:
# host www.facebook.com
www.facebook.com A record not found, try again
Basicamente, você está dizendo para todos os pacotes DNS ( udp/53
) que possuem a string hexadecimal serem www.facebook.com to
descartados. Observe que isso eliminará a resolução de nomes e não o tráfego HTTP em si.
Os números hexadecimais separados por barras verticais ( |03|www|08|facebook|03|com
) são a representação do .
símbolo de ponto nas consultas DNS. Ele dirá quantos dos seguintes caracteres representarão cada parte de umFQDN(host, domínio, domínio de nível superior) Exemplo:
hospedar:mail.google.com
representação hexadecimal:04 6d 61 69 6c 06 67 6f 6f 67 6c 65 03 63 6f 6d
"representação visual:04mail06google03com
Obtendo o pacote com 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.....
Mas lembre-se:
- Se você está tentando filtrar tráfego mais específico como smtp, ftp ou http, um proxy desse protocolo deve ser melhor.
- Você está "sequestrando" consultas de DNS e não bloqueando o domínio. Os usuários não são tão burros assim ;)
Responder2
Talvez a resposta para sua pergunta seja tarde demais, mas recentemente precisei resolver um problema parecido e o Google me traz aqui
Após pesquisas malsucedidas, escrevi um pequeno utilitário em C que intercepta respostas DNS, compara o nome de domínio com o regex fornecido e lista os endereços IP correspondentes. Aqui está:https://github.com/vmxdev/sidmat/
Você não precisa configurar seu próprio servidor DNS, o utilitário pode capturar respostas DNS de qualquer servidor
Por exemplo, para ver os endereços IP do facebook.com (e subdomínios) que foram resolvidos agora, você pode executar
# ./sidmat eth0 "^facebook\.com$|\.facebook\.com$"
173.252.120.6
...
onde eth0 é a interface de rede no roteador (ou por onde passam as respostas DNS)
Você pode integrá-lo facilmente com iptables (ou iptables com ipset)
Mas:
- utilitário é realmente simples. Ele não realiza muitas verificações, então o invasor pode enganá-lo
- esta técnica é inútil se os usuários não usarem DNS para resolução de nomes
Responder3
Para a lista negra, a maneira mais fácil é provavelmente usardnsmasq
Instalardnsmasq
$ sudo apt-get install dnsmasq
e adicione esta linha a/etc/dnsmasq.conf
address=/facebook.com/127.0.0.1
Isso irá bloquearfacebook.come todos os seus subdomínios.
Nota: Para Ubuntu vejaesta postagem.
Responder4
Se estiver executando um bind9 de cache local, ele geralmente é realizado por umdummy-block
zone "facebook.com" { type master; file "dummy-block"; };
e o dummy-block
arquivo:
$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
Veja também:
Executando BIND9 e ISC-DHCPcom facebook.com
exemplo.
Uma abordagem simples baseada em DNS para bloquear publicidade na web