Se você eliminar o tráfego usando resolução de nomes com regras iptables, os nomes serão resolvidos durante a criação dessa regra. Se algo mudar, sua regra não será mais válida. Isso poderia ser uma solução (não uma beleza ...):
# 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 de dns ( udp/53
) que possuem a string hexadecimal de www.facebook.com to
ser removida. Observe que isso eliminará a resolução de nomes e não o próprio tráfego HTTP.
Os números hexadecimais separados por tubos ( |03|www|08|facebook|03|com
) são a representação do ponto .
simbol nas consultas dns. Ele dirá quantos dos seguintes recursos representarão cada parte de um FQDN (host, domínio, domínio de nível superior) Exemplo:
host: 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 o 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 um tráfego mais específico, como smtp, ftp ou http, um proxy desse protocolo deve ser melhor.
- Você está "seqüestrando" consultas de DNS e não está bloqueando o domínio. Os usuários não são assim tão burros;)