เปลี่ยนพอร์ตต้นทางของคำขอ NTP บนเราเตอร์โดยใช้ iptables


1

ISP ของฉันบล็อกพอร์ต udp ขาออก 123 นี่เป็นการป้องกัน ntpd จากการรับการอัพเดท ntp ฉันจะทำให้เราเตอร์ของฉัน (เราเตอร์ Asus ใช้ Asuswrt Merlin) เปลี่ยนหมายเลขพอร์ตจาก 123 เป็นอย่างอื่นได้อย่างไร ฉันลองใช้กฎ iptables ต่อไปนี้ แต่ดูเหมือนว่าจะไม่ทำงานกับเราเตอร์ กฎใช้งานได้เมื่อฉันวางมันลงในเครื่อง Linux แต่ละเครื่อง แต่ฉันต้องการหลีกเลี่ยงการทำเช่นนั้นกับพวกเขาทั้งหมด

iptables -t nat -I POSTROUTING 1 -p udp --sport 123 -j SNAT --to-source :12512

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

นี่คือรายการตารางโพสท์โพสต์ของฉันบนเราเตอร์ของฉัน ฉันลองใส่กฎ ntp ก่อนและหลัง

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination
1    SNAT       udp  --  anywhere             anywhere             udp spt:ntp to::12512
2    MASQUERADE  all  -- !<my external IP>    anywhere

คำตอบ:


1

ฉันไปงานปาร์ตี้สาย แต่ต้องทำอะไรบางอย่างเกี่ยวกับปัญหาเดียวกันด้วยตัวเองในวันนี้ หน้า superuser นี้เป็นหนึ่งในผลลัพธ์ google แรกที่ฉันพบเมื่อทำการค้นคว้าปัญหาและฉันคิดว่าฉันจะเพิ่มวิธีแก้ไขที่นี่เพื่อบันทึกผู้ค้นหาในอนาคตด้วยความพยายาม

การเพิ่มกฎ masquerade แบบพิเศษสำหรับทราฟฟิก NTP โดยมี--to-portsอาร์กิวเมนต์ไปยังเป้าหมาย MASQUERADE ก่อนที่กฎ masquerade ปกติของคุณจะบังคับให้แปลพอร์ตต้นทาง:

iptables -t nat -I POSTROUTING -p udp -m udp --sport 123 -j MASQUERADE --to-ports 60000-61000

AT&T บล็อกทราฟฟิก UDP ขาออกด้วยพอร์ตต้นทาง 123 เพื่อบรรเทาการโจมตี NTP แบบสะท้อนจากเครื่องที่ถูกบุกรุกบนเครือข่ายลูกค้า อนุญาตให้ใช้พอร์ตปลายทาง 123 แต่ไคลเอนต์ NTP ส่วนใหญ่ใช้ 123 สำหรับพอร์ตต้นทางเช่นกัน

ntpdateคุณสามารถตรวจสอบว่าการกรองของพวกเขามีผลกระทบต่อคุณโดยการเรียกใช้ หากแหล่งที่มาพอร์ต 123 ถูกกรองntpdate pool.ntp.orgจะล้มเหลวในขณะที่ntpdate -u pool.ntp.orgจะประสบความสำเร็จ ( -uตัวเลือกในการ ntpdate บังคับให้ใช้หมายเลขพอร์ตต้นทางที่ไม่มีสิทธิพิเศษ (> 1024)) หากการทดสอบทั้งสองล้มเหลวหรือหากการทดสอบทั้งสองประสบความสำเร็จแสดงว่าปัญหาอื่น ๆ กำลังเล่นอยู่ .


1

การใช้ NAT ต้นทางเพื่อเขียนหมายเลขพอร์ตต้นทางใหม่จาก 123 จะไม่เปลี่ยนความจริงที่ว่าคุณยังคงเชื่อมต่อกับเซิร์ฟเวอร์ NTP ระยะไกลที่ฟังพอร์ตปลายทาง 123 เมื่อ ISP ของคุณบล็อกทราฟฟิก NTP ขาออกพวกเขาอาจบล็อก UDP แพ็กเก็ตเป็น dport 123 และเปลี่ยน พอร์ตต้นทางจะไม่สร้างความแตกต่างเล็กน้อย

