วิธีป้องกันการแอบอ้าง IP โดยใช้ MAC และ ebtables


10

ฉันกำลังพยายามที่จะสร้างIP-MACกฎการจับคู่ในebtables มีแบบฝึกหัดและคำถามที่เกี่ยวข้อง [1] อยู่เล็กน้อย แต่ฉันมีการตั้งค่าที่เฉพาะเจาะจง

สภาพแวดล้อม: ฉันมีโฮสต์ทางกายภาพมากมาย แต่ละโฮสต์มีการ์ดอีเธอร์เน็ตไม่กี่ใบเข้าร่วมในบอนด์และใช้เป็นทาสสำหรับบริดจ์ มีเครื่องเสมือนจำนวนมากในแต่ละโฮสต์ (kvm, qemu, libvirt) เครื่องเสมือนแต่ละเครื่องเชื่อมต่อกับบริดจ์ของโฮสต์จริงผ่านพอร์ตใหม่ที่เรียกว่า vnet [0-9] + ไม่มี NAT ระบบเครือข่ายทำงานได้ดีโฮสต์ทางกายภาพทั้งหมดสามารถปิงเครื่องเสมือนทั้งหมดได้เช่นกัน เครื่องเสมือนแต่ละเครื่องมีที่อยู่ IP และที่อยู่ MAC ของตนเอง

ปัญหา:ภายในเครื่องเสมือนสามารถเปลี่ยนที่อยู่ IP เป็นอีกเครื่องหนึ่งได้

FOUND SOLUTION:มีวิธีการแก้ปัญหาที่รู้จักกันในเว็บไซต์ ebtables [2] แต่วิธีการแก้ปัญหานี้จะใช้ได้เมื่อมีการใช้เพียงหนึ่งโฮสต์ อนุญาตการรับส่งข้อมูลทั้งหมดและหากมีแพ็คเก็ตจาก IP ที่มี MAC อื่นนอกเหนือจากที่อนุญาตแพ็กเก็ตจะถูกดร็อป หากมีมากกว่าหนึ่งโฮสต์มันต้องการคู่ IP-MAC ที่มีอยู่ทั้งหมดเพื่อลงทะเบียนกับโฮสต์ทั้งหมด ไม่จำเป็นต้องมีวิธีแก้ไขปัญหานโยบายย้อนกลับ

การแก้ปัญหาที่ผ่านมา:ฉันพยายามใช้ ebtables แบบคว่ำ นี่คือตัวอย่างสิ่งที่ฉันพยายาม

ตัวอย่าง 1

Bridge table: filter
Bridge chain: INPUT, entries: 2, policy: DROP
-i bond0 -j ACCEPT 
-p IPv4 -s 54:52:0:98:d7:b6 --ip-src 192.168.11.122 -j ACCEPT 
Bridge chain: FORWARD, entries: 0, policy: ACCEPT
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

ตัวอย่าง 2

Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 1, policy: DROP
-p IPv4 -s 54:52:0:98:d7:b6 --ip-src 192.168.11.122 -j ACCEPT 
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

หลักของสิ่งที่ฉันต้องการคือการมีนโยบายเริ่มต้น DROP และอนุญาตการรับส่งข้อมูลจากเครื่องเสมือนที่มีคู่ IP-MAC ที่ถูกต้องปรับใช้บนโฮสต์ที่กำหนด อย่างไรก็ตามการแก้ปัญหาเหล่านั้นไม่ทำงาน

คำถาม:จะอนุญาตการรับส่งข้อมูลบนบริดจ์สำหรับคู่ IP-MAC ที่ระบุในการใช้งานเครื่องเสมือนและปล่อยคู่ IP-MAC ที่ไม่รู้จักทั้งหมดที่มาจากพอร์ต vnet [0-9] + ได้อย่างไร

ขอบคุณมากสำหรับคำตอบใด ๆ


2
แต่จะเกิดอะไรขึ้นถ้ามีคนปลอมแปลงแม็คของพวกเขา?
Zoredache

1
นั่นก็เป็นปัญหาเช่นกัน แต่การคาดเดาคู่ IP-MAC ที่ถูกต้องนั้นยากและรวดเร็วเกินกว่าระดับความปลอดภัยของบริการของฉัน
Martin

