iptables soltar respostas de DNS negativas

2

Como eliminar as respostas DNS negativas recebidas no Linux? (Eu quero um tempo limite) Estou pensando em criar uma regra do iptables:

iptables -I INPUT -p udp --sport 53 -m u32 ...

De wireshark:

000E start of IP Packet (fixed, at first, I wrote 0010)
0022 start of UDP Packet
002A start of DNS message
002C  Flags
        .... .... .... 0000 = Reply code: No error (0)
        .... .... .... 0011 = Reply code: No such name (3)

Acho que o deslocamento para -m u32 é contado a partir do cabeçalho ip. Também subtrai 2 para obter um 32bit.

$ echo $(( 0x002C - 0x000E - 2 ))
28

A máscara para os últimos 4 bits é 0xF
Então a regra deveria ser algo assim:

iptables -I INPUT -p udp --sport 53 -m u32 --u32 "28&0xF=3" -j DROP
    
por basin 10.02.2013 / 08:23

2 respostas

3

Deslocamento para sinalizadores de DNS no pacote ip é de 28 bytes e você precisa verificar os últimos 2 bits no campo de 2 bytes A regra do u32 para isso é "28&0x000F=0x03"

Minha regra de teste é: iptables -A INPUT -m u32 -p udp --sport 53 --u32 "28&0x000F=0x03" -j LOG

BTW Gosto da idéia de usar essa regra de firewall para o DNS split horizon, testando-a em algumas de minhas redes.

    
por 10.02.2013 / 09:11
2

Isso diminui as respostas "rejeitadas" do BIND9 às consultas UDP falsificadas atuais!

iptables -F OUTPUT 
#iptables -A OUTPUT -p udp --sport 53 -j LOG --log-prefix="OUT-UPD-RAW : "
#iptables -A OUTPUT -m u32 -p udp --sport 53 --u32 "28&0xFFFF=0x8105" -j LOG --log-prefix="STOPPED-DNS-REJECTED-REPLY "
iptables -A OUTPUT -m u32 -p udp --sport 53 --u32 "28&0xFFFF=0x8105" -j DROP
iptables -A OUTPUT -p udp --sport 53 -j LOG --log-prefix="OUT-UPD-SENT: "
    
por 20.03.2014 / 04:44