Score:14

บล็อก 1.4 ล้านที่อยู่ IP บน VPS

ธง be

ฉันจะบล็อกรายการที่อยู่ IP ประมาณ 1.4 ล้านรายการได้อย่างไร ฉันได้ลองทำด้วย iptables PREROUTING เช่น:

-A PREROUTING -d IP_HERE/32 -j DROP

แต่ด้วยสถิติจำนวนมากนี้ แบนด์วิธของฉันลดลงอย่างบ้าคลั่งเมื่อฉันทำการทดสอบความเร็ว

ไม่มี IP ที่ถูกบล็อกใน iptables:

1 กิกะไบต์/วินาที

ด้วย IP ที่ถูกบล็อกใน iptables:

สูงสุด 3 Mb/s

ฉันต้องการใช้ XDP_DROP ที่นี่ (ขั้นตอนสุดท้าย): https://blog.cloudflare.com/how-to-drop-10-million-packets/

แต่ฉันไม่มีความคิดที่จะใช้สิ่งนี้ :/ (เขียนโปรแกรมไม่เก่งจริงๆ)

มีทางเลือกอื่นสำหรับแนวทางนี้หรือไม่?

pk flag
เราถามได้ไหมว่าทำไมคุณถึงต้องการบล็อก 1.4 ล้าน IP นั่นเป็นจำนวนมากของ IP อาจง่ายกว่าที่จะตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ของคุณปลอดภัยแทน
peterh avatar
vn flag
มีสิ่งใหม่ชื่อ **ipset** ฉันไม่รู้ แต่มันอาจจะคุ้มค่าที่จะลอง มันเป็นกรอบไฟร์วอลล์ใหม่ใน linux จริง ๆ แล้ว iptables ในปัจจุบันเป็นเพียงชั้นที่เข้ากันได้มากกว่า ipset
aq flag
หากคุณพยายามบล็อก IP ตามตำแหน่งที่ตั้ง/ประเทศ มีวิธีแก้ไขปัญหานี้ที่ไม่เกี่ยวข้องกับรายการ iptable นับล้านรายการ
pk flag
นอกจากนี้ โปรดอย่าบล็อก IP ตามตำแหน่ง/ประเทศโดยไม่มีเหตุผลที่ดี ไม่ใช่แค่ "โอ้ มีแฮ็กเกอร์ในประเทศนั้น"
ilkkachu avatar
co flag
@peterh คุณหมายถึง nftables หรือไม่ ฉันคิดว่า ipset มีมาระยะหนึ่งแล้ว และ AFAIK เป็นเพียงกฎที่เกี่ยวข้องกับชุดของที่อยู่
TooTea avatar
cn flag
@peterh ipsets รวมอยู่ในเคอร์เนลตั้งแต่ [2.6.39](https://kernelnewbies.org/Linux_2_6_39#IPset) ซึ่งเผยแพร่เมื่อสิบปีก่อน พวกเขามีอยู่แล้วก่อนหน้านั้นเป็นแพตช์ภายนอก
user26742873 avatar
cn flag
@ user253751 บางที op อาจปิดกั้นสหภาพยุโรปทั้งหมดสำหรับกฎหมายคุกกี้? :พี
peterh avatar
vn flag
@TooTea โอเค ขอบคุณ สิ่งที่น่าสนใจสำหรับฉันคือวิธีที่ ipset จับคู่ ip กับ ipset (ซึ่งน่าจะเป็นชุดของ ips ที่มีหน้ากาก) มันใช้ต้นไม้หรือแฮชภายในหรือไม่? ถ้าใช่จะเร็วมาก ด้วย iptables วิธีเดียวที่จะจับคู่ ip กับชุดของกฎคือการค้นหาเชิงเส้น เนื่องจากทัวริง
jcaron avatar
me flag
ที่อยู่ IP เป็นที่อยู่ IP แต่ละรายการจริงๆ หรือเป็นส่วนหนึ่งของช่วงที่จำกัดหรือไม่
be flag
IP เป็นส่วนบุคคลและส่วนใหญ่เป็นผู้รับมอบฉันทะ
mckenzm avatar
in flag
แน่นอนว่าควรเป็นดัชนีแฮช (หรืออาจเป็นดัชนีที่ค่อนข้างไม่สมดุล) "ความเร็วสายฟ้า" ตามการอ้างอิงในคำตอบของ @Cyrbil
Score:32
ธง in

คุณควรจะดูเป็น ipset.

จากเว็บไซต์อย่างเป็นทางการ:

Ipset อาจเป็นเครื่องมือที่เหมาะสมสำหรับคุณ [...] ในการจัดเก็บที่อยู่ IP หรือหมายเลขพอร์ตหลายรายการและจับคู่กับการรวบรวมโดย iptables

[...] (Ipset) อาจจัดเก็บที่อยู่ IP, เครือข่าย, หมายเลขพอร์ต (TCP/UDP), ที่อยู่ MAC, ชื่ออินเทอร์เฟซ หรือรวมกันในลักษณะที่รับประกันความเร็วฟ้าผ่าเมื่อจับคู่รายการกับชุด

หากต้องการใช้งาน คุณต้องสร้างไฟล์ ipset, เพิ่ม IP และสร้าง iptables กฎเพื่อให้ตรงกับ ipset:

ipset สร้างแฮชบัญชีดำ: ip แฮชขนาด 1400000
ipset เพิ่มบัญชีดำ <IP-ADDRESS>
iptables -I INPUT -m set --match-set บัญชีดำ src -j DROP

สามารถดูตัวอย่างการใช้งานจริงได้ ที่นี่. สังเกตว่าใช้ ipset กู้คืน แทนที่จะผ่านแต่ละ ไอพี วนซ้ำเพราะมันเร็วกว่ามาก

หากรายชื่อของคุณ IP มีการซ้อนทับกัน คุณอาจต้องการประมวลผลล่วงหน้าเพื่อแปลงเป็น ช่วง IP ที่เป็นไปได้. ที่นี่ เป็นตัวอย่างเครื่องมือในการทำ มันจะไม่ทำให้คุณแสดงได้ดีขึ้นด้วย ipset แต่จะลดขนาดรายการของคุณ


ในแง่ของการแสดงนั้นรวดเร็วและสเกลมากโดยไม่มีการลงโทษ ในฐานะที่เป็น คลาวด์แฟลร์บล็อกของกล่าวถึงมีวิธีระดับต่ำที่เร็วกว่า; แต่มันซับซ้อนกว่ามากและเพิ่มเพียงไม่กี่ไบต์ต่อวินาที ซึ่งไม่คุ้มกับความพยายาม เว้นแต่คุณจะมีขนาดและความทะเยอทะยานของผู้ให้บริการระบบคลาวด์

iBug avatar
tr flag
การประมวลผล IP เดียวเป็นช่วงเป็นสิ่งที่จำเป็นอย่างยิ่ง จากนั้นคุณสามารถใช้ `hash:net` สำหรับชุดและประสิทธิภาพที่ดียิ่งขึ้น
Score:20
ธง za

การแข่งขันเฟรม - รายการที่สั้นกว่า ที่อยู่ที่ได้รับอนุญาตหรือที่ถูกบล็อกคืออะไร

แทนที่จะปฏิเสธ 1.4 ล้าน เพียงแค่อนุญาต ~โหล IP ที่คุณต้องการอนุญาต และปฏิเสธทุกอย่างโดยปริยาย

fr flag
ดูเหมือนว่าเขาต้องการบล็อกชุด "IP ไม่ถูกต้อง" ที่กำหนดไว้ล่วงหน้า สำหรับแอปพลิเคชันส่วนใหญ่ ระบบบัญชีขาวอาจไม่มีประโยชน์
Score:15
ธง in

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

sudo ufw ปฏิเสธจาก 192.0.0.0/8 เป็นใดๆ

ตัวอย่างด้านบนบล็อกการรับส่งข้อมูลทั้งหมดจาก 192.0.0.1 ถึง 192.255.255.254ซึ่งใช้ได้กับที่อยู่ 16,777,214 รายการ และไม่มีผล (ที่สังเกตได้) เป็นศูนย์ต่อปริมาณงานเครือข่าย

ตราบใดที่รายการ IP ของคุณอยู่ในรูปแบบที่ใช้การได้ในการสร้างช่วง IP สิ่งนี้อาจใช้ได้ผลสำหรับคุณ

mx flag
ให้เราทุกคนคิดว่า OP ต้องการบล็อกที่อยู่ที่ไม่อยู่ในช่วง
iBug avatar
tr flag
ตามที่อธิบายไว้ UFW คือส่วนหน้าสำหรับ iptables สิ่งนี้ทำให้ประสิทธิภาพแย่ลงกว่าการบำรุงรักษาเชน iptables ด้วยตนเอง
in flag
ทำไม_แย่ลง_? มันไม่เหมือนกับกฎ iptables ที่เรียกหา ufw แต่เป็นเพียงส่วนหน้าสำหรับกำหนดค่าพวกมันในตอนแรก แน่นอนว่ามันจะไม่ _ดีกว่า_ เช่นกัน
iBug avatar
tr flag
@Useless UFW สร้างสายโซ่เพิ่มเติมสำหรับทุกแพ็กเก็ตที่จะสำรวจ ในขณะที่กฎที่ดูแลด้วยตนเองนั้นสามารถทำได้ *ง่ายกว่ามาก* และมีประสิทธิภาพมากกว่า
in flag
ดังนั้นพูดว่า "ufw สร้างกฎที่ง่ายเกินไปและคุณสามารถสร้างกฎที่ดีกว่าได้ด้วยมือ" หรืออะไรทำนองนั้น ประสิทธิภาพของ UFW เองไม่ใช่ปัญหา และข้อเท็จจริงที่ว่าเป็นส่วนหน้าไม่ได้ทำให้กฎของมันไม่ดีโดยอัตโนมัติ ไม่เลวร้ายไปกว่ากฎที่เขียนด้วยมือว่า _don't_ ใช้โซ่อย่างชาญฉลาด
Nate T avatar
it flag
@ ไร้ประโยชน์เนื่องจากเป็นส่วนหน้าทุกครั้งที่คำขอปรากฏขึ้น มันถูกประมวลผลโดย `ufw` ซึ่งจะเรียก `iptables` อยู่เบื้องหลัง เมื่อ `iptables` จับคู่ ip กับกฎที่ระบุไว้แล้ว จะต้องส่งข้อมูลนี้กลับไปที่ `ufw` ซึ่งจะอนุญาตหรือปฏิเสธ นี่คือโฟลว์ fe / be ทั่วไป การตัด "ufw" ออกจะลดขั้นตอนลงครึ่งหนึ่ง ที่กล่าวว่าประสิทธิภาพ inc / dec จะไม่ขึ้นอยู่กับจำนวน ips ที่ถูกบล็อก แต่จำนวนคำขอที่เข้ามาจริงๆ
in flag
@NateT ฉันชี้ให้เห็นแล้วว่าไม่เป็นความจริงอย่างแน่นอน `ufw` ให้ส่วนหน้าอย่างง่ายสำหรับ `iptables` ซึ่งตัวมันเองเพิ่งกำหนดค่ากฎในโมดูล netfilter ของ `ip_tables` กิจกรรมการกรองแพ็คเก็ตไม่เคยไหลจากโมดูลเคอร์เนล `ip_tables` ออกไปยังคอมโพเนนต์ userspace ของ `iptables` ซึ่งน้อยกว่าส่วนหน้าของ `ufw` สำหรับสิ่งนั้นมาก
Nate T avatar
it flag
จากนั้นจะไม่ใช่ส่วนหน้า แอป 1 อัปเดตที่เก็บข้อมูลแอป 2 ไม่ได้ทำให้แอป 1 เป็น "ส่วนหน้า" สำหรับแอป 2 หากแอปทั้งสองไม่ได้ถูกเรียกใช้ตามลำดับที่ฉันอธิบาย คุณสามารถเรียกมันว่าอะไรก็ได้ที่คุณต้องการ (เรียกมันว่า "แนนซี่ใน ชุดสีแดงของเธอ" สำหรับทั้งหมดที่ฉันสนใจ) แต่การเรียกมันว่าส่วนหน้าในการอภิปรายเกี่ยวกับความเร็วของอัลกอริทึมนั้นไม่ใช่ความคิดที่ดี ผู้ใช้เครือข่ายนี้มักถูกมองว่าไม่ใส่ใจเพราะจู้จี้จุกจิกเกี่ยวกับคำศัพท์ต่างๆ มากเกินไป แต่ ^นี่^ คือสิ่งที่ใช้คำในทางที่ผิดเล็กน้อยได้ @ไร้ประโยชน์
Nate T avatar
it flag
หากฉันเข้าใจผิด โปรดอธิบายลำดับเหตุการณ์ หากมีการใช้แอปทั้งสอง แอปทั้งสองจะใช้หน่วยความจำและทรัพยากรชั่วคราว แม้ว่าจะพิมพ์เฉพาะ Hello World ไปยังคอนโซลก็ตาม คุณรู้อะไรไหม? จะดูมันเพื่อที่คุณไม่ต้องพิมพ์มัน ตอนนี้ฉันยังอยากรู้อยากเห็น ข้อยกเว้นเดียวที่ฉันคิดได้คือกรณีที่ไม่ได้เรียก iptables เลยและใช้ / อัปเดตข้อมูลเท่านั้น ในกรณีนั้นครับ ^^^
Score:13
ธง jp

คุณสามารถย่อการค้นหาเพื่อเพิ่มความเร็วได้โดย โครงสร้างต้นไม้ กฎของคุณ ตัวอย่างเช่น คุณสามารถทำได้ตามส่วนแรกของ IP เช่น /8 เช่นนั้น:

iptables -N กฎ 8_192_0_0_0
iptables -N กฎ 8_172_0_0_0
iptables -N กฎ 8_10_0_0_0

iptables -A อินพุต -s 192.0.0.0/8 -j rule8_192_0_0_0
iptables -A อินพุต -s 172.0.0.0/8 -j rule8_172_0_0_0
iptables -A อินพุต -s 10.0.0.0/8 -j rule8_10_0_0_0

iptables -A rule8_192_0_0_0 -s 192.168.2.3 -j DROP
iptables -A rule8_172_0_0_0 -s 172.16.2.3 -j DROP
iptables -A rule8_10_0_0_0 -s 10.10.2.3 -j DROP
Score:4
ธง tr

มีการปรับปรุงอื่นที่ช่วยแก้ปัญหา 3 Mb/s ของคุณโดยตรง:

iptables -I INPUT -m conntrack --ctstate ESTABLISHED, RELATED -j ยอมรับ

สิ่งนี้ทำให้การเชื่อมต่อที่สร้างขึ้นสามารถข้ามกฎ iptables น้อยที่สุดเท่าที่จะเป็นไปได้ แม้ว่าการใช้ ipset เพื่อปรับปรุงความเร็วในการค้นหาที่อยู่ IP ยังจำเป็นสำหรับ การเชื่อมต่อใหม่ เพื่อสร้างเร็วขึ้น

ไม่ว่าคุณจะมีกฎอื่นอีกกี่ข้อ นี่เป็นกฎที่ดีที่จะปรับใช้เป็นกฎข้อแรก

Score:1
ธง fr

XDP_DROP อาจเกินความจำเป็น เว้นแต่ว่าคุณวางแผนที่จะเรียกใช้รายการบล็อกเหล่านี้ด้วยความเร็วแพ็กเก็ตที่สูงมาก (คิด >1mpps) ดังนั้นฉันจึงขอแนะนำผู้ตอบของ Cyrbil หากคุณไม่มีประสบการณ์เกี่ยวกับโค้ด

หากคุณยังต้องการลองใช้ XDP คุณกำลังมองหาสิ่งที่เรียกว่า a ตัวกรองบาน ซึ่งสามารถตรวจสอบได้อย่างรวดเร็วว่า ip นั้น "น่าจะอยู่ในชุด" หรือ "ไม่ได้อยู่ในชุดแน่นอน"

ตัวอย่างของตัวกรองการบานใน C: โพสต์บล็อกนี้

Score:1
ธง us

สิ่งนี้ไม่ได้ใช้ iptables แต่เป็นตารางการกำหนดเส้นทางเคอร์เนล ip อาจคุ้มค่าที่จะลองใช้และตรวจสอบประสิทธิภาพ:

เส้นทาง ip เพิ่ม blackhole IPv4/32

IIRC มันควรจะเร็วกว่าการกรองด้วย iptables แต่ฉันไม่เคยทำเกณฑ์มาตรฐานด้วย 1.4 ล้าน IPs :)

โพสต์คำตอบ

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