ทำไม ntpd ฟังพอร์ต / ที่อยู่มากมาย


18

ฉันสังเกตุสิ่งนี้มาระยะหนึ่งแล้วและมันก็ไม่สมเหตุสมผลเลย:

ทำไมntpdต้องฟังที่อยู่มากมาย?

ตัวอย่างเช่นเครื่อง Debian:

$ netstat
ชื่อโปรแกรมที่อยู่ต่างประเทศของ Proto Local Address
udp 0.0.0.0:123 0.0.0.0:* ntpd
udp 127.0.0.1:123 0.0.0.0:* ntpd
udp [LAN]: 123 0.0.0.0:* ntpd
udp [IPv4]: 123 0.0.0.0:* ntpd
udp6 ::: 123 ::: * ntpd
udp6 :: 1: 123 ::: * ntpd
udp6 [link-local] ::: * ntpd
udp6 [IPv6] ::: * ntpd

นี้ (การแก้ไข) netstatแสดงให้เห็นว่ารายชื่อnptdฟังการออกอากาศท้องถิ่น LAN และที่อยู่ทั่วโลกสำหรับ IPv4 และ IPv6

ทำไมntpdสำส่อนถึงเป็นเช่นนั้น?

คำตอบ:


15

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

พอร์ตแรก 123 อยู่ต่ำกว่า 1024 และถือว่าเป็นพอร์ตที่มีสิทธิพิเศษและมีเพียง root เท่านั้นที่สามารถผูกกับพอร์ตนั้นได้ โดยปกติแล้ว Ntp จะถูกตั้งค่าให้ปล่อยสิทธิพิเศษหลังจากเริ่มใช้งาน จากสิ่งที่ฉันเข้าใจจากรายการจดหมายและบทความเมื่อสิทธิ์ไม่สามารถเปิดซ็อกเก็ตเพื่อตอบกลับจากพอร์ตต้นทางที่ถูกต้องเป็น 123 ดังนั้น ntp จะเปิดซ็อกเก็ตสำหรับทุกที่อยู่ที่กำหนดก่อนที่จะลดสิทธิ์

จากสิ่งที่ฉันได้อ่านกลไกการตรวจสอบความถูกต้องบางอย่างของ ntp นั้นต้องการให้แหล่งต้นทางและพอร์ตปลายทางเป็น 123 และไม่มีอะไรอื่น

เรื่องไม่ชัดเจนทั้งหมด ดูหัวข้อเกี่ยวกับที่อยู่ไวลด์การ์ด 0.0.0.0มันถูกเปิดโดย ntpd ด้วยเหตุผลบางอย่าง แต่จากความคิดเห็นที่ไม่ควรนำมาใช้จริงยกเว้นเป็นไปได้ในบางกรณีที่หายากพิเศษว่า devs ไม่แน่ใจทั้งหมด แต่พวกเขาไม่ได้ ' ไม่ต้องการถอดซ็อกเก็ตในกรณีที่มีการแตกหัก

โปรดทราบว่าโดยปกติแล้ว ntpd ไม่ควรรับแพ็คเก็ตในที่อยู่ไวด์การ์ดเนื่องจากมีปัญหามากมายหากคุณทำเช่นนั้นรวมถึงการส่งแพ็กเก็ตที่ส่งคืนไปยังที่อยู่อื่นจากที่อยู่ที่ร้องขอของผู้ส่ง DannyMayer - 27 เม.ย. 2552

ฉันคิดว่าคำตอบหลักสำหรับคำถามของคุณอยู่ในความคิดเห็นด้านบนที่นี่


16

มันไม่สำส่อนเลย เป็นเพียงการเชื่อมโยงกับที่อยู่ IP ของอินเทอร์เฟซและโลคัลโฮสต์ทั้งบนโปรโตคอล ipv4 และ ipv6 หากคุณคิดว่าไม่ควรฟังบางอย่างให้เปลี่ยนการตั้งค่าlistenตามที่อธิบายไว้ในคู่มือ (อาจเป็นเวอร์ชั่นอื่นที่คุณใช้อยู่):

 listen on address
         Specify a local IP address or a hostname the ntpd(8) daemon
         should listen on. If it appears multiple times, ntpd(8) will
         listen on each given address. If the exact string '*' is given as
         an address, ntpd(8) will listen on all local addresses. Other-
         wise, address can be followed by an asterisk ('*') and a UDP port
         number to listen on instead of the default 123. ntpd(8) does not
         listen on any address by default. For example:

               listen on *
               listen on 127.0.0.1
               listen on ::1

ในรุ่นอื่น ๆ บางอย่างที่คุณจะต้องเปลี่ยนตัวเลือกต่อไปntpdภูตตัวเองเพื่อการเปลี่ยนแปลงในสิ่งที่โปรโตคอล / อินเตอร์เฟซที่จะฟัง (ตัวเลือกชอบ-4, -6, -I)


1
Feliz Ano Novo!
user9517

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

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