Bom dia a todos.
Ultimamente tenho visto bastante tráfego de DNS causado por banners e popup’s que inundam de querys os dns servers que administro.
Com tanta query, o load nos servidores sofre introduzindo-se latência indesejada nas respostas.
Assim sendo, como resolver?
Após algumas pesquisas pelo google cheguei à ideia abaixo. Simples, direta e out-of-the-box.
As querys de DNS em si são simples e não encriptadas, pelo que forma mais rápida de resolver a questão é utilizar as firewalls de perímetro bloquear a query em si.
Isto pode ser facilmente efetuado utilizando iptables, e fazendo estes bloquear certas strings hexadecimais presentes nos pacotes.
O truque reside aqui. As querys de DNS não contem a string total, mas são codificadas da seguinte maneira: X domain Y TLD.
Neste caso o X é o numero de bytes na porção de domínio e Y é o numero de bytes na secção de TLD.
Para fazer esta gestão, é necessário que as vossas regras de iptables sejam algo como isto (vamos imaginar que o domínio em questão é o .facebook.com):
iptables -A INPUT -i $interface -p udp –dport 53 -m string –hex-string “|09|facebook|03|com” –algo bm -j DROP
iptables -A INPUT -i $interface -p udp –dport 53 -m string –hex-string “|03|www|07|facebook|04|com” –algo bm -j DROP
Construções avançadas de regras:
Observando sob uma lupa, uma query é algo como domain Y TLD o onde o zero indica que não existem mais partes do domínio. Isto é imediatamente seguido por dois bytes que indicam o tipo de query.
Isto em si permite que se possam construir regras elaboradas, que bloqueiam apenas alguns tipos de queries de domínio enquanto se permitem as restantes.
Tipo | Hexadecial Code |
---|---|
Any | 00ff |
A | 0011 |
CNAME | 0005 |
MX | 000f |
AAAA | 001c |
NS | 0002 |
SOA | 0006 |
Se por exemplo se quiser bloquear todas as querys MX para o domínio outlook.com, teremos algo como:
iptables -A INPUT -i $interface -p udp –dport 53 -m string –hex-string “|06|outlook|03|com|00000f|” –algo bm -j DROP
Não se esqueçam de como o iptables converte as regras para hexadecial, é boa ideia ter comentários em cada regra de forma a que se consigam orientar utilizando o iptables -vnL
Abr,
Nuno
Referencias: Este post é uma tradução/adaptação para Português deste site. O meu obrigado a eles.