Saya mencoba membuat aturan penyandingan IP-MAC di ebtables . Ada beberapa tutorial dan pertanyaan terkait [1] yang tersedia tetapi saya memiliki jenis pengaturan khusus.
LINGKUNGAN: Saya memiliki banyak host fisik . Setiap host memiliki beberapa kartu ethernet, bergabung dalam ikatan dan digunakan sebagai slave untuk bridge. Ada banyak mesin virtual di setiap host (kvm, qemu, libvirt). Setiap mesin virtual terhubung ke jembatan host fisiknya melalui port baru bernama vnet [0-9] +. Tidak ada NAT. Jaringan berfungsi dengan baik, semua host fisik dapat di-ping, semua mesin virtual juga. Setiap mesin virtual memiliki alamat IP dan alamat MAC sendiri.
MASALAH: Di dalam mesin virtual, alamat IP dapat diubah ke yang lain.
SOLUSI DITEMUKAN: Ada solusi yang diketahui di situs ebtables [2], tetapi solusi ini dapat diterapkan ketika hanya satu host yang digunakan. Ini memungkinkan semua lalu lintas dan jika ada paket dari IP dengan MAC lain dari yang diizinkan, paket dijatuhkan. Jika ada lebih dari satu host, semua pasangan IP-MAC yang ada harus terdaftar pada semua host. Ada kebutuhan untuk solusi kebijakan terbalik.
SOLUSI CRAFTED: Saya telah mencoba menggunakan ebtables dengan cara terbalik. Berikut ini contoh yang saya coba.
CONTOH 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
CONTOH 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
Inti dari apa yang saya inginkan adalah memiliki DROP kebijakan default dan hanya mengizinkan lalu lintas dari mesin virtual dengan pasangan IP-MAC yang benar yang digunakan pada host yang diberikan. Namun, solusi itu tidak berhasil.
PERTANYAAN: Bagaimana mengizinkan lalu lintas di jembatan hanya untuk pasangan IP-MAC tertentu yang menjalankan mesin virtual dan menjatuhkan semua pasangan IP-MAC yang tidak dikenal yang datang dari ports vnet [0-9] +?
Terima kasih banyak atas jawaban Anda.
Jawaban:
Saya akhirnya berhasil membuat solusi kerja.
Jadi, pada awalnya, tidak ada aturan apa pun dan semua kebijakan diatur untuk MENERIMA. Tidak ada rantai yang ditentukan pengguna. Tabel filter terlihat seperti ini:
Rantai baru ditambahkan. Rantai ini berisi semua pasangan IP-MAC yang diizinkan. Itu disebut VMS.
Sekarang, bagian yang penting. Untuk setiap frame yang berisi paket IP (atau bagian-bagiannya) yang melalui bridge dari port vnet [0-9] +, terapkan kebijakan rantai dan aturan rantai VMS. Dengan kata lain, untuk setiap paket IP yang datang dari mesin virtual apa pun, terapkan rantai VMS.
Kebijakan default rantai VMS harus DROP. Dengan cara ini, setiap paket IP yang berasal dari mesin virtual mana pun akan dihapus secara default. Kemudian, pengecualian pasangan IP-MAC yang diizinkan ditambahkan. DROP kebijakan default menyebabkan, bahwa semua lalu lintas dari mesin virtual apa pun dengan pasangan IP-MAC yang tidak diketahui dibuang sekaligus, membuat spoofing IP menjadi tidak mungkin.
Filter tabel terlihat seperti ini sekarang. Juga, cara ini terlihat ketika tidak ada mesin virtual yang berjalan (diizinkan).
Misalkan, ada dua mesin yang berjalan. Jika kami mencoba melakukan ping ke / dari mereka, lalu lintas turun dan tujuan tidak dapat dijangkau. Ini adalah hasil yang diinginkan, karena lalu lintas ini belum diizinkan. Hanya satu perintah yang cukup untuk memungkinkan setiap lalu lintas mesin virtual.
Sekarang, lalu lintas dari mesin virtual yang diizinkan mengalir dengan baik dan spoofing IP dicegah.
Solusi ini mungkin tidak sempurna dan jika Anda memiliki komentar atau perbaikan, saya akan dengan senang hati mendengarnya.
sumber