Popisu obranu proti utoku, ktery jsem nahodou dnes v noci detekoval.
Priznaky:
  * podezrele plny conntrack dotazama do DNS
  * podezrele velky tok z DNS serveru obsluhujiciho jen par domen
  * v logu bindu (syslog) zadne zaznamy, kdyz ho mate spatne nastaveny
Me konkretne chybela options "recursion no". Chybne jsem se domnival, ze vyrazenim povoleni rekurze je tato vyrazena. Neni.
   //       allow-recursion { any; };
Je treba napsat explicitne ''recursion no;''
Logovani kvuli obrovskemu toku dat je treba presmerovat jinam. Navic se tim zbytecne nebude vycerpavat kapacita na centralnim remote-log serveru, kam se vsechny syslogy on-line posilaji.
logging {
     category lame-servers { null; };
     channel security_file {
         file "/var/log/named/security.log" versions 3 size 30m;
         severity dynamic;
         print-time yes;
     };
     category security {
         security_file;
     };
};
Toto byl prvni krok k uspechu.
====== Druhy krok k uspechu ======
Priznaky utoku:
  * log je uplne plny hlasek:
Jun  6 02:14:34 www named[22552]: client 199.229.230.62#25595: query (cache) './ANY/IN' denied
Jun  6 02:14:34 www named[22552]: client 199.229.230.62#25595: query (cache) './ANY/IN' denied
Jun  6 02:14:34 www named[22552]: client 199.229.230.62#25595: query (cache) './ANY/IN' denied
Jun  6 02:14:34 www named[22552]: client 199.229.230.62#25595: query (cache) './ANY/IN' denied
Jun  6 02:14:34 www named[22552]: client 199.229.230.62#25595: query (cache) './ANY/IN' denied
Jun  6 02:14:34 www named[22552]: client 199.229.230.62#25595: query (cache) './ANY/IN' denied
zde opet perfektne zafunguje fail2ban s timto nastavenim:
[named-refused-udp]
enabled  = true
port     = domain,953
protocol = udp
filter   = named-refused
logpath  = /var/log/named/security.log
[named-refused-tcp]
enabled  = true
port     = domain,953
protocol = tcp
filter   = named-refused
logpath  = /var/log/named/security.log
Po chvili se ve vypisu iptables zacne objevovat tucny seznam podobny tomuto:
dns:/etc/fail2ban# iptables -L -n
[...]
Chain fail2ban-named-refused-udp (1 references)
target     prot opt source               destination         
DROP       all  --  24.131.123.64        0.0.0.0/0           
DROP       all  --  69.246.154.178       0.0.0.0/0           
DROP       all  --  64.120.30.66         0.0.0.0/0           
DROP       all  --  76.186.226.253       0.0.0.0/0           
DROP       all  --  82.11.150.206        0.0.0.0/0           
DROP       all  --  142.136.203.131      0.0.0.0/0           
DROP       all  --  64.31.23.230         0.0.0.0/0           
DROP       all  --  185.5.174.200        0.0.0.0/0           
DROP       all  --  67.167.168.119       0.0.0.0/0           
DROP       all  --  50.23.74.93          0.0.0.0/0           
DROP       all  --  201.124.46.222       0.0.0.0/0           
DROP       all  --  24.189.209.41        0.0.0.0/0           
DROP       all  --  81.2.197.157         0.0.0.0/0           
DROP       all  --  37.5.92.17           0.0.0.0/0           
DROP       all  --  65.128.26.184        0.0.0.0/0           
DROP       all  --  68.55.173.3          0.0.0.0/0           
DROP       all  --  184.61.247.204       0.0.0.0/0           
DROP       all  --  99.233.205.66        0.0.0.0/0           
DROP       all  --  77.96.105.112        0.0.0.0/0           
DROP       all  --  189.228.237.69       0.0.0.0/0           
DROP       all  --  200.147.38.48        0.0.0.0/0           
DROP       all  --  200.221.11.116       0.0.0.0/0           
DROP       all  --  200.147.38.49        0.0.0.0/0           
DROP       all  --  200.147.6.35         0.0.0.0/0           
DROP       all  --  208.115.222.253      0.0.0.0/0           
RETURN     all  --  0.0.0.0/0            0.0.0.0/0    
===== Bind9 notify =====
Bind DNS sends notify to all name servers expect itself and master nameserver in SOA.
    notify yes;
sends notify to all name servers in RR (except itself and SOA master)
    notify yes;
    also-notify { x.x.x.x; y.y.y.y; };
sends notify to x.x.x.x, y.y.y.y and all name servers in RR (except itself and SOA master).
    notify explicit;
    also-notify { x.x.x.x; y.y.y.y; };
sends notify to just x.x.x.x, y.y.y.y
**Upozorneni:**
takto nastaveny bind+fail2ban muze zpusobit DoS vlastniho serveru. UDP packety mohou prichazet s podvrzenou zdrojovou IP.