iptables arp vergleichen und ausführen

iptables arp vergleichen und ausführen

BEISPIEL:

iptables

:internet - [0:0] -A internet -m mac --mac-source 48:5D:60:FC:29:B0 -j RETURN

BEGEHEN

[root@localhost:~ ] $ arp

Adresse HW-Typ HW-Adresse Flags Maske Iface

10.2.0.1 Ether 48:5D:60:FC:29:B0 C br0

ich möchte die iptable-Regel (-D internet -m mac --mac-source 48:5D:60:FC:29:B0 -j RETURN) löschen, wenn der Mac nicht auf der ARP-Liste vorhanden ist.

Antwort1

In welcher Sprache soll das Skript sein? In welcher? Denn mit einem Shell-Skript ist das gelinde gesagt mühsam ...

Sie könnten das Ergebnis Ihres arp + grep und iptables -L andernfalls in zwei verschiedenen Dateien speichern und diese beiden Dateien dann in ein Array laden. Dann wird es ziemlich einfach: Sie gehen eines der Arrays durch und wenn es im anderen existiert/nicht existiert, löschen Sie es.

arp |grep br0 | perl -nle '/her   ([^ ]+)/ && print $1' >file1.txt
iptables -t mangle -L -v -n |grep MAC | perl -nle '/MAC ([^ ]+)/ && print $1' >file2.txt
php do-delete.php

Und do-delete.php könnte die Dateien laden und einen system()-Aufruf ausführen, um die Einträge zu löschen:

<?php
$f1 = file("file1.txt");
$f2 = file("file2.txt");
$to_delete = array_diff($f2, $f1);
foreach($to_delete as $mac)
{
  system('iptables -t mangle -D internet -m mac --mac-source ' . $mac . ' -j RETURN');
}

So ähnlich... (HINWEIS GETESTET!) Beachten Sie, wie diearray_diff()Anruf ist einfach! Nichts dergleichen kenne ich in einem Shell-Skript.

Sie können die resultierende Tabelle auch in einer Datei ausdrucken.

file_put_contents('file3.txt', join($to_delete, "\n") . "\n");

Verwenden Sie es dann, um den Löschvorgang aus der Shell durchzuführen ...

Sie können auch PHP verwenden, um die ersten beiden Dateien zu generieren mitpopen().

verwandte Informationen