ไฟร์วอลล์
สามารถใช้กฎไฟร์วอลล์ที่ระดับสะพานอีเทอร์เน็ตเพื่อใช้ข้อจำกัดของ OP
ลินุกซ์บริดจ์มีพอร์ต "ตัวเอง" พิเศษพร้อมชื่อของบริดจ์ บริดจ์โดยรวมมีส่วนร่วมในเฟรมส่งต่อที่ L2 ระหว่างพอร์ต (อินเทอร์เฟซที่ตั้งค่าเป็นบริดจ์-) แต่พอร์ตในตัวของบริดจ์มีส่วนร่วมในแพ็กเก็ตเส้นทางที่ L3 เช่นเดียวกับอินเทอร์เฟซอื่นๆ เปรียบเทียบสิ่งนี้กับสวิตช์ที่มีการจัดการอย่างง่าย: มีพอร์ต แต่ยังสามารถเข้าถึงได้เพื่อวัตถุประสงค์ในการจัดการผ่าน IP: แพ็กเก็ต IP ดังกล่าวสามารถเข้าถึงได้จากพอร์ตใดก็ได้ (ยังคงเป็นอีเธอร์เน็ตเฟรม) แต่จะถูกส่งไปยังสวิตช์เองแทนที่จะส่งต่อไปยัง พอร์ตอื่น
สำหรับกรอบไฟร์วอลล์ Netfilter ที่ใช้โดย nftable และ ebtablesสิ่งนี้ถูกแปลโดยการให้ทราฟฟิกแบบบริดจ์พอร์ตเป็นบริดจ์พอร์ตทราฟฟิกที่เห็นใน กรองเบ็ดไปข้างหน้า (ตัวกรอง/ห่วงโซ่ไปข้างหน้าสำหรับ ebtables). การรับส่งข้อมูลจากพอร์ตตัวเองไปยังพอร์ตอื่นคือ เบ็ดเอาท์พุทตัวกรอง (filter/OUTPUT chain) และทราฟฟิกจากพอร์ตไปยังบริดจ์เองพอร์ตคือ เบ็ดอินพุตตัวกรอง (ตัวกรอง/ห่วงโซ่อินพุต) แผนผังนี้ อธิบายในส่วน Link Layer (กล่องสีน้ำเงินในฟิลด์สีน้ำเงินด้านล่าง)
ดังนั้นนี่คือการจราจรที่จะปิดกั้นระหว่าง eth1
และอินเทอร์เฟซด้วยตนเอง (เช่น บล็อกการประมวลผลเพิ่มเติมไปยังสแตกเส้นทาง) และในทางกลับกัน
ฉันจะถือว่ามีสะพานเดียวที่นี่ ขณะนี้มีการนำเสนอเครื่องมือเหล่านี้แล้ว ควรลงทุนเพิ่มเติมเพื่อใช้งานอย่างเหมาะสม โดยเฉพาะอย่างยิ่งในกรณีที่มีสะพานหลายสะพาน อย่างไรก็ตามคำสั่งด้านล่างจะทำงานได้อย่างถูกต้องตั้งแต่นั้นมา eth1
สามารถเป็นท่าเรือได้ครั้งละหนึ่งสะพาน: ที่นี่ br0
.
โดยใช้ ebtables:
ebtables -A อินพุต -i eth1 -j DROP
ebtables -A OUTPUT -o eth1 -j DROP
ไม่มีการพูดถึง br0
: แสดงโดย ป้อนข้อมูล
และ เอาต์พุต
.
เนื่องจากค่าเริ่มต้นต่างๆ ยังคงยอมรับการรับส่งข้อมูล eth0
จะไม่ถูกบล็อกด้วย br0
หรือการจราจรระหว่าง eth0
และ eth1
.
การใช้ (เร็วพอที่จะหลีกเลี่ยงข้อผิดพลาดทางไวยากรณ์) nftables: มันเหมือนกันกับต้นแบบเริ่มต้นเพื่อเพิ่ม:
nft เพิ่มสะพานตาราง mytable
nft เพิ่มสะพานลูกโซ่ mytable myinput '{ ประเภทตัวกรอง hook ตัวกรองลำดับความสำคัญของอินพุต; นโยบายยอมรับ; }'
nft เพิ่มสะพานลูกโซ่ mytable myoutput '{ ประเภทตัวกรอง hook ตัวกรองลำดับความสำคัญของอินพุต; นโยบายยอมรับ; }'
nft เพิ่มสะพานกฎ mytable myinput iif eth1 ลดลง
nft เพิ่มสะพานกฎ mytable myoutput oif eth1 ลดลง
บันทึก
iptables ไม่ได้ใช้ที่เลเยอร์อีเธอร์เน็ต (L2) แต่ที่เลเยอร์ IP (L3) จึงไม่ใช่เครื่องมือที่เพียงพอสำหรับสิ่งนี้ อาจมีคุณสมบัติพิเศษที่เรียกว่า ตัวกรองตาข่ายสะพาน ที่จะแปลงอีเธอร์เน็ตเฟรมประเภท IPv4 เพื่อส่งแพ็กเก็ต IP เทียม iptables (ยังอยู่ในเส้นทางบริดจ์) จึงจะประมวลผลได้ จากนั้นจะแปลงแพ็กเก็ตเหล่านั้นกลับเป็นอีเธอร์เน็ตเฟรมเพื่อประมวลผลต่อไปโดย ebtables. ก็อนุญาตให้ใช้ได้ iptables
เพื่อทำการกรองดังกล่าวหากปฏิบัติตามและเข้าใจอย่างถูกต้องในการจัดการกล่องสีเขียว (ระดับเครือข่าย: แพ็กเก็ต) ในฟิลด์สีน้ำเงินด้านล่าง (Link Layer: Ethernet) ใน แผนผังก่อนหน้า แต่มักจะทำให้เกิดผลกระทบเพิ่มเติมที่ไม่พึงประสงค์ อย่าใช้ฟีเจอร์นี้ (หรือทดลองอะไรในระบบที่รัน Docker อยู่แล้ว) ก่อนที่จะเข้าใจ สิ่งที่สามารถทำลาย.