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 ?
- หรือสะพานสามารถแยกออกจากการรับส่งข้อมูลที่มาจากอินเทอร์เฟซอื่น ๆ ได้หรือไม่