การบล็อกการเชื่อมต่อทั้งหมดนอกสหรัฐอเมริกานอกเหนือจากพอร์ต 80 จะทำให้เซิร์ฟเวอร์โหลดสูงหรือไม่


16

เช่นเดียวกับเซิร์ฟเวอร์ส่วนใหญ่ (ฉันคิดว่า) เรามีคนพยายามบังคับให้บริการของเรา 24/7 ฉันมีบัญชีดำของ cpHulk แต่ดูเหมือนว่ามันจะดีกว่าถ้าพวกเขาไม่ได้ไปไกลตั้งแต่แรก ตัวฉันและโฮสต์ของฉันเป็นคนเดียวที่เชื่อมต่อกับเซิร์ฟเวอร์บนพอร์ตอื่นที่ไม่ใช่ 80 ดังนั้นฉันต้องการบล็อกการเชื่อมต่อจากทุกประเทศนอกสหรัฐอเมริกายกเว้นพอร์ต 80 ฉันติดต่อโฮสต์ของฉันเพื่อตั้งค่านี้ แต่พวกเขา ลังเลเพราะพวกเขาบอกว่าจะสร้างเซิร์ฟเวอร์ที่มีภาระสูงมาก เป็นเซิร์ฟเวอร์ Xeon 1230 เฉพาะที่มี 32GB RAM ใช้งาน CentOS 6.6 และ iptables

ครั้งแรกด้วยเหตุผลใดที่จะไม่ทำเช่นนี้? ประการที่สองสิ่งที่โฮสต์ของฉันบอกฉันถูกต้องคืออะไร? ประการที่สามมีวิธีใดที่จะทำให้สำเร็จโดยไม่กระทบต่อประสิทธิภาพสูง?


12
มันโชคร้ายที่ผู้ให้บริการโฮสติ้งของคุณไม่ได้พูดถึง "แต่มีวิธีมาตรฐานอุตสาหกรรมในการทำสิ่งเดียวกันกับที่คุณต้องการด้วยการบำรุงรักษาที่น้อยกว่าความปลอดภัยที่ดีขึ้นและโหลดเซิร์ฟเวอร์ต่ำที่เรียกว่า Explicit Deny All และฉันจะตั้งค่าให้คุณภายใน 20 นาที " - นั่นคือสิ่งที่ฉันคาดหวังว่าจะได้ยินจากระบบดูแลระบบที่คุ้มค่ากับเก้าอี้ที่พวกเขานั่ง
corsiKa

เพียงแค่บล็อกพวกเขาเมื่อพวกเขาละเมิด ... การบำรุงรักษาน้อยที่สุดด้วยวิธีนี้ ... ด้วยตารางเต็มรูปแบบที่คุณต้องอัปเดต
Skaperen

คำตอบ:


33

การตั้งค่ากฎเฉพาะเพื่อบล็อกทุกช่วง IP (โดยการแสดงรายการทุกช่วง) เป็นวิธีที่ผิด

ตั้งกฎเริ่มต้นใน iptables เพื่อลดทราฟฟิกทั้งหมดไปยังพอร์ตการจัดการของคุณ จากนั้นเพิ่มกฎเพื่ออนุญาตการเข้าถึงจาก IP ที่เชื่อถือได้เท่านั้น (ของคุณและโฮสต์ของคุณ)

การปิดกั้นทุกอย่างเป็นค่าเริ่มต้นและอนุญาตเฉพาะการรับส่งข้อมูลที่ได้รับอนุมัติเท่านั้นโดยทั่วไปจะเรียกว่า "ปฏิเสธอย่างชัดเจน" และถือว่าเป็นวิธีปฏิบัติที่ดีที่สุด ในกรณีนี้ยังช่วยหลีกเลี่ยงผลกระทบต่อประสิทธิภาพที่โฮสต์ของคุณกังวล


ทำไมถ้าคุณรู้ว่ามันชัดเจนทั้งหมดปฏิเสธเมื่อคุณปฏิเสธโดยปริยายทุกคนโดยชัดแจ้งเพียงไม่กี่ IP ที่ผ่านไฟร์วอลล์?
เบ็น

