Score:2

บล็อกทราฟฟิกไปยัง/จากโฮสต์จากด้านหนึ่งของสะพาน

ธง in

ถ้าฉันมีอินเตอร์เฟสอีเธอร์เน็ตสองตัว eth0 และ eth1 พวกเขาจะเชื่อมต่อ (br0) โฮสต์ที่รันบริดจ์สามารถสื่อสารกับเครือข่ายโดยใช้ eth0 หรือ eth1 ขึ้นอยู่กับว่าเชื่อมต่อกับเครือข่ายใด

ตอนนี้สำหรับคำถาม:

ฉันจะป้องกันไม่ให้โฮสต์สื่อสารกับเครือข่ายผ่าน eth1 ได้อย่างไร

สิ่งที่ฉันต้องการจะทำให้สำเร็จ:

eth0 <-> br0: ยอมรับ
eth1 <-> br0: ถูกปฏิเสธ
eth0 <-> eth1: ยอมรับ

ก่อนที่จะบอกว่าเป็นไปไม่ได้และไม่เหมาะกับโมเดล OSI คุณต้องตรวจสอบสิ่งต่อไปนี้: br_netfilter (โมดูลเคอร์เนล), net.bridge.bridge-nf-call-iptables และไฟร์วอลล์แบบโปร่งใส: https://www.debian.org/doc/manuals/securing-debian-manual/bridge-fw.en.html

ฉันกรองแพ็กเกจตามเลเยอร์ 3 ในบริดจ์แล้ว ( eth0 <-> eth1 ) สิ่งที่เหลืออยู่ที่ต้องทำคือป้องกันไม่ให้ไฟร์วอลล์สื่อสารกับเครือข่ายที่ด้านผิดของไฟร์วอลล์

โซลูชัน nftables ที่อธิบายไว้ในหนึ่งในความคิดเห็นนั้นยอดเยี่ยมและนั่นคือวิธีดำเนินการในภายหลัง แต่ตอนนี้ฉันต้องการการแก้ไขด่วนที่ใช้งานได้จนกว่าฉันจะอัปเกรดแพลตฟอร์มและแปลงแอปพลิเคชันเพื่อใช้ nftables

วิธีแก้ปัญหาที่ยอมรับได้สำหรับคำถามนี้ขึ้นอยู่กับ iptables (โดยเฉพาะอย่างยิ่ง) หรือ ebtables (ฉันต้องตรวจสอบสิ่งนี้ แต่ตอนนี้เป็นวิธีที่เร็วกว่า nftables ในการแก้ปัญหานี้)

Tom Yan avatar
in flag
คุณสามารถใช้ iptables และ nftables ได้พร้อมกัน จะไม่เป็นปัญหาเมื่อคุณใช้เพียงตารางบริดจ์กับหลังเท่านั้น (แต่อาจเป็นปัญหาได้หากคุณจำเป็นต้องถอนการติดตั้งเครื่องมือ nftables userspace ด้วยเหตุผลบางประการ)
mlom avatar
in flag
@TomYam ขณะนี้ระบบปฏิบัติการไม่รองรับ nftables (ไม่รองรับเคอร์เนลและไม่มีเครื่องมือ userpace) สิ่งนั้นจะเปลี่ยน แต่สำหรับระยะสั้นฉันไม่ต้องการอัปเดต / กำหนดค่าระบบปฏิบัติการใหม่ เป็นระบบฝังตัวที่มีระบบปฏิบัติการน้อยที่สุด
Score:0
ธง cl
A.B

ไฟร์วอลล์

สามารถใช้กฎไฟร์วอลล์ที่ระดับสะพานอีเทอร์เน็ตเพื่อใช้ข้อจำกัดของ 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 อยู่แล้ว) ก่อนที่จะเข้าใจ สิ่งที่สามารถทำลาย.

Score:0
ธง it

ขออภัย คำถามต้องการคำอธิบายเพิ่มเติมเนื่องจากไม่สมเหตุสมผลในขณะนี้

เมื่อเข้าร่วม eth0 และ eth1 ถึง br0 คุณได้สร้างสวิตช์อีเธอร์เน็ต 2 พอร์ต

สิ่งที่คุณต้องการทำให้สำเร็จ:

eth0 <-> br0: ยอมรับ
eth1 <-> br0: ถูกปฏิเสธ
eth0 <-> eth1: ยอมรับ

จะเป็นไปได้ถ้าคุณลบ eth1 ออกจาก br0 และอนุญาตให้มีการส่งต่อแพ็คเก็ตในเคอร์เนลสำหรับ eth0 และ eth1

iptables จัดการกับที่อยู่ IP - เช่นเลเยอร์ 3 (เครือข่าย) ในรูปแบบ OSI - ดังนั้นจึงไม่สามารถใช้งานได้ในสถานการณ์นี้

คุณกำลังพูดถึงการเปลี่ยนเฟรมเป็นเลเยอร์ 2 (ลิงก์) ในโมเดล OSI ดังนั้นคุณต้องปรึกษา ebtables เพื่อทำการกรองขั้นสูง

ลิงค์สำหรับการอ้างอิงของคุณ:

https://linux.die.net/man/8/ebtables

เป็นไปได้ไหมที่จะใช้ ebtables เพื่อกรองทราฟฟิกตามที่อยู่ MAC บนอินเทอร์เฟซอีเธอร์เน็ตอย่างง่ายโดยไม่ต้องเชื่อมต่อ

Tom Yan avatar
in flag
ไม่ OP นั้นถูกต้องและสามารถทำได้ด้วย nftables (ตารางเชื่อมโยง) หรือ ebtables สิ่งที่ OP ไม่ต้องการคือ L2 "อินพุต" จาก eth1 แต่อนุญาตให้ "ส่งต่อ" L2 `อนุญาตให้มีการส่งต่อแพ็กเก็ตในเคอร์เนลสำหรับ eth0 และ eth1` และคุณไม่ต้องขอให้ใครไป L3
mlom avatar
in flag
คุณอาจต้องการอ่านตัวเลือกเคอร์เนล: net.bridge.bridge-nf-call-iptables ก่อนตอบคำถามนี้
Roman Spiak avatar
it flag
@Tom Yan - โปรดทราบว่าคำตอบของฉันไม่ได้ขอให้ใครใช้ L3 นอกจากนี้ หากมีคนสร้างลินุกซ์บริดจ์ - พวกเขาควรคาดหวังว่ามันจะทำหน้าที่เหมือนสวิตช์ที่เหมาะสม ซึ่งหมายความว่าในการกำหนดค่าเริ่มต้น อินเทอร์เฟซทั้งหมดกำลังขนส่งเฟรมและโดเมนการชนกันของการแบ่งส่วนแบบไมโค หากคุณต้องการป้องกันไม่ให้โฮสต์ที่เชื่อมต่อผ่าน ETH1 สื่อสารกับส่วนที่เหลือของบริดจ์ - อย่าเพิ่มลงในบริดจ์...
Tom Yan avatar
in flag
`ส่วนที่เหลือของสะพาน` เห็นได้ชัดว่าคุณไม่เห็นด้วยซ้ำว่า OP ต้องการบรรลุอะไร: `br0` ไม่ได้อ้างถึงสิ่งนั้น

โพสต์คำตอบ

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