Вопрос уходит корнями в проблему связанную с пропаданием цепочек в iptables, шаманские танцы не помогают. Решил написать скрипт который будет выбирать из базы IP с включенным интернетом и с выключенным соответственно.
Возникла следующая проблема:
Статус Интернета (Включен/Выключен) хранится в accounts.int_status
IP хранится в ip_groups.ip
В SQL запросе хочется получить соответственно и то и это поле, но связки между ними найти так не смог! Бился битых 4 часа!
Может кто подскажет?
Вопрос по структуре БД UTM5
-
- Сообщения: 5
- Зарегистрирован: Пн авг 22, 2005 23:22
Вот небольшой скрипт для FreeBSD, занимается синхронизацией правил фаервола с БД, надеюсь будет полезен.
Код: Выделить всё
#!/usr/local/bin/perl -w
use DBI;
my $db_name="UTM5";
my $db_user_name="db_user";
my $db_user_pswd="*********";
my $rule_start_n=5000;
my $dbh=DBI->connect("DBI:mysql:$db_name",$db_user_name,$db_user_pswd,{ RaiseError => 1 }) or die "Can't connect: $DBI::errstr\n";
my @idList;
my $i=0;
my $sth=$dbh->prepare("select id from accounts where accounts.is_deleted=0 and accounts.int_status=1");;
$sth->execute or die "Can't execute query: ".$dbh->errstr."\n";
while ($idList[$i]=$sth->fetchrow_array){$i++};
$i--;
$temp=$i;
$sth=$dbh->prepare("select users.id, inet_ntoa( 4294967295 & ip_groups.ip) from users, ip_groups, service_links, iptraffic_service_links where ip_groups.is_deleted=0 and ip_groups.ip_group_id=iptraffic_service_links.ip_group_id and iptraffic_service_links.id=service_links.id and service_links.user_id=users.id");;
$sth->execute or die "Can't execute query: ".$dbh->errstr."\n";
while (my @ipList=$sth->fetchrow_array) {
while($i){
if ($ipList[0] eq $idList[$i]){
#system("echo $ipList[1] $ipList[0]");
system ("/sbin/ipfw add ".($rule_start_n+$ipList[0])." allow all from $ipList[1] to any");
system ("/sbin/ipfw add ".($rule_start_n+$ipList[0])." allow all from any to $ipList[1]");
}
$i--;
}
if ($ipList[0] eq $idList[$i]){
system ("/sbin/ipfw add ".($rule_start_n+$ipList[0])." allow all from $ipList[1] to any");
system ("/sbin/ipfw add ".($rule_start_n+$ipList[0])." allow all from any to $ipList[1]");
#system("echo $ipList[1] $ipList[0]");
}
$i=$temp;
}
$sth->finish;
exit 1;
FreeBSD4.9 UTM5.1.10-008
Re: Вопрос по структуре БД UTM5
SELECT a.id,a.int_status,inet_ntoa(ig.ip&0xffffffff), inet_ntoa(ig.mask&0xffffffff) from accounts a,service_links sl,iptraffic_service_links il,ip_groups ig where sl.account_id=a.id and sl.id=il.id and il.ip_group_id=ig.ip_group_id and sl.is_deleted=0 and il.is_deleted=0 and ig.is_deleted=0;OxuMorron! писал(а):Вопрос уходит корнями в проблему связанную с пропаданием цепочек в iptables, шаманские танцы не помогают. Решил написать скрипт который будет выбирать из базы IP с включенным интернетом и с выключенным соответственно.
Возникла следующая проблема:
Статус Интернета (Включен/Выключен) хранится в accounts.int_status
IP хранится в ip_groups.ip
В SQL запросе хочется получить соответственно и то и это поле, но связки между ними найти так не смог! Бился битых 4 часа!
Может кто подскажет?
При возникновении вопросов обращайтесь в техническую поддержку.
-
- Сообщения: 5
- Зарегистрирован: Пн авг 22, 2005 23:22