สำหรับชุดกฎทั่วไป คุณสามารถถามได้ nftable เพื่อทำการค้นหาเส้นทางล่วงหน้าโดยใช้ปุ่ม ตอแหล
expression แทนที่จะรอให้ routing stack ทำ สิ่งนี้ทำให้เกี่ยวข้องกับ (อนาคต) เอาต์พุต อินเทอร์เฟซแม้ว่าจะยังไม่มีอยู่ (การตัดสินใจกำหนดเส้นทางไม่ได้เกิดขึ้น) โดยมีค่าใช้จ่ายในการค้นหาเพิ่มเติม จากนั้นหากผลลัพธ์แจ้งว่าแพ็กเก็ตจะถูกกำหนดเส้นทาง ให้ป้องกันการติดตามโดยใช้ a โน้ต
คำแถลง.
การแสดงออกตอแหล
ตอแหล {saddr | พ่อดร | ทำเครื่องหมาย | ไอฟ | อ๊อฟ} [. ...] {oif | อ๊อฟเนม | พิมพ์}
ก ตอแหล นิพจน์สอบถาม ตอแหล (ส่งต่อฐานข้อมูล) ถึง
รับข้อมูลเช่นดัชนีอินเตอร์เฟสเอาต์พุตโดยเฉพาะ
ที่อยู่จะใช้ อินพุตคือ tuple ขององค์ประกอบที่ใช้เป็น
อินพุตไปยัง ตอแหล ฟังก์ชันการค้นหา
งบไม่ติดตาม
คำสั่ง notrack อนุญาตให้ปิดใช้งานการติดตามการเชื่อมต่อสำหรับ
แพ็กเก็ตบางอย่าง
โน้ต
โปรดทราบว่าเพื่อให้คำชี้แจงนี้มีผลบังคับใช้ จะต้องนำไปใช้กับ
แพ็กเก็ตก่อนก คอนแทรค การค้นหาเกิดขึ้น ดังนั้นจึงจำเป็นต้องนั่ง
ในเครือด้วย การกำหนดเส้นทางล่วงหน้า หรือ เอาต์พุต hook และลำดับความสำคัญของ hook
-300 หรือน้อยกว่า
ดังนั้นควรทำการตรวจสอบเส้นทาง "อย่างง่าย" จาก การกำหนดเส้นทางล่วงหน้าโดยใช้เฉพาะที่อยู่ปลายทางเป็นตัวเลือกและตรวจสอบการมีอยู่ของอินเทอร์เฟซเอาต์พุต (แพ็กเก็ตที่ไม่สามารถกำหนดเส้นทางได้หรือแพ็กเก็ตที่มีไว้สำหรับโฮสต์จะไม่แก้ไขใดๆ) มีข้อยกเว้นสำหรับ แท้จริง (วนกลับ) เพื่อติดตาม: ในขณะที่มันแสดงถึงการรับส่งข้อมูลในเครื่อง แพ็กเก็ตที่ส่ง (ผ่านไฟล์ เอาต์พุต เส้นทาง) จากโฮสต์ถึงตัวเองกลับมาผ่าน การกำหนดเส้นทางล่วงหน้า เส้นทางและมีอินเทอร์เฟซเอาต์พุตของ แท้จริง ด้วย. เนื่องจากแพ็กเก็ตขาออกได้สร้างไฟล์ คอนแทรค เข้ามาดีกว่ารักษาสิ่งนี้ให้สอดคล้องกัน
nft เพิ่ม ip ตารางไร้สถานะ
nft เพิ่ม chain ip stateless prerouting '{ type filter hook ลำดับความสำคัญก่อนกำหนด -310; นโยบายยอมรับ; }'
nft เพิ่มกฎ ip stateless prerouting iif != lo fib daddr oif มีอยู่ notrack
เปลี่ยน ไอพี
ครอบครัวกับ ไอเน็ต
กลุ่มคำสั่งผสมควรขยายลักษณะการทำงานทั่วไปแบบเดียวกันไปยัง IPv4+IPv6
เพื่อให้เฉพาะเจาะจงมากขึ้นสามารถระบุอินเทอร์เฟซเอาต์พุตในอนาคตด้วย fib daddr oif eth1
ตัวอย่างเช่นซึ่งเทียบเท่ามากหรือน้อยของ oif eth1
แต่ยังมีอยู่ใน การกำหนดเส้นทางล่วงหน้า.
แน่นอนว่าหากทราบโทโพโลยีล่วงหน้า ก็เป็นไปได้ที่จะหลีกเลี่ยงการค้นหา FIB โดยใช้กฎหนึ่งหรือสองสามข้อตามการทดสอบแอดเดรส เนื่องจากผู้ดูแลระบบจะทราบเส้นทางล่วงหน้า อาจจำเป็นต้องมีการเปรียบเทียบผลลัพธ์เพื่อดูว่าสิ่งนี้น่าสนใจกว่าการรักษาวิธีการทั่วไปหรือไม่
ตัวอย่างเช่น ด้วยข้อมูลที่ให้โดย OP ให้แทนที่กฎก่อนหน้าด้วย:
nft เพิ่มกฎ ip stateless prerouting 'ip daddr != { 192.168.1.1, 192.168.2.1, 127.0.0.0/8 } notrack'
น่าจะได้ผลใกล้เคียงกัน 127.0.0.0/8 มีอยู่ด้วยเหตุผลเดียวกับข้างต้นพร้อมกับ แท้จริง อินเตอร์เฟซ.
การจัดการการออกอากาศ (เช่น 192.168.1.255 ที่ได้รับบน eth0) และมัลติคาสต์ (เช่น link-local 224.0.0.1 ที่ได้รับบนอินเทอร์เฟซ) อาจไม่ทำงานเหมือนกันในทั้งสองวิธีหรือตามที่คาดไว้ และอาจต้องการกฎเพิ่มเติมสำหรับความต้องการเฉพาะ โดยเฉพาะกับวิธีที่ 2 เนื่องจากการติดตามการแพร่ภาพและมัลติคาสต์นั้นไม่ค่อยมีประโยชน์ เนื่องจากแหล่งที่มาของการตอบกลับจะไม่ (และไม่สามารถ) เป็นปลายทางการออกอากาศดั้งเดิมหรือที่อยู่มัลติคาสต์ได้ ดังนั้นรายการคอนแทร็กจะไม่มีวัน "เห็น" ทราฟฟิกแบบสองทิศทาง โดยปกติแล้วจะไม่มีความสำคัญมากนักสำหรับ กฎเกณฑ์ของรัฐ
หมายเหตุ
สิ่งนี้มักจะเข้ากันไม่ได้กับ stateful NAT
ความเข้าใจของฉันคือ DNAT ไปยังรีโมตโฮสต์จะได้รับทราฟฟิกการตอบกลับที่ไม่ถูก de-NATed และล้มเหลว และ SNAT ที่ส่งต่อนั้นจะไม่ทริกเกอร์เนื่องจากไม่มี คอนแทรค สร้างรายการแล้ว SNAT ที่ไม่ค่อยได้ใช้ในเส้นทางอินพุตน่าจะใช้ได้ และคำสั่งผสมของ DNAT+SNAT (โดยใช้แหล่งที่มาของที่อยู่ในท้องถิ่น) อาจใช้งานได้ตั้งแต่นั้นมาทั้งในทิศทางดั้งเดิมและทิศทางการตอบกลับที่มีปลายทางในเครื่องที่เกี่ยวข้อง ดังนั้น คอนแทรค รายการควรถูกสร้างหรือค้นหาอย่างถูกต้องเสมอ
ชุดกฎมาตรฐาน
กฎจริงที่ใช้ iptables หรือ nftable (ในตารางอื่นของตัวเอง) สามารถทำได้ตามปกติ รวมถึงกฎ stateful สำหรับโฮสต์เอง เนื่องจากทราฟฟิกที่มีการกำหนดเส้นทางจะไม่สร้าง คอนแทรค รายการ กฎ หากมีที่เกี่ยวข้องกับการรับส่งข้อมูลดังกล่าวควรเป็นแบบไร้สัญชาติเท่านั้นและห้ามใช้ใดๆ กะรัต
การแสดงออกเพราะมันจะไม่ตรงกัน
ตรวจสอบพฤติกรรม
สามารถตรวจสอบพฤติกรรมโดยรวมได้แม้ไม่มีกฎไฟร์วอลล์ที่เหมาะสมโดย:
ใช้หุ่นจำลอง กะรัต
กฎเพื่อให้แน่ใจว่า คอนแทรค สิ่งอำนวยความสะดวกได้รับการลงทะเบียนในเนมสเปซเครือข่ายปัจจุบัน
nft เพิ่มตาราง ip mytable
nft เพิ่มเชน ip mytable mychain '{ พิมพ์ hook ตัวกรองลำดับความสำคัญก่อนกำหนดเส้นทาง -150; นโยบายยอมรับ; }'
nft เพิ่มกฎ ip mytable mychain ct สถานะใหม่
ใช้ คอนแทรค
เครื่องมือติดตามเหตุการณ์:
คอนแทรค -E
สร้างทราฟฟิกจากระยะไกล
ใหม่ คอนแทรค จากนั้นรายการจะถูกสร้างขึ้นเพื่อให้เราเตอร์ได้รับทราฟฟิก แต่ไม่ใช่สำหรับทราฟฟิกที่กำหนดเส้นทาง