
ОС FreeBSD
Поделитесь пожалуйсто

loki_ писал(а):На маршрутизаторе (в него воткнуты сети) перед билингом хочется поставить скприпт который бы конектился к Мускул, делал выборку по балансу (к примеру -1 уе) и применял правило фаервола
ОС FreeBSD
Поделитесь пожалуйсто
Код: Выделить всё
#!/usr/bin/perl -w
## В самих настройках ipfw есть что-то типа таких правил
## .......
## ipfw add 200 deny ip from table(10) to any
## ipfw add 200 deny ip from any to table(10)
## .......
## ...... разрешаем локалку, читаем ман по УТМ ....
## ipfw add 15000 deny ip from any to any
## ipfw add 65534 allow ip from any to any
use DBI;
$sqlfirst="dbi:mysql:dbname=UTM5;host=some.utm5.host";
$sqllogin="admin";
$sqlpassw="admin";
$minsum= -30;
$tempfile = "/tmp/billingdata.dat";
open(TEMP, ">$tempfile");
$dbh=DBI->connect($sqlfirst,$sqllogin,$sqlpassw);
$sql = "
SELECT DISTINCT
CONCAT((ip_groups.ip>>24)\&0xFF,'.',(ip_groups.ip>>16)\&0xFF,'.',(ip_groups.ip>>8)\&0xFF,'.',ip_groups.ip\&0xFF) AS myip,
accounts.balance AS myballance
FROM users
LEFT JOIN users_accounts ON users_accounts.uid=users.id AND users_accounts.is_deleted=users.is_deleted
LEFT JOIN accounts ON accounts.id=users_accounts.account_id AND accounts.is_deleted=users.is_deleted
LEFT JOIN account_tariff_link ON account_tariff_link.account_id=users_accounts.account_id AND account_tariff_link.is_deleted=users.is_deleted
LEFT JOIN service_links ON service_links.account_id=users_accounts.account_id AND service_links.is_deleted=users.is_deleted
LEFT JOIN services_data ON services_data.id=service_links.service_id AND services_data.is_deleted=users.is_deleted
LEFT JOIN iptraffic_service_links ON iptraffic_service_links.id=service_links.id AND iptraffic_service_links.is_deleted=users.is_deleted
LEFT JOIN ip_groups ON ip_groups.ip_group_id=iptraffic_service_links.ip_group_id AND ip_groups.is_deleted=users.is_deleted
WHERE
users.is_deleted=0
AND
services_data.service_type=3
AND
accounts.balance<".$minsum;
## Тут услвие можно сменить... типа accounts.ballance < (-1)*accounts.credit
($sth=$dbh->prepare($sql)) or die($DBI::errstr);
($sth->execute) or die($DBI::errstr);
# Очищаем бан-таблицу
system("/sbin/ipfw table 10 flush");
# Заносим новых зверей
while(($ip, $cash)=$sth->fetchrow) {
# Этт для лога дл себя в файло пишем
print TEMP "$ip;$cash;".time."\n";
# А здесь добавляем должника
system("/sbin/ipfw table 10 add $ip");
}
close(TEMP);
$dbh->disconnect;