Genel Yüzlü Özyinelemeli DNS Sunucuları - iptables kuralları


16

Linux makinelerinde halka açık özyinelemeli DNS sunucuları çalıştırıyoruz. DNS yükseltme saldırıları için kullanıldık. iptablesBu saldırıların azaltılmasına yardımcı olacak önerilen kurallar var mı?

Açık olan çözüm, giden DNS paketlerini belirli bir trafik seviyesiyle sınırlamaktır. Ama biraz daha akıllıca bir şey bulmayı umuyordum, böylece bir saldırı kurbanın IP adresine giden trafiği engelledi.

Tavsiye ve öneri aradım, ama hepsi "halka açık özyinelemeli ad sunucuları çalıştırmayın" gibi görünüyor. Ne yazık ki, bunu yapmazsak değiştirmesi kolay olmayan şeylerin kırılacağı bir duruma geri döndük ve bunun nedeni, bu saldırılar bir sorun haline gelmeden on yıldan fazla bir süre önce verilen kararlardan kaynaklanıyor.


2
Herkese açık bir özyinelemeli ad sunucusu çalıştırmamanızı öneren kişiler haklıdır. Görünüşe göre neden gerekli olduğunu açıklayabilir misiniz ?
Alnitak

1
@Alnitak: On yıldan uzun bir süre önce alınan kararlar nedeniyle bunu yapmazsak değiştirmesi kolay olmayan şeyler kırılacak.
David Schwartz

Evet, bunu orijinal soruda gördüm. Bu yapılandırmanın neden gerekli olduğunu açıklayabilir misiniz ?
Alnitak

2
@Alnitak: Çünkü değiştirilmesi kolay olmayan şeyler buna güveniyor. Bunlar, ürün yazılımı yanmış ve dünyanın her yerine dağıtılmış, çoğu erişemediğimiz güvenli tesislerde bulunan cihazlardır.
David Schwartz

Gömülü sistemleriniz UDP yerine TCP ad çözümlemesini destekliyor mu? Öyleyse, çözüm için UDP'yi devre dışı bırakmak ne kadar kolay olurdu?
Mike Pennington

Yanıtlar:


9

Her şey, gerçekten sizin hatanız olmayan ve "zor" veya "zor" durumdan bağımsız olarak, uygun eylemi gerçekleştirerek% 100 çözülmesi gereken / çözülebilen "sorunum değil" senaryosunun reeks . özyinelemeli sunucuyu aç .

Kullanıma alma: müşterilere bu sunucunun X tarihinden itibaren kullanımdan kaldırıldığını bildirin. Bu süreden sonra, DNS sunucunuzu kullanmasını durdurmak için bir düzeltme eki yüklemeniz gerekir (bir tane varsa). Bu her zaman yapılır. Sistem yöneticileri, ağ yöneticileri, yardım masası adamları, programcılar? Biz almak onu; bu kullanım ömrü sonu her zaman olur, çünkü bir satıcı / servis sağlayıcı / iş ortağı için X işletim tarihinden sonra bir şeyi kullanmayı bırakmamızı söylemesi için standart işletim prosedürü. Biz her zaman sevmiyoruz, ama bu BT'de yaşamın bir gerçeği.

Mevcut cihazlarda bu sorunun olmadığını söylüyorsunuz, bu yüzden bu sorunu bir ürün yazılımı güncellemesi veya yama ile çözdüğünüzü varsayıyorum. Söylediğin biliyorum sen cihazı dokunamıyorum, ama kesinlikle onlar? Sana ne esasen telefon evine bu kutuları izin eğer, gerçekten olamaz, demek o kimin yaptığını hakkında anal ne onların cihazlarına; tüm bildikleri için bir ters proxy kurulumuna sahip olabilirsiniz, o zaman neden bunları düzelten bir düzeltme eki yüklemelerine veya kendi DNS sunucularını kullanmalarını söylemelerine izin vermiyorsunuz . Elbette cihazınız DHCP'yi destekler; O (/ çelimsiz / garip kaç yaşında önemli değil) bir ağ cihazına düşünemiyorum yapmaz .

