iptables arp compara y ejecuta

iptables arp compara y ejecuta

EJEMPLO:

iptables

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

COMPROMETERSE

[raíz@localhost:~ ] $ arp

Dirección HWtype HWaddress Banderas Máscara Iface

10.2.0.1 éter 48:5D:60:FC:29:B0 C br0

Me gustaría eliminar la regla iptable (-D internet -m mac --mac-source 48:5D:60:FC:29:B0 -j RETURN) si el mac en la lista ARP no está presente.

Respuesta1

¿En qué idioma te gustaría que estuviera ese guión? ¿Cualquier? Porque con un script de shell que es tedioso por decir lo menos...

De lo contrario, podría guardar el resultado de arp + grep e iptables -L en 2 archivos diferentes y luego cargar esos dos archivos en una matriz. Entonces se vuelve bastante fácil, revisa una de las matrices y, si existe o no existe en la otra, la elimina.

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

Y do-delete.php podría estar cargando los archivos y ejecutar una llamada al sistema() para eliminar las entradas:

<?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');
}

Algo así... (¡NOTA PROBADA!) Observe cómo eldiferencia_matriz()llamar es fácil! Nada de eso, que yo sepa, en un script de shell.

También puede imprimir la tabla resultante en un archivo.

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

Luego úsalo para eliminar del shell...

También puedes usar PHP para generar los dos primeros archivos usandopopen().

información relacionada