Решено: удаление правил IPTables

Модератор: Модераторы разделов

Аватара пользователя
desperate
Сообщения: 228
ОС: Debian Lenny

Решено: удаление правил IPTables

Сообщение desperate »

подскажите пожжалуйста, как реализовать удаление цепочки из iptables по определенному критерию.
Другими словами я получаю номера цепочек, соответсвующих условию следующим действом

Код: Выделить всё

iptables -L FORWARD -n --line-numbers | grep $1 | awk '{print $1}

в $1 у меня передается IP адрес
дальше идеи кончились, нужны советы.(язык perl или bash)
Заранее всем спасибо
### Samsung R460-FSS0 # OS Debian Lenny # AMD64 # Gnome or Fluxbox ###
Спасибо сказали:
Аватара пользователя
desperate
Сообщения: 228
ОС: Debian Lenny

Re: Решено: удаление правил IPTables

Сообщение desperate »

все :) сам разобрался, вот мое решение, если кому то интересно.
создаем файл,например lock_users

Код: Выделить всё

#!/bin/bash
RUL=`iptables -L FORWARD -n --line-numbers | grep $1 | awk '{print $1}'`;
cnt=0
for i in $RUL;
do
 iptables -D FORWARD $(($i-$cnt));
 cnt=$(($cnt+1))
done;


и создаем файл ./firewall.pl

Код: Выделить всё

#!/usr/bin/perl
use FindBin;
use lib $FindBin::Bin;

require 'inc/common.inc.pl';

my $ipt = $config{'iptables'};

$STH = $dbh->prepare("select inet_ntoa(checkedip) from users where status=1");
$STH->execute;

while ($checkedip = $STH->fetchrow_array()) {
           system("./lock_users $checkedip");
}

$STH->finish;

$STH = $dbh->prepare("select inet_ntoa(checkedip) from users where status=0");
$STH->execute;

while ($checkedip = $STH->fetchrow_array()) {
           system("$ipt -A FORWARD -s $checkedip -j billing");
           system("$ipt -A FORWARD -d $checkedip -j billing");
}


$STH->finish;
$dbh->disconnect;


не слишком изящно, но зато работает :)
### Samsung R460-FSS0 # OS Debian Lenny # AMD64 # Gnome or Fluxbox ###
Спасибо сказали: