iptables: build una regola contro abusi per attacchi di amplificazione DNS

Ho lavorato a build una regola per rilevare e bloccare un attacco di amplificazione DNS.

Sono rimasto bloccato e spero di trovare aiuto qui.

Posso submit qui quello che ho (bash scripting, le porzioni che riguardano il DNS):

IPTABLES='/sbin/iptables -v' SERVERIP=abcd echo '################ Previously initiated and accepted exchanges bypass rule checking #' $IPTABLES --append INPUT -m state --state ESTABLISHED,RELATED --jump ACCEPT echo '################################################ Allow unlimited outbound traffic #' $IPTABLES --append OUTPUT -m state --state NEW,ESTABLISHED,RELATED --jump ACCEPT echo '################################################################## Rules for DNS #' # DIG ANY ISC.ORG attack preventer. # QUESTION1: this one does not work, why!?!? $IPTABLES --append INPUT --proto udp --dport 53 -m string --string "isc.org" --algo bm --to 65535 --jump LOG --log-prefix "iptables: UDP ISC0 " $IPTABLES --append INPUT --proto udp --dport 53 -m string --hex-string "|03697363036f726700|" --algo bm --to 65535 --jump LOG --log-prefix "iptables: UDP ISC " $IPTABLES --append INPUT --proto udp --dport 53 -m string --hex-string "|03697363036f726700|" --algo bm --to 65535 --jump DROP # DNS DNSIPSOK list $IPTABLES --new DNSFLOODRULES $IPTABLES --append DNSFLOODRULES --source 127.0.0.1 --jump RETURN $IPTABLES --append DNSFLOODRULES --source $SERVERIP --jump RETURN $IPTABLES --append DNSFLOODRULES --jump LOG --log-prefix "iptables: UDP BLOCK " $IPTABLES --append DNSFLOODRULES --jump ACCEPT #$IPTABLES --append DNSFLOODRULES --jump DROP # I have it turned off right now, because echo '# S & D port rules' # DNS limit rule for standard acceptance # QUESTION2: can't get the connbytes to work properly :( $IPTABLES --append INPUT --proto udp --source 0/0 --dport 53 \ -m state --state NEW \ -m connbytes --connbytes 75 --connbytes-dir reply --connbytes-mode bytes -m limit --limit 1/s --limit-burst 10 --jump ACCEPT # DNS log / drop the abusers EXEPT the whitelisted IP numbers $IPTABLES --append INPUT --proto udp --source 0/0 --dport 53 -m state --state NEW --jump DNSFLOODRULES $IPTABLES --append INPUT --proto udp --source 0/0 --sport 53 -m state --state NEW --jump DNSFLOODRULES # DNS allow the whitelisted IP numbers $IPTABLES --append INPUT --proto udp --source 0/0 --dport 53 -m state --state NEW --jump ACCEPT $IPTABLES --append INPUT --proto udp --source 0/0 --sport 53 -m state --state NEW --jump ACCEPT 

DOMANDA1: Perché deve essere la string esagonale, quella semplice sarebbe più facile da mantenere, ma quella non byte, puoi dire il mio perché?

QUESTION2: Via TCPdump posso vedere che la maggior parte delle risposte sono piuttosto piccole, quindi devono essere consentiti in licenza. Anche localhost (e alcuni dei miei server la mia query il server di nomi ampiamente (DNSFLOODRULES). L'attacco di amplificazione DNS è un aumento continuo di risposte "grandi", quelle che voglio limitare.Il problema è che non posso get il " partecipa a lavorare, sono stato un po 'coinvolgente, pensando anche che dovrebbe essere arte di OUTPUT, dato che riguarda la dimensione della risposta, non la questione. Ho anche sperimentato la function "Consenti l'output illimitata parte del traffico ", ma che è andato terribilmente sbagliato.

I tuoi pensieri e l'aiuto sono molto apprezzati.

  • Esiste un agente di password per il client di row di command mysql?
  • Accesso automatico a Cygwin SSHd Autoblock
  • Quanto è sicuro per proteggere una chiave ssh senza passphrase utilizzando l'opzione "command" nel file authorized_keys?
  • Qual è il significato di "policy ACCEPT" e "policy DROP" in iptables?
  • Esecuzione di un server web dietro un firewall, è sicuro?
  • Esegui l'attività di creazione in Hudson con privilegi di root
  • Come essere noob admin del server e gestire la sicurezza su Linode / SliceHost / Webbynode?
  • Hai bisogno di una ricetta dopo un disastro di hack
  • One Solution collect form web for “iptables: build una regola contro abusi per attacchi di amplificazione DNS”

    Domanda 1:

    La string non corrisponde perché il "." non è incluso nel pacchetto. Un pacchetto DNS non contiene un "hostname" in quanto tale, ma "etichette". Nel pacchetto, each parte del nome di dominio è un'etichetta prefissata dal numero di byte per l'etichetta.

    Così "isc.org" si traduce in:

     isc: 03 69 73 63 org: 03 6f 72 67 

    Oppure nel pacchetto:

     03697363036f7267 

    Ogni etichetta è limitata a 63 byte, il nome integer è limitato a 255 byte.

    E 'spiegato nel DNS RFC:

    http://tools.ietf.org/html/rfc1035#section-2.3.4

    http://tools.ietf.org/html/rfc1035#section-4.1.2

    Domanda 2:

    È necessario triggersre la barra net.netfilter.nf_conntrack_acct per utilizzare l'opzione conntrack (vedere mantapage iptables ). Ma non credo che sia saggio usare così. Ci saranno sempre risposte legittime che sono pacchetti di grandi size.

    Forse è meglio utilizzare l'estensione hashlimit. È già stato menzionato:

    https://lists.dns-oarc.net/pipermail/dns-operations/2012-October/009321.html

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.