Перейти до

Автономная блокировка юзеров от ресурсов


Рекомендованные сообщения

Значит так ситуация такая :

Server 1 раздаёт пользователям инет база юзеров хранится в MySQL

на этом же сервере.

Server 2 на нём стоит фтп.

 

Задача:

Нужно парсить пользователей у которых баланс скажем -20 грн. дампил базу нехороших юзеров на server 2 и блочил пользователей по портам фаерволом.

 

Наверняка кто-то что-то подобное уже делал у себя в сети.

 

Сервера на Linux

Думаю можно росматривать любые варианты многим это будет полезно.

Ссылка на сообщение
Поделиться на других сайтах

Стоит что-то подобное.

юзеры - шлюз1 - шлюз2(биллинг) - инет.

 

Со шлюза №2 каждые 11 минут шлется файл с привязкой мак адресов )

На шлюзе №1 каждые 15 минут эта привязка обновляется )

 

#!/usrl/bin/perl

use DBD::mysql;
use DBI();
use Time::Local;
use Socket;
$debug = 0;

foreach $i ('192.168.0', '192.168.1', '192.168.2', '192.168.3', '192.168.4' )
{
foreach $k (0..255)
{
 undef @mama;
 @mama[0] = lc sprintf ('%X', 250);;
 foreach $o (0..5) { srand; $n = lc sprintf ('%X', int(rand 255)); @mama[$o] = $n; }
 $arps{"$i.$k"} = "@mama[0]:@mama[1]:@mama[2]:@mama[3]:@mama[4]:@mama[5]";
}
}

# Инициализация переменных UTM
open (CONFIG, "/usr/local/netup/utm5/etc/utm5.cfg");
@config = <CONFIG>;
close (CONFIG);
foreach $line (@config) {
 if ($line =~ m/^([^#].+?)=(.*)$/) {
   $$1 = $2;
 };
};

# Подключение к БД
if ($database_type eq "mysql") {
$DBI_data="DBI:$database_type:database=$database;host=$database_host;mysql_socket=$database_sock_path;";
} elsif ($database_type eq "postgres") {
$DBI_data="DBI:$database_type:dbname=$database";
} else {
print "Unknown database $database_type! Stopped. \n";
exit (1);
};
$dbh = DBI->connect("$DBI_data","$database_login","$database_password",{'RaiseError' => 1});

$query = "select u.login from users u, users_accounts ua, accounts a
where u.id = ua.uid and ua.account_id = a.id and a.is_blocked = 0 and
u.is_deleted = 0 and a.is_deleted = 0 and ua.is_deleted = 0;";
$sth = $dbh->prepare($query);
$rv = $sth->execute();
while ($ref = $sth->fetchrow_hashref())
{
 $on{$ref->{'login'}} = 1;
}
$sth->finish();

$query = "select u.login login, inet_ntoa(ip.ip&0xffffffff) ip, ip.mac mac
from ip_groups ip, service_links sl, iptraffic_service_links isl, users u
where ip.ip_group_id = isl.ip_group_id and isl.id = sl.id and sl.user_id = u.id and
sl.is_deleted = 0 and isl.is_deleted = 0 and ip.is_deleted = 0 and u.is_deleted = 0 and
u.login in ( select u.login from users u, users_groups_link ug where
u.id = ug.user_id and ug.group_id = 1001 and u.is_deleted = 0 );";
$sth = $dbh->prepare($query);
$rv = $sth->execute();
while ($ref = $sth->fetchrow_hashref())
{
if($on{$ref->{'login'}} > 0)
{
 $arps{$ref->{'ip'}} = $ref->{'mac'};
}
}
$sth->finish();

# Disconnect from the database.
$dbh->disconnect();

open ARP, '< /usr/local/system/etc/arp.table';
while($line = <ARP>)
{
       #ip mac name
       chomp $line;
       next if ($line =~ /^[\s\t\#]+/);
       ($line) = (split /\#/, $line, 2)[0];
       ($a, $ = split (/[\s\t]+/, $line) or next;
       $arps{$a} = $b;
}
close ARP;

$empty = '';
$file = '';
$tmp_dir = '/tmp';
$file_name = "$$.$$.file";
$empty_name = "$$.$$.empty";

foreach $ip (sort keys %arps)
{
       next if ($arps{$ip} =~ /no/i);
       if ($arps{$ip} ne '')
       {
               $file .= "$ip $arps{$ip} pub\n";
       }
}

open TEMP, "> $tmp_dir/$file_name";
print TEMP $file;
close TEMP;

chdir $tmp_dir;

`echo put $file_name ethers | /usr/bin/ftp ftp://[b]юзер:пасс\@1.1.1.1(шлюз1)[/b]/`;

unlink "$tmp_dir/$file_name";

 

Думаю, переделать под себя будет нетрудно )

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...