เหตุใด Linux จึงไม่ใช้ช่วงพอร์ตชั่วคราวของ IANA


30

ตามที่ Wikipedia

ผู้ให้บริการอินเทอร์เน็ตกำหนดหมายเลข (IANA) แนะนำช่วง 49152 ถึง 65535 สำหรับพอร์ตแบบไดนามิกหรือส่วนตัว เคอร์เนล Linux หลายตัวใช้ช่วงพอร์ต 32768 ถึง 61000

แม้ว่าจะมีการเบี่ยงเบนทางประวัติศาสตร์บางส่วนจากช่วงที่ IANA แนะนำ แต่ก็น่าแปลกใจที่ Windows Vista, Windows 7, Windows Server 2008, FreeBSD 4.6+ และอื่น ๆ อีกมากมายที่เห็นด้วยกับช่วงนี้และ Linux ยังโดดเด่น

มองเข้าไปในนั้นดูและดูเถิด:

$ cat /proc/sys/net/ipv4/ip_local_port_range 
32768   61000

ทำไมลินุกซ์ถึงไม่ใช้ช่วงมาตรฐาน?

คำตอบ:


21

มีเวลาเมื่อ IANA มอบหมายเพียงพอร์ตถึง 1023 ดูเป็นRFC1700 ครั้งหนึ่งนี่เป็นมาตรฐาน ส่วนใหญ่ฉันไม่มีปัญหาในการค้นหาเมื่อสิ่งต่าง ๆ เปลี่ยนแปลงในกระแสของ RFC แต่สำหรับคำถามของการเปลี่ยนพอร์ตจาก 1024 เป็น 49152 จากการลงทะเบียนเป็นมอบหมายฉันมาสั้น ๆ

ในแง่ของประวัติลินุกซ์มีคำถามเกิดขึ้นเกี่ยวกับ ip_local_port_range ที่เป็นค่าเริ่มต้นในปี 2007 ในเวลานั้นมันได้ตัดสินใจใช้ช่วงของ Linux ที่คุณพูดถึงเพราะกลัวว่าหมายเลขพอร์ตที่สูงอาจทำให้เกิดปัญหาและการเริ่มต้นที่ 49152 อาจน้อยเกินไป หมายเลขพอร์ตในพูล ดูสิ่งนี้และด้าย ความคิดที่แสดงออกมาในขณะนั้นคือการเริ่มต้นที่ 32768 นั้นอยู่ในจิตวิญญาณของกระบวนการของ IANA ถ้าไม่สอดคล้องอย่างเต็มที่ ในการอ่านนี้ฉันอนุมานว่านักพัฒนาสันนิษฐานว่างานที่มอบหมายส่วนใหญ่จะเกิดขึ้นจากด้านล่างของช่วงและเลื่อนขึ้น ในการเขียนครั้งนี้ฉันนับจำนวนพอร์ตที่ได้รับมอบหมายมากกว่า 100 หมายเลขเล็กน้อย (ไม่นับโปรโตคอลที่แตกต่างกันแยกต่างหาก) ระหว่าง 32768 ถึง 49152 ดังนั้นมันจึงค่อนข้างดีในช่วงห้าปีที่ผ่านมา

ฉันไม่รู้ว่าทำไมช่วงนั้นเล็กเกินไป แต่ฉันนึกได้สองเหตุผล:

  1. หมายเลขพอร์ตจะถูกสุ่มเพื่อป้องกันการโจมตีบางอย่าง ยิ่งมีที่อยู่ในพูลมากเท่าไหร่การป้องกันนี้ก็สามารถทำงานได้ดีขึ้น
  2. เซิร์ฟเวอร์กิจกรรมสูงอาจมีปัญหากับหมายเลขพอร์ตหมด ในขณะที่พอร์ตอาจไม่ยั่งยืนการใช้งานนั้นไม่ได้เกิดขึ้นทันที โดยเฉพาะอย่างยิ่งซ็อกเก็ตอาจใช้เวลาหลายนาทีหลังจากปิด TCP

โพสต์บล็อกนี้สัมผัสกับหมายเลข 2 และแนะนำคำตอบหากคุณต้องการให้ระบบ Linux ของคุณใช้พอร์ตท้องถิ่นต่างๆ (การใช้ /etc/sysctl.d เพื่อกำหนดช่วงที่คุณต้องการนอกจากนี้ยังมีรายการ ip_local_reserved_ports ที่อาจใช้งานได้หากมีข้อขัดแย้งเกิดขึ้นตรงกับรายการ / proc / sys ที่คุณอ้างถึง)

สรุป. ค่าเริ่มต้นของ Linux ไม่ตรงกับข้อกำหนด IANA ปัจจุบัน แต่ระบบ Linux ใด ๆ สามารถทำได้หากเจ้าของต้องการ


1
ตามRFC 6056 , "ตามที่ระบุไว้ในมาตรา 2.1, พอร์ตแบบไดนามิกประกอบด้วยช่วง 49,152-65,535. แต่ไม่จีรังขั้นตอนวิธีการเลือกพอร์ตควรใช้ทั้งช่วง 1,024-65,535." - ดูเหมือนว่าip_local_port_rangeไม่ควรใช้ค่าของ
Evan Carroll


@evan RFC 6056กล่าวต่อไปว่า"หมายเลขพอร์ตที่อาจจำเป็นสำหรับการให้บริการเฉพาะที่โฮสต์ท้องถิ่นไม่ควรรวมอยู่ในกลุ่มหมายเลขพอร์ตที่มีให้สำหรับการสุ่มพอร์ตชั่วคราว"และ"ผู้ดูแลระบบควรระบุบริการที่อาจ ถูกเสนอโดยโลคัลโฮสต์และ SHOULD ไม่รวมเฉพาะพอร์ตที่ลงทะเบียนที่สอดคล้องกัน "แต่นั่นไม่ใช่สิ่งที่ระบบปฏิบัติการมักจะให้คุณทำ กลไกการยกเว้นเชิงปฏิบัติเพียงอย่างเดียวคือการเพิ่มขอบเขตล่าง
jmb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.