คำตอบ:


12

ในที่สุดฉันก็สามารถแก้ปัญหาการทำงานได้

  1. โซลูชันใช้คู่ของ ebtables และ IP-MAC
  2. ตารางที่จำเป็นเท่านั้นคือตาราง 'ตัวกรอง' เริ่มต้น
  3. ไม่จำเป็นต้องเพิ่มกฎหรือนโยบายใด ๆ ในเครือข่าย INPUT เนื่องจากเครือข่าย INPUT ไม่เกี่ยวข้องกับการใช้งานเครื่องเสมือน คำอธิบายความหมายของ INPUT, OUTPUT และ FORWARD chains ในตารางตัวกรองอยู่ใน ebtables manpage
  4. เนื่องจาก ebtables ทำงานในระดับอีเธอร์เน็ตและการจับคู่ IP-MAC นั้นใช้ได้เฉพาะกับแพ็คเก็ต IP เท่านั้นจึงจำเป็นต้องเน้นย้ำว่าในกฎเพื่อไม่ให้บล็อกเฟรม ARP และการรับส่งข้อมูลที่สำคัญอื่น ๆ

ดังนั้นในการเริ่มต้นไม่มีกฎใด ๆ และนโยบายทั้งหมดถูกตั้งค่าให้ยอมรับ ไม่มีกลุ่มที่ผู้ใช้กำหนด ตารางตัวกรองมีลักษณะดังนี้:

Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 0, policy: ACCEPT
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT

มีการเพิ่มห่วงโซ่ใหม่ ห่วงโซ่นี้มีคู่ IP-MAC ที่อนุญาตทั้งหมด มันเรียกว่า VMS

# ebtables -N VMS

ตอนนี้ส่วนที่สำคัญ สำหรับทุกเฟรมที่มี IP แพ็คเก็ต (หรือบางส่วน) ซึ่งกำลังเชื่อมต่อผ่านสะพานจากพอร์ต vnet [0-9] + ให้ใช้นโยบายลูกโซ่และกฎของเชน VMS กล่าวอีกนัยหนึ่งสำหรับทุกแพ็คเก็ต IP ที่มาจากเครื่องเสมือนใด ๆ ใช้ VMS chain

# ebtables -A FORWARD -p ip -i vnet+ -j VMS

นโยบายเริ่มต้นของ chain VMS จะต้องเป็น DROP วิธีนี้ทุกแพ็กเก็ต IP ที่มาจากเครื่องเสมือนใด ๆ จะถูกดรอปตามค่าเริ่มต้น ต่อมามีการเพิ่มข้อยกเว้นคู่ IP-MAC ที่ได้รับอนุญาต นโยบายเริ่มต้น DROP ทำให้เกิดการรับส่งข้อมูลทั้งหมดจากเครื่องเสมือนใด ๆ ที่มีคู่ IP-MAC ที่ไม่รู้จักจะถูกปล่อยพร้อมกันทำให้ IP ไม่สามารถทำการปลอมแปลงได้

# ebtables -P VMS DROP

ตัวกรองตารางจะมีลักษณะเช่นนี้ นอกจากนี้วิธีนี้จะดูเหมือนเมื่อไม่มีเครื่องเสมือนทำงาน (อนุญาต)

Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 1, policy: ACCEPT
-p IPv4 -i vnet+ -j VMS
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT
Bridge chain: VMS, entries: 0, policy: DROP

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

# ebtables -A VMS -p ip --ip-src 192.168.11.125 -s 54:52:00:cc:35:fa -j ACCEPT
# ebtables -A VMS -p ip --ip-src 192.168.11.122 -s 54:52:00:98:d7:b6 -j ACCEPT

ทีนี้การรับส่งข้อมูลจากเครื่องเสมือนที่ได้รับอนุญาตนั้นกำลังดำเนินไปอย่างราบรื่นและป้องกันการปลอมแปลง IP

วิธีแก้ปัญหานี้อาจไม่สมบูรณ์และหากคุณมีความคิดเห็นหรือการปรับปรุงใด ๆ ฉันยินดีที่จะได้ยินพวกเขา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.