การปิด recursion ของ BIND DNS

จากปัญหา DNS Amplification Attack ที่พบอยู่อย่างมากในช่วงนี้ จนเป็นผลให้หลายเครือข่ายเกิดปัญหา ทั้ง spamhaus และ cloudflare ที่โดนโจมตีอย่างหนัก ก็เป็นผลจาก DNS amplification attack ที่มีการเรียก query มายัง dns server ที่เปิดให้ทำ recursion เพื่อขอ resolve name/IP ของโดเมนที่อยู่ภายนอกระบบของท่าน โดยการปลอมแปลง IP ต้นทางที่ทำการเรียก เป็น IP เป้าหมาย เมื่อ dns server ของท่านตอบ query กลับไปยัง IP เป้าหมาย (ซึ่งไม่ได้เป็นคนเรียก) ก็จะส่ง traffic กลับไปจำนวนหนึ่ง ทีนี้ หากหลายๆ server โดยเรียกพร้อมๆ กัน โดยมี IP เป้าหมายเดียวกัน หรือในเครือข่ายเดียวกัน ก็อาจทำให้ bandwidth ในเครือข่ายเป้าหมายนั้นเต็มได้ นี่เรียกว่า dns amplification attack

dns servers จำนวนมาก ไม่ได้ปิด recursion ไว้

วิธีการปิด recursion ง่ายๆ สำหรับ BIND มีดังนี้

แก้ไข /etc/named.conf

ดูตรง options ควรจะมีบรรทัดนี้ครับ

options {
...
[B]allow-recursion { 127.0.0.1; local_IP; local_IP2; };[/B]
...
};

แก้ไข และ restart named เท่านี้ ข้างนอกก็จะไม่สามารถใช้ dns ของคุณในการ query ข้อมูลที่ไม่ได้เป็นโดเมนในเครื่องนั้นหรือโดเมนของคุณแล้ว

หมายเหตุ: local_IP คือ public ip ในเครื่องนั้น หรือ ในวงของตัวเองที่อนุญาตให้มาใช้งาน dns ตัวนี้ทำ recursive ครับ

// generated by named-bootconf.pl

options {
directory “/var/named”;
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};

Bind version เก่าแบบนี้สามารถเพิ่มได้ไหมครับ

ใส่ [B]allow-recursion { 127.0.0.1; local_IP; local_IP2; };[/B] เข้าไปใน options นั่นเลยครับน้าหนึ่ง

recursion no;
allow-recursion { 127.0.0.1; };

แค่นี้พอไหมครับ Bind version มันเก่ากว่าเลยไม่มั่นใจ

ต้องลองดูครับ แต่น้าหนึ่งอ่านนี่ก่อนครับ แล้วเลือกเอาว่าระบบเราเป็นแบบไหน

http://www.thaihosttalk.com/showthread.php/72522-Spamhaus-โจมตีด้วย-DDos-300Gbps-ใหญ่ที่สุดตั้งแต่เคยมีมา-เกือบทำเน็ตยุโรปล่ม?p=665806&viewfull=1#post665806

มาแปะเพิ่มไว้ตรงนี้ รวมกันที่เดียวเลยดีกว่า

มันมีความแตกต่างระหว่าง

recursion no;

และ

allow-recursion { };

นะครับ

อันแรกคือปิด recursion เลย ไม่หา ip ของโดเมนต่างๆ ข้างนอกเลย ก็จะ strict ดีครับ แต่ถ้าใช้แนวนั้น ก็ต้องแก้ไข /etc/resolv.conf ให้ไปใช้ nameserver ของ isp อื่น ที่ยอมทำตัวเป็น resolver ให้เรา อย่าใช้ 127.0.0.1 หรือ ip ของเครื่อง เป็น nameserver เพราะมันจะไม่ตอบเวลาถามหา ip ของโดเมนที่ไม่อยู่ในระบบเรา

อันหลังคือยอมให้ named ของเราเป็นทั้ง authoritative ตอบกลับสำหรับโดเมนในระบบเราให้กับโลกภายนอกทั้งหมด (ซึ่งก็ควรจะตอบอยู่แล้ว) และ เป็นทั้ง resolver คอยไปถาม nameserver ข้างนอกให้กับเราด้วย สำหรับ query ที่มาจากพวกใน allow-recursion น่ะครับ (แต่ไม่ตอบเวลาทีคนข้างนอกถามหาโดเมนข้างนอก)

ดังนั้น เลือกเอาครับ ว่าจะทำงานแบบไหน

bind 9 น่าจะรองรับหมดแล้วมั้งครับ

Bind 8.1 ไล่ config ไม่เหมือน Bind 9 ซะทีเดียวคงต้องลอง

สำหรับเครื่อง Windows นะครับ

[COLOR=#666666][FONT=Helvetica Neue]To disable recursion on the DNS server using the Windows interface[/FONT][/COLOR]
[COLOR=#666666][FONT=Helvetica Neue][B]1.Open DNS Manager.[/B][/FONT][/COLOR]
[COLOR=#666666][FONT=Helvetica Neue][B]2.In the console tree, right-click the applicable DNS server, then click Properties.[/B][/FONT][/COLOR]
[COLOR=#666666][FONT=Helvetica Neue][B]3.Click the Advanced tab.[/B][/FONT][/COLOR]
[COLOR=#666666][FONT=Helvetica Neue][B]4.In Server options, select the Disable recursion check box, and then click OK.[/B][/FONT][/COLOR]
[COLOR=#666666][FONT=Helvetica Neue]To disable recursion on the DNS server using a command line[/FONT][/COLOR]
[COLOR=#666666][FONT=Helvetica Neue][B]1.Open a command prompt.[/B][/FONT][/COLOR]
[COLOR=#666666][FONT=Helvetica Neue][B]2.Type the following command, and then press ENTER:[/B][/FONT][/COLOR]
[COLOR=#666666][FONT=Helvetica Neue]dnscmd <ServerName> /Config /NoRecursion 1[/FONT][/COLOR]

windows 2003

http://technet.microsoft.com/en-us/library/cc787602(v=ws.10).aspx

windows 2008

http://technet.microsoft.com/en-us/library/cc771738.aspx

[COLOR=#333333]ขอบคุณครับ[/COLOR]