ความแตกต่างระหว่าง PREROUTING และ FORWARD ใน iptables แตกต่างกันอย่างไร


16

ฉันพยายามที่จะเข้าใจว่าระบบนี้ทำงานอย่างไรและฉันมีปัญหาในการเข้าใจความแตกต่างระหว่างการใช้ NAT PREROUTING หรือตัวกรองไปข้างหน้า จากสิ่งที่ฉันเข้าใจ PREROUTE สามารถส่งแพ็กเก็ตไปยังเซิร์ฟเวอร์อื่นได้โดยหลีกเลี่ยงตัวกรอง หาก NAT สามารถจัดการสิ่งนี้ผ่าน PREROUTE วัตถุประสงค์ของการมีกฎไปข้างหน้าในตัวกรองคืออะไร

คำตอบ:


25

ตาราง NAT :

ตารางนี้ควรใช้สำหรับ NAT (การแปลที่อยู่เครือข่าย) บนแพ็กเก็ตที่แตกต่างกัน กล่าวอีกนัยหนึ่งควรใช้เพื่อแปลฟิลด์แหล่งข้อมูลของแพ็คเก็ตหรือฟิลด์ปลายทางเท่านั้น

ตารางตัวกรอง :

ตารางตัวกรองส่วนใหญ่จะใช้สำหรับกรองแพ็คเก็ต เราสามารถจับคู่แพ็คเก็ตและกรองในสิ่งที่เราต้องการ นี่คือสถานที่ที่เราดำเนินการกับแพ็คเก็ตจริงและดูสิ่งที่พวกเขามีและ DROP หรือ / ยอมรับพวกเขาขึ้นอยู่กับเนื้อหาของพวกเขา แน่นอนเราอาจทำการกรองก่อน อย่างไรก็ตามตารางนี้โดยเฉพาะเป็นสถานที่ซึ่งตัวกรองได้รับการออกแบบ

ในการข้ามตารางและกลุ่มเราจะเห็นว่าห่วงโซ่ FORWARD ของตัวกรองนั้นถูกส่งผ่านโดยแพ็กเก็ตที่ส่งต่อเท่านั้น (แพ็คเก็ตที่มาจากเครือข่ายและออกไปยังเครือข่าย) นั่นคือคอมพิวเตอร์ของคุณทำหน้าที่เหมือนเราเตอร์ แพ็คเก็ตและแพ็คเก็ตที่มีปลายทางเป็นโฮสต์ท้องถิ่น

คุณควรใช้ PREROUTING ของ nat เท่านั้นเพื่อเปลี่ยนที่อยู่ปลายทางของแพ็กเก็ตและไปข้างหน้าของตัวกรองเท่านั้นสำหรับการกรอง (วาง / ยอมรับแพ็กเก็ต)

หากเราได้รับแพ็กเก็ตในการตัดสินใจกำหนดเส้นทางครั้งแรกที่ไม่ได้กำหนดไว้สำหรับเครื่องในตัวมันจะถูกส่งผ่านเครือข่าย FORWARD ในทางกลับกันหากแพ็กเก็ตถูกกำหนดไว้สำหรับที่อยู่ IP ที่เครื่องท้องถิ่นกำลังรับฟังเราจะส่งแพ็กเก็ตผ่านเครือข่าย INPUT และไปยังเครื่องท้องถิ่น ป้อนคำอธิบายรูปภาพที่นี่ แพ็คเก็ตอาจถูกลิขิตไว้สำหรับเครื่องโลคอล แต่ที่อยู่ปลายทางอาจมีการเปลี่ยนแปลงภายในห่วงโซ่ PREROUTING โดยทำ NAT เนื่องจากสิ่งนี้เกิดขึ้นก่อนการตัดสินใจกำหนดเส้นทางแรกแพ็กเก็ตจะถูกตรวจสอบหลังจากการเปลี่ยนแปลงนี้ ด้วยเหตุนี้เส้นทางอาจมีการเปลี่ยนแปลงก่อนที่จะตัดสินใจทำเส้นทาง โปรดทราบว่าแพ็คเก็ตทั้งหมดจะต้องผ่านเส้นทางหนึ่งหรือเส้นทางอื่นในภาพนี้ หากคุณแพ็คเก็ต DNAT กลับไปที่เครือข่ายเดียวกันกับที่มาจากมันก็จะยังคงเดินทางผ่านเครือข่ายที่เหลือจนกว่าจะกลับออกมาในเครือข่าย


5

