iptables arp compara e executa

1

EXEMPLO:

iptables

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

COMITAR

[root @ localhost: ~] $ arp

Endereço HWtype HWaddress Flags Mask Iface

10.2.0.1 �ter 48: 5D: 60: FC: 29: B0C br0

Eu gostaria de excluir a regra iptable (-D internet -m mac --mac-source 48: 5D: 60: FC: 29: B0 -j RETURN) se o mac na lista ARP não estiver presente.

    
por dannymagat 17.12.2013 / 08:59

1 resposta

1

Em que idioma você gostaria que o script fosse? Qualquer? Porque com um script de shell que é tedioso para dizer o mínimo ...

Você poderia salvar o resultado de seu arp + grep e iptables -L em 2 arquivos diferentes e, em seguida, carregar esses dois arquivos em uma matriz. Então fica bem fácil, você passa por um dos array e se existe / não existe no outro, então delete.

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

E o do-delete.php poderia estar carregando os arquivos e executar uma chamada do sistema () para excluir as 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 parecido ... (NOTE TESTED!) Observe como o array_diff ()

Você também pode imprimir a tabela resultante em um arquivo.

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

Em seguida, use isso para fazer a exclusão do shell ...

Você também pode usar o PHP para gerar os dois primeiros arquivos usando popen () .

    
por 17.12.2013 / 10:14