เพียงสอบถาม ISP ของคุณว่าเซิร์ฟเวอร์ NTP ให้บริการอะไรซึ่งคุณสามารถใช้ได้


ฉันไม่คิดว่าพวกเขากำลังบล็อกในแบบนั้น ดูเหมือนว่าพวกเขากำลังปิดกั้นการรับส่งข้อมูลถ้าพอร์ตต้นทางเป็น 123 สำหรับแพ็กเก็ตขาออก (โดยพื้นฐานแล้วบล็อกฉันจากการโฮสต์เซิร์ฟเวอร์ ntp) เคียวรี NTP ทำงานได้ดีเมื่อฉันใช้ iptables เพื่อเปลี่ยนพอร์ตต้นทางบนเครื่อง linux แต่ละเครื่อง ฉันแค่ต้องการยืนยันว่าฉันสามารถทำได้ที่เราเตอร์ (พร้อมกับหน้ากาก) ดังนั้นฉันจึงไม่ต้องทำทุกเครื่อง
Gunny

สมมติว่า ISP มีเซิร์ฟเวอร์ NTP ของพวกเขาจะมีวิธีให้ฉันเขียนทราฟฟิกบนเราเตอร์อีกครั้งเพื่อใช้เซิร์ฟเวอร์เหล่านั้นแทนที่จะอัปเดตไฟล์ ntpd conf ทั้งหมดเพื่อใช้เซิร์ฟเวอร์หรือไม่
Gunny

1
ทำไมต้อง upvotes นี่ไม่ได้ตอบคำถาม OP เลย นี่เป็นปัญหาที่ทราบกันดีว่ามี ntp มากเนื่องจาก ISP ที่ปิดกั้นการรับส่งข้อมูลจากพอร์ตที่มีสิทธิ์ OP ไม่ได้เขียนว่า "ISP บล็อกขาออก [SOURCE] udp พอร์ต 123" โดยเฉพาะ แต่มันมีความหมายโดยนัยมากจากตัวอย่าง iptables ที่ให้ไว้ ตามปกติใน superuser การเก็งกำไรในสิ่งที่ "อาจจะเกิดขึ้น" จะถูกลดลง :-P
Keith

1

เพื่อให้มันทำงานบนเราเตอร์ของคุณคุณจะต้องเพิ่มที่อยู่อินเตอร์เฟซภายนอกของคุณ (หันหน้าไปทางอินเทอร์เน็ตสาธารณะ) ในกฎ มิฉะนั้นคุณจะส่งแพ็กเก็ตออกสู่อินเทอร์เน็ตด้วยที่อยู่ IP ส่วนตัวของคุณเป็นแหล่งที่มา อาจเป็นไปได้ว่าเคอร์เนลรุ่น netfilter ของคุณนั้นทำงานแตกต่างกัน คุณสามารถตรวจสอบสิ่งที่เกิดขึ้นกับ tcpdump

iptables -t nat -I POSTROUTING 1 -p udp --sport 123 -j SNAT --to-source {PUBLIC_IP}:12512

จากนั้น (สมมติว่า eth1 เป็นอินเตอร์เฟซหันหน้าไปทางอินเทอร์เน็ตของคุณ):

tcpdump -ni eth1 port 123

นี่คือสิ่งที่ฉันมีใน / etc / firewall.user บน OpenWRT:

P_IP=`/sbin/ifconfig eth1 | awk '/inet addr/{print substr($2,6)}'`
/usr/sbin/iptables -t nat -I postrouting_rule -p udp -o eth1 --sport 123 --dport 123 -j SNAT --to $P_IP:12300

อย่าลืมลบตาราง conntrack หลังจากทำการเปลี่ยนแปลงไฟร์วอลล์หากคุณต้องการเห็นผลลัพธ์ทันทีใน OpenWRT:

echo f > /proc/net/nf_conntrack

มิฉะนั้นอาจทำให้สับสนในสิ่งที่เกิดขึ้นได้

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