PREROUTING : กลุ่มนี้ใช้เพื่อทำการตัดสินใจเกี่ยวกับการเราต์ก่อน ( PRE ) การส่งแพ็คเก็ตใด ๆ โปรดจำไว้เสมอว่าในตารางPREROUTING/POSTROUTINGie เป้าหมาย ฯลฯ ของตารางเริ่มต้นจะไม่ทำงาน ตารางเป็นเพียงใช้สำหรับการตัดสินใจกำหนดเส้นทาง คุณควรใช้เมื่อทำการตัดสินใจเกี่ยวกับการกำหนดเส้นทางเช่นการตัดสินใจที่จำเป็นต้องดำเนินการก่อนที่แพ็กเก็ตจะเริ่มทำการส่งผ่านเครือข่าย นี่คือตัวอย่างเรากำลังเปลี่ยนเส้นทางการรับส่งข้อมูลใด ๆ ที่เพิ่งมาถึงเซิร์ฟเวอร์บนพอร์ต 80 ไปยังพอร์ต 8080:NATACCEPT/DROP/REJECTFILTERNATPREROUTING

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

ไปข้างหน้า : ตามชื่อแนะนำFORWARDโซ่ของFILTERตารางจะถูกใช้เพื่อส่งต่อแพ็กเก็ตจากต้นทางไปยังปลายทางที่นี่ต้นทางและปลายทางคือโฮสต์ที่แตกต่างกันสองแห่ง ดังนั้นตามที่คุณสามารถจินตนาการได้ว่าFORWARDกฎจะถูกใช้โดยทั่วไปบนเซิร์ฟเวอร์ที่โฮสต์หนึ่งกำลังส่ง / รับปริมาณข้อมูลจากโฮสต์อื่นผ่านเซิร์ฟเวอร์ เมื่อแพ็กเก็ตถูกสร้างขึ้นจากเซิร์ฟเวอร์เชนคือOUTPUTการรับส่งข้อมูลออกจากตัวมันเองในขณะที่INPUTเชนหมายถึงแพ็กเก็ตนั้นมีความหมายสำหรับเซิร์ฟเวอร์เท่านั้น นี่คือตัวอย่างของFORWARDchain ที่TCPการรับส่งข้อมูลใด ๆ ที่ได้รับบนพอร์ต 80 บนอินเตอร์เฟสที่eth0มีความหมายสำหรับโฮสต์192.168.0.4จะได้รับการยอมรับและส่งต่อไปยัง192.168.0.4:

iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 192.168.0.4 -j ACCEPT

การใช้ "โฮสต์" ของคุณดูแปลก ๆ ตารางใดที่ใช้เมื่อขึ้นอยู่กับอินเทอร์เฟซหลักของแพคเกจที่เข้ามาและมีจุดประสงค์เพื่อออก
guntbert

ส่วนไหนดูแปลก? ฉันได้ใช้ความคิดของเจ้าภาพเพื่อระบุรับส่งฝ่าย ..
heemayl

ฉันกำลังพูดถึงย่อหน้าไปข้างหน้า: ตารางนั้นจะใช้เมื่อแพ็กเก็ตที่เข้ามาผ่านหนึ่งอินเตอร์เฟสถูกกำหนดไว้สำหรับอินเตอร์เฟสอื่น (ซึ่งต่างจากโฮสต์ท้องถิ่น)
guntbert

โอ้ .. โอเค .. ฉันเข้าใจแล้ว ... ใช่ฉันควรใช้ส่วนติดต่อ .... เพียงแค่ใช้โฮสต์เพื่อให้รูปภาพง่ายขึ้น .. ฉันจะเปลี่ยนเมื่อฉันจะอยู่หน้าคอมพิวเตอร์ของฉัน
heemayl

@guntbert: เพิ่งตรงไปที่หัวของฉัน ไม่ได้อ่านความคิดเห็นล่าสุดของคุณอย่างรอบคอบเพียงพอ ฉันคิดว่าคุณเข้าใจผิดในบริบทของอินเทอร์เฟซสองแบบที่แตกต่างกันสำหรับFORWARDเชน เมื่อแพ็กเก็ตถูกถ่ายโอนจากโฮสต์หนึ่งของ LAN ไปยังโฮสต์อื่นของ LAN แพ็คเก็ตจะผ่านเพียงอินเทอร์เฟซเดียวและโซ่ที่ใช้จะอยู่FORWARDที่นี่แม้ว่าเซิร์ฟเวอร์ (ขนาดกลาง) จะไม่ทำหน้าที่เป็นเราเตอร์ในแง่ที่เข้มงวด ค่อนข้างจะคิดว่าเป็นสวิตช์
heemayl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.