Bunu yapamazsanız, yapılacak bir sonraki şey , özyinelemeli sunucunuza kimlerin erişebileceğini denetlemektir : Kimin nasıl ve nasıl kullandığını "anlatmanın zor" olduğunu söylersiniz, ancak kesin olanı bulmanın ve trafiği düşürmeye başlamanın zamanıdır. meşru değil.

Bunlar "yarı-askeri / hükümet" örgütleri değil mi? Muhtemelen sahip oldukları meşru bir netblock'un parçasıdırlar; bu cihazlar dinamik IP'lerin arkasındaki ev yönlendiricileri değildir. Bulmak. Onlarla iletişime geçin, sorunu ve aygıtın DNS sunucunuza erişmek için kullanacağı netblock / IP adresini onaylayabilmeleri durumunda bir ürün yazılımını veya ürün değiştirmeyi zorlayarak nasıl çok para tasarrufu yaptığınızı açıklayın .

Bu her zaman yapılır: Extranet erişimini veya HL7 dinleyicilerini sağlık ortaklarına bu şekilde kısıtlayan birkaç müşterim var; o kadar zor değilbir form doldurmak ve IP ve / veya netblock sağlamak için ben trafik bekliyorum gerekir: extranet erişim istiyorlarsa, bana bir IP veya alt ağ vermek zorunda. Ve bu nadiren hareketli bir hedeftir, bu yüzden her gün yüzlerce IP değiştirme isteğiyle su altında kalabilirsiniz. beklediğim bir avuç IP adresi veya bir alt ağ; Yine, bunlar her zaman kampüste her zaman dolaşan dizüstü bilgisayar kullanıcıları değil, neden sürekli değişen bir IP adresinden UDP kaynak paketlerini görmeyi bekliyorum? Açıkçası burada bir varsayım yapıyorum, ama bahse girerim <100'lü cihaz için düşündüğünüz kadar değil. Evet, uzun bir EKL olacak ve evet,

Herhangi bir nedenle iletişim kanalları açık değilse (veya birileri bu eski cihaz sahipleriyle iletişim kurmaktan ve bunu düzgün bir şekilde yapmaktan rahatsız olmazsa), formüle edebilmek için normal bir kullanım / faaliyetin temelini oluşturmanız gerekir. DNS yükseltme saldırılarına katılmanıza yardımcı olacak (ancak engellemeyecek) bazı diğer stratejiler .

