Ich versuche, IP-MAC- Pairing-Regeln in ebtables zu erstellen . Es gibt nur wenige Tutorials und verwandte Fragen [1], aber ich habe eine bestimmte Einstellung.
UMWELT: Ich habe viele physische Gastgeber . Jeder Host verfügt über wenige Ethernet-Karten, die verbunden und als Slave für die Bridge verwendet werden. Auf jedem Host befinden sich viele virtuelle Maschinen (kvm, qemu, libvirt). Jede virtuelle Maschine ist über einen neuen Port namens vnet [0-9] + mit einer Bridge ihres physischen Hosts verbunden. Es gibt kein NAT. Das Netzwerk funktioniert einwandfrei, alle physischen Hosts können gepingt werden, auch alle virtuellen Maschinen. Jede virtuelle Maschine hat ihre eigene IP-Adresse und MAC-Adresse.
PROBLEM: Innerhalb einer virtuellen Maschine kann die IP-Adresse in eine andere geändert werden.
GEFUNDENE LÖSUNG: Es gibt eine bekannte Lösung auf der ebtables-Site [2], aber diese Lösung ist anwendbar, wenn nur ein Host verwendet wird. Es erlaubt den gesamten Datenverkehr und wenn ein Paket von IP mit einem anderen MAC als zulässig vorhanden ist, wird das Paket verworfen. Wenn mehr als ein Host vorhanden ist, müssen alle vorhandenen IP-MAC-Paare auf allen Hosts registriert sein. Es ist eine umgekehrte Richtlinienlösung erforderlich.
CRAFTED SOLUTION: Ich habe versucht, ebtables invertiert zu verwenden. Hier ist ein Beispiel, was ich versucht habe.
BEISPIEL 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
BEISPIEL 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
Der Kern meiner Anforderungen besteht darin, die Standardrichtlinie DROP zu verwenden und nur Datenverkehr von virtuellen Maschinen mit dem richtigen IP-MAC-Paar zuzulassen, das auf einem bestimmten Host bereitgestellt wird. Diese Lösungen funktionieren jedoch nicht.
FRAGE: Wie kann ich den Datenverkehr auf der Bridge nur für bestimmte IP-MAC-Paare laufender virtueller Maschinen zulassen und alle unbekannten IP-MAC-Paare löschen, die von den Ports vnet [0-9] + kommen?
Vielen Dank für alle Antworten.
Antworten:
Ich habe es endlich geschafft, eine funktionierende Lösung zu finden.
Am Anfang gibt es also überhaupt keine Regeln und alle Richtlinien sind auf AKZEPTIEREN eingestellt. Es gibt keine benutzerdefinierten Ketten. Die Filtertabelle sieht folgendermaßen aus:
Eine neue Kette wird hinzugefügt. Diese Kette enthält alle zulässigen IP-MAC-Paare. Es heißt VMS.
Nun zum wichtigen Teil. Wenden Sie für jeden Frame, der ein IP-Paket (oder seine Teile) enthält, das eine Brücke von Port vnet [0-9] + durchläuft, die Kettenrichtlinien und -regeln des Ketten-VMS an. Mit anderen Worten, wenden Sie für jedes IP-Paket, das von einer virtuellen Maschine kommt, die VMS-Kette an.
Die Standardrichtlinie von Chain VMS muss DROP sein. Auf diese Weise wird jedes von einer virtuellen Maschine kommende IP-Paket standardmäßig verworfen. Später werden zulässige Ausnahmen für IP-MAC-Paare hinzugefügt. Die Standardrichtlinie DROP führt dazu, dass der gesamte Datenverkehr von einer virtuellen Maschine mit unbekanntem IP-MAC-Paar auf einmal gelöscht wird, was IP-Spoofing unmöglich macht.
Der Tabellenfilter sieht jetzt so aus. So sieht es auch aus, wenn keine virtuellen Maschinen ausgeführt werden (zulässig).
Angenommen, es gibt zwei laufende Maschinen. Wenn wir versuchen, zu ihnen zu pingen, wird der Datenverkehr unterbrochen und das Ziel ist nicht erreichbar. Dies ist das gewünschte Ergebnis, da dieser Verkehr noch nicht erlaubt ist. Nur ein Befehl reicht aus, um jeden Datenverkehr einer virtuellen Maschine zuzulassen.
Jetzt fließt der Datenverkehr von zulässigen virtuellen Maschinen in Ordnung und IP-Spoofing wird verhindert.
Diese Lösung ist möglicherweise nicht perfekt und wenn Sie Kommentare oder Verbesserungen haben, werde ich diese gerne hören.
quelle