As tabelas IP podem permitir consultas DNS específicas com base no nome de domínio?

3

Eu tenho o iptables bloqueando todo o tráfego UDP no momento, mas quero permitir que apenas algumas consultas DNS passem.

Vamos usar o google.com como exemplo.

Estou tentando usar a correspondência de string para encontrar o nome do domínio na solicitação e permitir isso. Foi isso que eu criei.

iptables -A OUTPUT -o eth0 -p udp --sport 53 -m string --string "google.com" --algo bm -j ACCEPT

Eu também tentei --dport 53 em vez de --sport . Sem dados.

Se alguém souber como isso pode ser feito ou ver onde eu errei?

    
por Jarred Kenny 31.12.2012 / 07:31

2 respostas

2

o ponto "." em uma consulta DNS não é representada como um caractere, mas como o comprimento da seqüência que segue. Por exemplo, www.google.com é consultado como

0x03 w w w 0x06 g o o g l e 0x03 c o m

você pode facilmente permitir / bloquear consultas DNS, combinando os nomes de domínio com --hex-string. No seu caso:

-m string --algo bm --hex-string '|06 676f6f676c65 03 636f6d|' -j ACCEPT

aceita todos os pacotes DNS que contêm ".google.com".

Costumo usar essa técnica contra o ataque de amplificação de consulta do DNS.

fonte: DNS RFC 1035

    
por 11.01.2014 / 19:15
1

Para complementar o analisador do nrc, onde há um comando rápido para converter domínios na sequência hexadecimal:

DOMAIN=google.com
perl -e 'print map {chr(length($_)).$_} split /\./, "'$DOMAIN'" | xxd -p

Então, no seu caso:

DOMAIN=google.com
HEX=$(perl -e 'print map {chr(length($_)).$_} split /\./, "'$DOMAIN'"' | xxd -p)

iptables -A OUTPUT -o eth0 -p udp --sport 53 \
  -m string --hex-string "|$HEX|" --algo bm -j ACCEPT
    
por 04.06.2015 / 11:29