Uzun süren bir tcpdumpçalışma, gelen UDP 53 üzerinde filtreleme ve DNS sunucusu uygulamasında ayrıntılı günlük kaydı üzerinde çalışmalıdır. Ayrıca, kaynak IP adresleri / netblocks / geoIP bilgileri (ABD'deki tüm müşterileriniz mi var? Diğer her şeyi engelleyin) toplamaya başlamak istiyorum çünkü söylediğiniz gibi yeni cihaz eklemiyorsunuz , sadece eski bir mevcut kurulumlara servis.

Bu aynı zamanda anlamanıza yardımcı olacaktır kayıt türleri istenen ne ve ne için etki alanları, kime ve ne sıklıkla tarafından : amaçlandığı gibi çalışması DNS yükseltilmesi için, saldırganın ihtiyaçları talep edebilmek için büyük bir kayıt türü bir etmek (1) işleyen etki alanı (2).

  1. "büyük kayıt türü": özyinelemeli DNS sunucunuz tarafından çözülebilmesi için cihazlarınızın TXT veya SOA kayıtlarına bile ihtiyacı var mı? DNS sunucunuzda hangi kayıt türlerinin geçerli olacağını belirtebilirsiniz; BIND ve belki de Windows DNS ile mümkün olduğuna inanıyorum, ancak biraz kazma yapmanız gerekecek. DNS sunucunuz SERVFAILherhangi bir TXT veya SOA kaydına yanıt veriyorsa ve en azından bu yanıt, amaçlanan taşıma yükünden daha küçük bir (veya iki) büyüklük sırasıdır. Açıkçası hala "sorunun bir parçası "sınız, çünkü sahte dosya kurbanı bu SERVFAILyanıtları sunucunuzdan almaya devam edecektir , ancak en azından onları çekiçlemiyorsunuzdur ve belki de DNS sunucunuz hasat listelerinden" listelendi " botlar zaman içinde "işbirliği" için kullanmazlar.

  2. "işlevsel alan": yalnızca geçerli alan adlarını beyaz listeye ekleyebilirsiniz. Bunu, sunucuların çalışması için yalnızca Windows Update, Symantec vb.'ye ihtiyaç duyduğu sertleştirilmiş veri merkezi kurulumlarımda yaparım. Ancak, sadece bu noktada neden olduğunuz hasarı hafifletiyorsunuz: kurban yine de sunucunuz sahte kaynak IP'sine yanıt vereceğinden sunucunuzla bombardımana uğramış NXDOMAINveya SERVFAILsunucunuzdan yanıt almıştır. Yine, Bot betiği sonuçlara göre açık sunucu listesini otomatik olarak güncelleyebilir, böylece sunucunuz kaldırılabilir.

Ayrıca, uygulama düzeyinde (yani mesaj boyutu, istemci sınırlamaları başına istekler) veya güvenlik duvarı düzeyinde (diğer yanıtlara bakın), diğerlerinin de önerdiği gibi, bir tür hız sınırlaması kullanacağım, ancak yine de, yasal trafiği öldürmediğinizden emin olmak için bazı analizler yapmanız gerekir.

Ayarlanmış ve / veya eğitilmiş bir Saldırı Tespit Sistemi (yine, burada bir taban çizgisine ihtiyaç duyar) zaman içinde anormal trafiği kaynak veya hacim ile de tespit edebilmeli, ancak muhtemelen yanlış pozitifleri önlemek için düzenli bebek bakımı / ayar / izleme alacak ve veya saldırıları gerçekten önleyip önlemediğine bakın.

Günün sonunda, tüm bu çabaların buna değip değmeyeceğini veya sadece doğru şeyin yapıldığını ısrar edip etmediğinizi ve ilk etapta sorunu ortadan kaldıracağınızı merak etmelisiniz.


1
Bir yama mümkün değil. Artık bazı platformlar için çalışan donanım üretmiyoruz bile. Trafik bekledikleri netblock gelince, onlar genellikle bilmiyorlar. Bu cihazların bazılarının içinde bulunduğu ortamın ne kadar sıra dışı olduğunu takdir ettiğinizden emin değilim. Bazıları kendi DNS şemalarına sahip oldukları özel ağlarda ve sistemin etrafında nasıl kurulduğunu bile bilen hiç kimse olmayabilir. yukarı. Temel olarak sözleşme bitene kadar çalışmaya devam etmeliyiz.
David Schwartz

O zaman yapabileceğiniz en iyi şey, bazı analizler yapmak istemiyorsanız, hızı sınırlama ile sorunu bandaid etmektir. Dürüst olmak gerekirse, bu sistemler statik / ihmal edilmişse, ayak izleri değişmeyecektir ve muhtemelen hepsini topladıktan sonra kaynak IP ile katman 3 ACL'lerinden kurtulabilirsiniz.
gravyface

1
Karma bir yaklaşım düşünüyorum. Tanımlayabildiğimiz beyaz liste IP'leri (belki de yüksek bir sınıra tabi olabilir). Diğer IP'leri oldukça düşük bir sınıra tabi tutun. Herhangi bir IP'nin beyaz listeye eklenmesi veya beyaz listeden kaldırılması gerekip gerekmediğini görmek için düzenli olarak denetleyin.
David Schwartz

@DavidSchwartz yüksek bir limite bile ihtiyacınız olmayabilir. Yine, yasal trafiğin temeline sahip olmak son derece yardımcı olacaktır.
gravyface

6

Bu, yapmak istediğiniz oran sınırlama türüne bağlıdır.

Hız sınırlaması, iptablesgelen paketleri sınırlamak için daha çok amaçlanmıştır, çünkü sınıra kadar olan paketler filtreyle eşleşecek ve belirtilen hedef uygulanacaktır (örn ACCEPT.). Muhtemelen DROPfiltre ile eşleşmeyen paketler için bir sonraki hedefiniz olacaktır . Ve iptablesbir QUEUEhedefi olmasına rağmen , paketi yalnızca kendi kuyruğa alma uygulamanızı sağlamanız gereken kullanıcı alanına geçirir. Ayrıca, giden paketleri sınırlandırabilirsiniz, ancak çok az kişi gerçekten giden trafiği düşürmeye başlamak istemektedir.

iptables oran sınırı düşürme:

iptables -A INPUT -p udp --port 53 -m hashlimit --hashlimit 1/minute --hashlimit-burst 5 -j ACCEPT
iptables -A INPUT -p udp --port 53 -j DROP

Bunun hashlimityerine, limithedef IP başına hız sınırlaması sağlar. Yani, 8,8,8,8 ile sınırın üzerine çıkan beş paket, paketlerin 8,8,4,4'e gönderilmesini engellerken, 8,8,8,8 maksimum ise hashlimit, 8,8,4,4'e ulaşabilir ve bu da istediğiniz gibi görünür.

Sınırı aşan paketlerin bırakılmasını istemiyorsanız, gerçekten istediğiniz şeydir tc. tcçok fazla yoğun trafik yerine güzel bir sabit akış elde etmek için akışı düzenler. Gelen tarafta paketler uygulamaya daha yavaş teslim edilir, ancak hepsi sırayla gelir. Giden paketler üzerinde uygulamanızı mümkün olduğu kadar hızlı bırakacak, ancak kabloya tutarlı bir akışta yerleştirilecektir.

Çok tcfazla kullanmadım, ancak burada muhtemelen DNS için kolayca uyarlayabileceğiniz hız sınırlayıcı ICMP örneği .


1
: (Fiili açık Resolver için kullanılır) bu kurulumu hakkında Fransızca makalem bortzmeyer.org/rate-limiting-dns-open-resolver.html
bortzmeyer

4

Sahte sorgulara verilen yanıtları potansiyel olarak azaltmak için yapabileceğiniz bir şey var, ancak biraz iş gerekiyor:

Öncelikle, güvenlik kanalı günlüğünüze bir göz atın ve sahte olan bir IP adresi bulun.

Ardından, aşağıdaki kaynak IP'yi (10.11.12.13) kullanarak bir tcpdump çalıştırın:

tcpdump -n src 10.11.12.13 and udp dst port 53 -v -X -S

Bunun gibi bir şey elde edersiniz:

18: 37: 25.969485 IP (tos 0x0, ttl 52, kimlik 46403, ofset 0, bayraklar [yok], proto: UDP (17), uzunluk: 45) 10.11.12.13.51169> 01.02.03.04. Alan adı: 4215+ ANY ? . (17)
        0x0000: 4500 002d b543 0000 3411 b9d9 0A0B 0C0D E ..-. C..4 .......
        0x0010: 0102 0304 c7e1 0035 0019 0e89 1077 0100 ....... 5 ..... w ..
        0x0020: 0001 0000 0000 0000 0000 ff00 0100 ..............

Şimdi eğlenceli kısmı! En rfc1035 açın http://tools.ietf.org/html/rfc1035 ve bölüm 4.1.1 dönüyoruz.

Tcpdump'ın sonuçlarını çevirme ve paket düzeyinde bir filtre oluşturmak için kullanabileceğimiz bir model bulmanın zamanı geldi.

Başlığın kimliği 0x1C'de başlar, bu nedenle 0x1E'de bazı bayraklar, 0x20'de QDCOUNT, 0x22'de ANCOUNT, 0x24'te NSCOUNT ve 0x26'da ARCOUNT var.

Bu, asıl soruyu 0x28'de bırakır; bu durumda NAME için null (ROOT), QTYPE = ANY için 0xFF ve QCLASS = IN için 0x01 olur.

Uzun bir hikaye kısaltmak için, aşağıdaki iptables kuralının eklenmesinin, KÖKTE HERHANGİ kayıt talep eden sahte sorguların% 95'inden fazlasını engellediğini gördüm:

iptables -A INPUT -p udp --dport domain -m u32 --u32 "0x28=0x0000ff00" -j DROP

Kilometreniz değişebilir ... umarım bu yardımcı olur.


3

tcGiden bağlantı noktası 53 UDP için Linux'ta disiplinleri kullanma ve kuyruğa alma:

IFACE=eth0    
tc qdisc  add dev ${IFACE} root handle 1: htb default 0
tc class  add dev ${IFACE} parent 1: classid 1:1 htb rate   10mbit burst 20m
tc qdisc  add dev ${IFACE} parent 1:1 handle 10: sfq perturb 1
tc filter add dev ${IFACE} protocol ip parent 1:0 prio 1 handle 1 fw flowid 1:1

discGüvenlik duvarı işareti '1' olan herhangi bir paket için sizi 10mbit ile sınırlı tutacak. Güvenlik duvarı işaretleri yalnızca güvenlik duvarının içindedir ve paketi değiştirmez. Paketin kuyruk disiplini tarafından işlenmesi. iptablesGüvenlik duvarı işaretlerini yapmak için şu şekilde kullanabilirsiniz :

iptables -A PREROUTING -o eth0 -p udp --sport 53 -t mangle -j MARK --set-mark 1
iptables -A PREROUTING -o eth0 -p udp --dport 53 -t mangle -j MARK --set-mark 1

Güvenilir alt ağları ve / veya hedefleri hariç tutmak için istediğiniz şekilde değiştirin. -o eth0Giden paketler sadece şekillendirme sınırlar. Bu yardımcı olur umarım.


DNS UDP ve TCP kullanıyor ...
Patrick Mevzek

1

Dışarıdan bakan özyinelemeli çözümleyicilere güvenen tüm istemcilerin bir listesini oluşturmaya çalışırdım. DNS kutularındaki paket izlerinden bir gün ile başlayın. Oradan, tanıdığınız ve yetkilendirdiğiniz trafiğe izin vermek için iptables kuralları oluşturmaya başlayın. Varsayılan değer, sonunda trafiği 53 / tcp ve 53 / udp'ye düşürmek olacaktır. Bu bir şeyleri bozarsa, kurallarınıza ince ayar yapın.


1

bulunduğunuz ağın 'konumuna' bağlı olarak [birden fazla bgp beslemesine sahip olmak veya internetin 'saplama ağı olarak bulunmak') kaynak adres sahteciliğini önlemek için uRPF gibi bir şey deneyebilirsiniz .

diğer bilgi kaynağı.


URPF'yi yalnızca kendi istemcilerinizin sahtekarlık yapmasını engellemek için kullanabilirsiniz. Yani uRPF'nin bana fayda sağlayabilmesinin tek yolu, eğer herkesi kullanmam gerektiğiydi. Kendi müşterilerim tarafından başlatılan saldırılardan endişe etmiyorum. İnternetten gelen saldırılardan endişeliyim. URPF'yi istemci olmayan bir bağlantıda çalıştırmanın bir yolu yoktur. Ya asimetrik yönlendirme normdur (birden fazla gerçek bağlantınız varsa) veya her rota bu bağlantıyı işaret eder (yalnızca tek bir gerçek bağlantınız varsa).
David Schwartz

@ DavidSchwartz yanıtımı silmeye karar verdim. Sizin durumunuzda çok yararlı olmadığını anlıyorum ama diğerleri için yararlı olabilir. ilginç durum btw - gelmek için başka cevaplar merak ediyorum.
pQd

1

Bu cihazlar hala bir destek sözleşmesi kapsamında mı? Öyleyse, müşterilerinize ulaşın. Son on yılda internetin biraz geliştiğini bildirin ve bu cihazlar için ad çözümlemesi sağlamaya devam etmek için sorgu beklemek için SRC IP'sini bilmeniz gerekir. Gelecekte ~ 6 ay sonra, bilinmeyen müşterilere artık hizmet veremeyeceğiniz bir tarih belirleyin ve buna sadık kalın. Bu sektörde oldukça yaygındır. Bu cihazlar artık bir destek sözleşmesi kapsamında değilse ... iş kararı gibi geliyor. Şirketiniz ne kadar zamandır artık gelir getirmeyen eski ürünler için kaynak harcamayı planlıyor?

Bunlar özel cihazlara benziyor, hangi alanların meşru sorgu beklemesini makul olarak tahmin edebileceğiniz kadar uzmanlar? bind, görünümleri destekler, yalnızca bu alan adları için özyineleme yapan genel bir görünüm oluşturur.

Bunu bir öğrenme fırsatı olarak kullanın, henüz yapmadıysanız, hataları düzeltme yeteneğinizin olmadığı ürünleri bırakmayı bırakın. İşte bu, bir böcek. Kesinlikle bu cihazı erken, er ya da geç EOL yapacak.


1
Diğer cevapları okumak. Gerçekten bir yama geliştiremeyeceğinizi söylüyorsunuz çünkü artık test edecek donanıma sahip değilsiniz. Bu durumda, mevcut destek sözleşmeleriniz ne kadar geçerli? Bu 'desteklenen' cihazlardan birinde donanım hatası olursa ne yapardınız? Burada da aynı şeyi yapın.
Jason Preston

Donanımı desteklemiyoruz. Donanıma dokunmamıza bile izin verilmiyor . Donanım arızalanırsa, yok edilir ve değiştirilir. Uzak altyapıyı destekliyoruz ve 2015 yılına kadar sözleşmeyle bunu yapmak zorundayız. (Test edilecek donanıma sahip olmadığımız için değil, testi yapamayız. Herhangi bir değişiklik, artık onay standardının süresi dolduğundan artık mümkün değil. Hükümetlerle ilgilenmeye hoş geldiniz.)
David Schwartz

1

Bir yerlerde nanog'dan, bu:

iptables -A INPUT -p udp --dport 53 -m hashlimit \
--hashlimit-name DNS --hashlimit-above 20/second --hashlimit-mode srcip \
--hashlimit-burst 100 --hashlimit-srcmask 28 -j DROP 

Bu ideal değil. Saniyede daha az pakete izin vermek ve daha yüksek bir patlamaya sahip olmak daha iyi olabilir.


-1

İşte DDOS saldırılarına karşı birkaç kez kullandığım bir çözüm, mükemmel değil ama bana yardımcı oldu. Çözüm, her N dakikada bir (1,2,3 vb. Dakika) cron tarafından çağrılan bir komut dosyasından oluşur ve komut dosyasında verilenden daha büyük sayıda bağlantı oluşturan IP'leri engeller:

#!/bin/sh

PORT_TO_CHECK="53"
CONNECTION_LIMIT="20"
IPTABLES="/sbin/iptables"

netstat -an > /tmp/netstat.tmp
Buf_var1=`cat /tmp/netstat.tmp | grep -v "LISTEN"| grep ":$PORT_TO_CHECK\ " | grep -v "0.0.0.0" | awk '{print $5}' | grep -v ":$PORT_TO_CHECK$" | sed -e 's/^::ffff://g' -e 's/:.*$//g' | sort | uniq`
i=0
banned_flag=0
for conn in `for i in $Buf_var1; do echo -n "$i "; cat /tmp/netstat.tmp | grep -c $i;done | grep -v "=\ 0"`;do
[ $i = 0 ] && connip=$conn && i=1
[ $i = 2 ] && {
connum=$conn
[ $connum -ge $CONNECTION_LIMIT ] && {
[ "$var_test" = "" ] && {
$IPTABLES -I INPUT -s $connip -j DROP
banned_flag=1
}
}
}
[ $banned_flag = 1 ] && i=0
[ $i = 1 ] && i=2
done
rm -f /tmp/netstat.tmp

3
Çalışacağını sanmıyorum: DNS, UDP üzerinden istek / yanıt ve açık bağlantılar bırakmıyor.
bortzmeyer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.