Score:1

กรองการรับส่งข้อมูลตามที่อยู่ MAC ด้วย nftables

ธง in

TL;ดร: เมื่อปลอมที่อยู่ MAC ฉันจะแน่ใจได้อย่างไรว่าที่อยู่จริงจะไม่รั่วไหลไปยังส่วนที่เหลือของเครือข่ายโดยใช้ nftables

บริบท

เพื่อจุดประสงค์ในการฝึกอบรมความปลอดภัยเครือข่าย ฉันกำลังสร้างไฟล์ แตะเครือข่าย ประกอบด้วยก สะพานโปร่งใส ด้วยสองอินเตอร์เฟส (การแตะ)

การแตะคือคอมพิวเตอร์กำลังทำงานอยู่ เดเบียนบูลส์อายที่มี 4 อินเทอร์เฟซอีเธอร์เน็ตดังนี้:

อินเตอร์เฟซ แมค
enp3s0 00:90:27:b4:40:58
enp4s0 00:90:27:b4:40:59
enp6s0 00:90:27:b4:40:5ก
enp7s0 00:90:27:b4:40:5ข
  • enp3s0 เชื่อมต่อกับสวิตช์และรับที่อยู่ IP ผ่าน DHCP
  • นอกจากนี้ ฉันยังสร้างบริดจ์ br0 ด้วย nmcli โดยมีสองอินเทอร์เฟซสลาฟ: enp6s0 และ enp7s0
  • enp7s0 เชื่อมต่อกับสวิตช์

สะพานถูกสร้างขึ้นดังนี้:

การเชื่อมต่อ nmcli เพิ่มการเชื่อมต่อ ประเภทบริดจ์ ifname br0 con-name br0 ipv4.method ปิดใช้งาน ipv6.method ละเว้น bridge.stp ไม่ใช่ bridge.vlan-filtering ใช่ connection.autoconnect-slaves 1 เชื่อมต่ออัตโนมัติ ไม่
การเชื่อมต่อ nmcli เพิ่มประเภท อีเธอร์เน็ต ifname enp6s0 con-name br0-slave-enp6s0 บริดจ์มาสเตอร์ประเภททาส br0 เชื่อมต่ออัตโนมัติ ไม่
การเชื่อมต่อ nmcli เพิ่มประเภท อีเธอร์เน็ต ifname enp7s0 con-name br0-slave-enp7s0 บริดจ์มาสเตอร์ประเภททาส br0 เชื่อมต่ออัตโนมัติ ไม่

เป้าหมาย

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

ตารางสะพาน netdev {
    ตั้ง macs {
        พิมพ์ ether_addr
        องค์ประกอบ = { 00:90:27:b4:40:59,
                 00:90:27:b4:40:5ก, 00:90:27:b4:40:5ข }
    }

    โซ่ br0 {
        ประเภทตัวกรอง hook อุปกรณ์ขาเข้า = { enp4s0, enp6s0, enp7s0 } ตัวกรองลำดับความสำคัญ; นโยบายยอมรับ;
        อีเธอร์ saddr @macs ลดลง
        บันทึกแฟล็กตัวนับคำนำหน้า "myfilter " ทั้งหมด
    }
}

ฉันต้องการมีตัวนับและรายละเอียดบันทึกของแพ็กเก็ตที่ถูกทิ้ง

ปัญหา

ทราฟฟิกกำลังลดลงและการบันทึกเสร็จสิ้นใน /var/log/syslog ตามที่คาดไว้ กำลังปรับปรุงเคาน์เตอร์ แต่กฎ netfilter ดูเหมือนจะไม่ทำงานตามที่ตั้งใจไว้ ดูเหมือนว่าจะยกเลิกการรับส่งข้อมูลทั้งหมดที่ส่งไปยัง enp7s0 แทน

ตัวอย่าง:

20 ธันวาคม 01:23:47 เคอร์เนลกล่องทดสอบ: [32441.125971] myfilter IN=enp7s0 OUT= MACSRC=10:c2:5a:58:72:8f MACDST=01:00:5e:7f:ff:fa MACPROTO=0800 SRC= 192.168.0.1 DST=239.255.255.250 LEN=367 TOS=0x00 PREC=0x00 TTL=4 ID=37026 PROTO=UDP SPT=1900 DPT=1900 LEN=347 
20 ธันวาคม 01:23:47 เคอร์เนลกล่องทดสอบ: [32441.126842] myfilter IN=enp7s0 OUT= MACSRC=10:c2:5a:58:72:8f MACDST=01:00:5e:7f:ff:fa MACPROTO=0800 SRC= 192.168.0.1 DST=239.255.255.250 LEN=312 TOS=0x00 PREC=0x00 TTL=4 ID=37027 PROTO=UDP SPT=1900 DPT=1900 LEN=292 
20 ธันวาคม 01:23:47 เคอร์เนลกล่องทดสอบ: [32441.127554] myfilter IN=enp7s0 OUT= MACSRC=10:c2:5a:58:72:8f MACDST=01:00:5e:7f:ff:fa MACPROTO=0800 SRC= 192.168.0.1 DST=239.255.255.250 LEN=303 TOS=0x00 PREC=0x00 TTL=4 ID=37028 PROTO=UDP SPT=1900 DPT=1900 LEN=283 
20 ธันวาคม 01:23:47 เคอร์เนลกล่องทดสอบ: [32441.128342] myfilter IN=enp7s0 OUT= MACSRC=10:c2:5a:58:72:8f MACDST=01:00:5e:7f:ff:fa MACPROTO=0800 SRC= 192.168.0.1 DST=239.255.255.250 LEN=377 TOS=0x00 PREC=0x00 TTL=4 ID=37029 PROTO=UDP SPT=1900 DPT=1900 LEN=357 
20 ธันวาคม 01:23:53 เคอร์เนลกล่องทดสอบ: [32447.003559] myfilter IN=enp7s0 OUT= MACSRC=10:c2:5a:58:72:8f MACDST=33:33:00:00:00:01 MACPROTO=86dd SRC= fe80:0000:0000:0000:12c2:5aff:fe75:899d DST=ff02:0000:0000:0000:0000:0000:0000:0001 LEN=176 TC=0 HOPLIMIT=255 FLOWLBL=0 PROTO=ICMPv6 TYPE=134 รหัส=0 
20 ธันวาคม 01:23:53 เคอร์เนลกล่องทดสอบ: [32447.015382] myfilter IN=enp7s0 OUT= MACSRC=00:90:27:e6:10:58 MACDST=33:33:00:00:00:16 MACPROTO=86dd SRC= fe80:0000:0000:0000:6d06:284e:2844:db03 DST=ff02:0000:0000:0000:0000:0000:0000:0016 LEN=136 TC=0 HOPLIMIT=1 FLOWLBL=0 OPT ( ) PROTO=ICMPv6 TYPE=143 รหัส=0 
20 ธันวาคม 01:23:53 เคอร์เนลกล่องทดสอบ: [32447.619279] myfilter IN=enp7s0 OUT= MACSRC=00:90:27:e6:10:58 MACDST=33:33:00:00:00:16 MACPROTO=86dd SRC= fe80:0000:0000:0000:6d06:284e:2844:db03 DST=ff02:0000:0000:0000:0000:0000:0000:0016 LEN=136 TC=0 HOPLIMIT=1 FLOWLBL=0 OPT ( ) PROTO=ICMPv6 TYPE=143 รหัส=0 

ฉันเชื่อว่าฉันอาจต้องใช้ ทางออก ขอเกี่ยวแทนทางเข้า ฉันเข้าใจว่า egress hook มีให้ใช้งานใน nft จากเวอร์ชัน 1.01 nft เวอร์ชันเสถียรปัจจุบันใน Debian คือ 0.98 ดังนั้นฉันจึงอัปเกรดเป็น v1.01 ด้วยตนเองโดยดาวน์โหลดแพ็คเกจด้วยตนเอง แต่การแทนที่ขาเข้าด้วยขาออกไม่ทำงาน: nft ไม่รู้จักกฎของฉัน

คำถาม

  • วิธีการของฉันสมเหตุสมผลไหม ? ฉันสามารถใช้ ingress hook เพื่อวัตถุประสงค์ของฉันได้หรือไม่ ? หรือจำเป็นต้องมีทางออก ?
  • หรือสามารถทำได้ด้วย tc ?
  • หรือสะพานสามารถแยกออกจากการรับส่งข้อมูลที่มาจากอินเทอร์เฟซอื่น ๆ ได้หรือไม่
A.B avatar
cl flag
A.B
ตามหมายเหตุ การสนับสนุนฝั่งเคอร์เนลของ Linux สำหรับ nftables netdev egress เริ่มต้นที่ Linux 5.16 (รวมถึง "current" 5.16-rc6)
Kate avatar
in flag
@A.B จุดดี: เคอร์เนลที่รันของฉันเห็นได้ชัดว่ายังไม่เพียงพอ: Linux testbox 5.10.0-9-amd64 #1 SMP Debian 5.10.70-1 (2021-09-30) x86_64 GNU/Linux

โพสต์คำตอบ

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