Soru iptables: DNS amplifikasyon saldırıları için kötüye kullanıma karşı bir kural oluşturma


DNS amplifikasyon saldırısını tespit etmek ve engellemek için bir kural oluşturmaya çalışıyorum.

Takıldım ve burada yardım bulmayı umuyordum.

Burada sahip olduğum şeyi göndereceğim (bash komut dosyası, DNS ile ilgili bölümler):

IPTABLES='/sbin/iptables -v' 
SERVERIP=a.b.c.d

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

SORU 1: Neden altıgen telli olması gerekiyor, sade olanı korumak daha kolay olurdu, ama kimse bayılmayacak, nedenini anlatabilir misin?

SORU 2: TCPdump üzerinden cevapların çoğunun oldukça küçük olduğunu görebiliyorum, böylece beyaz listeye alınmaları gerekiyor. Ayrıca localhost (ve kendi sunucularından birkaçı sorgulama yaparken isim sunucusunu kapsamlı bir şekilde (DNSFLOODRULES). DNS amplifikasyon saldırısı, sınırlamak istediğim "büyük" cevapların sürekli dalgalanmasıdır. Sorun çalışmak için 'connbytes' kısmını alamıyorum. Ben bununla biraz uğraştım, aynı zamanda ÇIKIŞ sanatı olmalı diye düşünüyorum, çünkü sorunun boyutuyla ilgili değil, soru değil. Ayrıca 'Sınırsız giden trafiğe izin ver' bölümünü denedim, ancak bu çok yanlış bir şekilde tersine döndü.

Düşünceleriniz ve yardımlarınız çok takdir ediliyor.


6
2018-02-05 16:50


Menşei


Bir DoS saldırısı olduğunda, saldırganın tüm belleğinizi yiyebileceği için, devlete ait Netfilter modülü çok tehlikelidir. Yerine gördüğünü öneririm lists.dns-oarc.net/pipermail/dns-operations/2012-October/... - bortzmeyer
bortzmeyer, bir DoS saldırısı olduğunda, bir şekilde, bir şeyden dolayı "bir saldırı" olarak adlandırıldığını hatırlamaya değer. ;-P - poige
Eğer sadece yetkili kararınız sadece dns'inizi recursion no - Marcel


Cevaplar:


Soru 1:

Dize, "." Olduğundan eşleşmiyor pakete dahil değildir. Bir DNS paketi, "etiketler" gibi bir "ana makine adı" içermez, ancak "etiketler". Pakette, alan adının her bölümü, etiket için bayt sayısıyla önceden bir etikettir.

Yani "isc.org" çevirir:

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

Veya pakette:

03697363036f7267

Her etiket 63 bayt ile sınırlıdır, tüm ad 255 bayt ile sınırlıdır.

DNS RFC'de açıklanmıştır:

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

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

Soru 2:

Conntrack seçeneğini kullanmak için net.netfilter.nf_conntrack_acct bayrağını etkinleştirmeniz gerekir (bkz. iptables manpage). Ama bunun böyle kullanılmasının akıllıca olduğunu düşünmüyorum. Her zaman büyük paketler olan meşru cevaplar olacaktır.

Belki de hashlimit uzantısını kullanarak daha iyisin. Daha önce belirtilmişti:

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


1
2018-04-05 21:10