Модератор: Модераторы разделов
desperate
Сообщения: 228
ОС: Debian Lenny
Сообщение
desperate » 25.05.2009 20:48
подскажите пожжалуйста, как реализовать удаление цепочки из 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
Сообщение
desperate » 25.05.2009 21:39
все
сам разобрался, вот мое решение, если кому то интересно.
создаем файл,например 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 ###