ไม่มีอะไรโดยนัยเกี่ยวกับเรื่องนี้จริงๆ ...
mr-sk

ข้อกังวลที่อาจเกิดขึ้นสำหรับรายการที่อนุญาตพิเศษคือการเข้าถึงระยะไกล คุณจะต้องมี VPN ที่เชื่อถือได้ (แยกต่างหากจากเซิร์ฟเวอร์นี้) และอนุญาตช่วง IP ด้วย
Foo Bar

9

ในการทำเช่นนี้คุณจะต้องเพิ่มกฎไฟร์วอลล์เป็นหมื่นกฎหนึ่งกฎสำหรับแต่ละ netblock ซึ่งประเทศหนึ่งอาจมี netblock ได้ตั้งแต่หนึ่งถึงหลายพันบล็อก

เมื่อมีคำขอเข้ามามันจะต้องถูกตรวจสอบกับกฎทุกข้อซึ่งใช้เวลาน้อยมากสำหรับไม่กี่โหลหรืออาจจะเป็นกฎสองสามร้อย แต่มีกฎมากเท่าที่คุณจะต้องใช้ (1) ทุก ๆ คำขอจะช้าลงอย่างเห็นได้ชัดและ (2) จะใช้ CPU เป็นจำนวนมาก

วิธีการทำเช่นนี้โดยไม่มีผลกระทบต่อประสิทธิภาพที่สำคัญคือการทำสิ่งที่คุณทำอยู่แล้ว: การบล็อกเฉพาะที่อยู่ที่มีปัญหา


ขอบคุณสำหรับคำตอบ Michael ไม่มีวิธีใดที่จะอนุญาต IP ของสหรัฐอเมริกาเท่านั้นจึงต้องตรวจสอบกฎเดียวเท่านั้น
Big Iron

2
@BigIron แน่นอนไม่ นอกจากนี้ยังมี netblocks จำนวนมากในสหรัฐอเมริกา คุณแพ้ทางใดทางหนึ่ง
Michael Hampton

1
@SamuelEdwinWard ไม่ไม่ได้ แม้ว่าพวกมันจะถูกกระจายไปทั่วสถานที่ แต่โดยทั่วไปรายการบล็อกดังกล่าวไม่ได้มีจำนวนเกินกว่าสองสามร้อยรายการ
Michael Hampton

1
คุณมีการอ้างอิงถึงความสำคัญของการชะลอตัวหรือไม่? การค้นหาแบบเชิงเส้นแม้ว่าชุดกฎทั้งหมดจะฟังดูไร้ประสิทธิภาพอย่างน้อยที่สุดการค้นหาแบบไบนารี่อย่างน้อยก็หมายความว่าการค้นหาตารางกฎ 60,000 ตารางจะใช้โพรบ 16 ชุดในตารางเท่านั้นและอาจเร็วกว่าการปล่อยให้ทราฟฟิกผ่านเว็บเซิร์ฟเวอร์ ต้องเรียกใช้งานดิสก์ I / O เพื่อให้บริการตามคำขอ ฉันไม่พบเมตริกใด ๆ ในชุดกฎขนาดใหญ่ใน iptables
จอห์นนี่

1
@Johnny netfilter (iptables) ดำเนินการตามกฎของมันเชิงเส้นตรงที่น่าเสียดาย: serverfault.com/questions/334885//
Ross Ridge

5

สิ่งที่คุณต้องการคือเครื่องมือที่เรียกว่า ipsets

ชุด IP เป็นเฟรมเวิร์กภายในเคอร์เนล Linux ซึ่งสามารถจัดการได้โดยยูทิลิตี้ ipset ขณะนี้ชุด IP อาจเก็บที่อยู่ IP (TCP / UDP) หมายเลขพอร์ตหรือที่อยู่ IP ที่มีที่อยู่ MAC ในทางใดทางหนึ่งเพื่อให้แน่ใจว่ามีความเร็วฟ้าผ่าเมื่อจับคู่รายการกับชุด

สิ่งสำคัญที่ควรทราบที่นี่คือมันเร็วฟ้าผ่า! นั่นเป็นเพราะเครือข่ายไอพีจำนวนมากสามารถถูกแฮชเพียงอันเดียวแทนที่จะเป็นหลายร้อยหรือหลายพันบรรทัดของกฎ iptables

สำหรับการปิดกั้นประเทศดูตัวอย่างนี้:


1

การเพิกเฉยไม่ว่าจะทำเช่นนี้เป็นความคิดที่ดีหรือไม่คุณสามารถทำสิ่งที่คุณขอด้วยโมดูล GeoIP สำหรับ iptables

หลังจากสร้างและติดตั้งโมดูล (และทำให้รายการ IP ของคุณอัพเดททุกเดือน) คุณสามารถทำสิ่งนี้เพื่อบล็อกแต่ละประเทศ:

iptables -I INPUT -m geoip --src-cc CN -j DROP

หรือใช้--src-cc US -j ACCEPTเป็นต้นถ้าคุณต้องการระบุประเทศที่คุณต้องการเก็บไว้


นั่นจะไม่เป็นหายนะด้านประสิทธิภาพหรือไม่แม้ว่าจะใช้ "ปฏิเสธอย่างชัดเจนทั้งหมด" และยอมให้มีเพียงประเทศเดียวหรือไม่

@ AndréDanielฉันยอมรับว่าฉันไม่ได้ดูรหัส GeoIP แต่สมมติว่าพวกเขาใช้การใช้งานที่ไม่ไร้เดียงสาที่ฉลาดกว่าการเปรียบเทียบ netblock จำนวนมาก (เช่น trie) ไม่จำเป็นต้องเป็นเช่นนั้น
Scott Dudley

และถ้าคุณกำลังพูดถึง IPv4 และคุณมี 512 Mb เพื่อสำรองต่อกฎการใช้งานเชิงทฤษฎีโดยใช้ตารางการค้นหาสามารถทำงานให้เสร็จได้ใน O (1)
Scott Dudley

1

หากคุณต้องการรักษาความสามารถในการเชื่อมต่อจากที่ใดก็ได้โดยไม่ต้องรักษาบัญชีดำ / รายการที่อนุญาตทางภูมิศาสตร์คุณสามารถใช้การเคาะพอร์ตได้ มันจะหยุดความพยายามอัตโนมัติส่วนใหญ่ในขณะที่ช่วยให้คุณยังคงเชื่อมต่อจากที่อยู่ใด ๆ

หมายเหตุ: อย่าปล่อยให้พอร์ตเคาะติดกับพอร์ตเพื่อเปิดมิฉะนั้นการสแกนพอร์ตตามลำดับจะเปิดใช้กฎของคุณ


0

ในโอกาสที่คุณมีเราเตอร์ที่เปิดใช้งาน BGP หรือสองตัวในสแต็กของคุณและมีความคิดบางอย่างว่าคุณกำลังทำอะไรอยู่ / ทำงานกับคนที่รู้ว่าพวกเขากำลังทำอะไรอยู่ อาจอยู่เบื้องหลังผู้ให้บริการการป้องกัน DDoS ที่เย็นพอที่จะช่วยในการดำเนินการตามนี้มีวิธีการที่ค่อนข้างใหม่สำหรับการ จำกัด ปริมาณการใช้งานในพื้นที่ทางภูมิศาสตร์ที่เรียกว่าการเลือกแบล็คโฮลลิ่งแบบเลือกซึ่งฉันคิดว่าคุ้มค่า

https://ripe68.ripe.net/presentations/176-RIPE68_JSnijders_DDoS_Damage_Control.pdf

http://mailman.nanog.org/pipermail/nanog/2014-February/064381.html

http://www.internetsociety.org/deploy360/blog/2014/07/video-selective-blackholing-at-ripe-68/

เนื่องจากวิธีนี้ใช้ได้กับการจัดการเส้นทางจึงข้ามปัญหาการโหลดเซิร์ฟเวอร์ใด ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.