UTM 5+dlink 3526+ACL

Технические вопросы по UTM 5.0
Ответить
meskalinus
Сообщения: 8
Зарегистрирован: Ср фев 20, 2008 11:55

UTM 5+dlink 3526+ACL

Сообщение meskalinus »

день добрый господа!

Появилась задача - привинтить к UTM скрипт, который будет рулить ACL'ями на свичах access layer'a - Dlink 3526/3550. Поиск по форуму дал пару ссылок вроде viewtopic.php?t=2810&postdays=0&postorder=asc&start=45 и viewtopic.php?t=4452&highlight= , и информацию о наработках, которые умеют дергать acl на порту абонента в зависимости от его баланса. Господа, если не затруднит - поделитесь пожалуйста наработками в данной области - взамен могу поделиться своими (например, самописный dynashape).

почта: _mike (сабака) mail.ru

Pulse
Сообщения: 945
Зарегистрирован: Вт окт 03, 2006 12:58

Сообщение Pulse »

мне лень закончить свой :) но всётки придётся, ибо, насколько я понимаю, в соответствии с законом о связи, доступ к балансу должен быть даже у блокированого абонента, поэтому просто выключить порт недостаточно....

bob
Сообщения: 20
Зарегистрирован: Сб дек 01, 2007 09:06

Сообщение bob »

У меня работает так-
1 на отдельной машине поднимаешь web интерфейс например с адресом 1.1.1.1 при этом биллинг стоит на машине 1.1.0.1
2 сушествует своя сеть управления например 1.2.0.1 по которой ходит обмен между серверами и к ней подключены 3526 по VLAN
На web сервере создаем пвпку /netup внее перемещаем web.config в котором прописан адрес машины биллинга в сети управления соответственно этот обмен закрыт от пользователей. На билинге ставим скипт который рассылает на все 3526 мас/port/binding для пользователей подключенных к сети не зависимо есть ли у него долг. Это позволяет не пустить в сеть "чужих" при этом настраиваем чтобы биндинг не использовал ACL. второй скрипт рассылает правила АСL . Первое правило указывает что всем разрешен доступ на 1.1.1.1 обеспечивая доступ к статистике не зависимо от блокировок. Последующие правила указывают deny для пользователей имеющих долги. Поскольку их меньше чем всего пользователей то количество аццес листов не превышает максимального допустимого для 3526. По крону данный скрипт запускается каждый час таким образом задолжник через час будет выкинут из сети. Последнее правило разрешает прохождение пакетов для всех. Так у меня достигается возможность должника иметь доступ к статистике и блокирует его доступ ко всем ресурсам сети. Может у кого-то построено по другому было бы интересно услышать. Р.С в сети управления все летает по telnet.

Pei0t
Сообщения: 258
Зарегистрирован: Чт дек 13, 2007 20:48

Сообщение Pei0t »

bob писал(а):На билинге ставим скипт который рассылает на все 3526 мас/port/binding для пользователей подключенных к сети не зависимо есть ли у него долг. Это позволяет не пустить в сеть "чужих" при этом настраиваем чтобы биндинг не использовал ACL.
1. Web сервер - имеется ввиду доступ пользователей к статистике? Зачем выносить отдельно?
2. Можете поделиться наработками?

meskalinus
Сообщения: 8
Зарегистрирован: Ср фев 20, 2008 11:55

Сообщение meskalinus »

кому интересно - промежуточное решение
1) воздаем руками на всех свичах:

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

create access_profile ip source_ip_mask 255.255.255.255 profile_id 10 
create access_profile ip destination_ip_mask 255.255.255.255 profile_id 20
create access_profile ip source_ip_mask 0.0.0.0 profile_id 30
Сам скрипт (пущаем по крону раз в н минут):

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

#!/usr/bin/perl -w 
use Net::Telnet; 
#use strict; 
use DBI; 

#Podkluchaemsia k base dannix 

my $dsn = 'DBI:mysql:UTM5:127.0.0.1'; 
my $db_user_name = 'root'; 
my $db_password = 'hui'; 
my $bill = '172.16.0.1'; # allowed only tish host when user is blocked

my ($id, $password); 
my $dbh = DBI->connect($dsn, $db_user_name, $db_password); 

#
# --nmancer:
#
# select all abonents
#
my $sth = $dbh->prepare(qq{ 
        SELECT 
                INET_NTOA(ip & 4294967295) as i, 
                inet_ntoa(4294967295 & r.router_bin_ip) AS rip, 
                u.port_number, 
                r.login, 
                r.password ,
#               acc.is_blocked
                acc.int_status
        FROM 
                ip_groups, 
                users as u, 
                routers_info as r, 
                account_tariff_link as atlink, 
                iptraffic_service_links, 
                service_links, 
                accounts as acc 
        WHERE 
                ip_groups.is_deleted=0 
                and u.is_deleted=0
                and atlink.is_deleted=0
                and r.id = u.remote_switch_id 
                and atlink.account_id = acc.id 
                and u.basic_account = acc.id 
                and iptraffic_service_links.ip_group_id=ip_groups.ip_group_id 
                and service_links.id=iptraffic_service_links.id 
                and acc.id=service_links.account_id 
        ORDER BY 
                router_bin_ip
                });
$sth->execute(); 

while (my ($ip, $router_bin_ip, $port_number, $login, $password, $int_status) = $sth->fetchrow_array()) 
{ 

        my $exec = 
        $t = new Net::Telnet (Timeout => 5, 
                      Prompt => '/#/', 
                      Host => $router_bin_ip ); 
        $t->login($login, $password); 

if ($int_status==1) {
        print "Set network status ON  for IP: $ip | Router: $router_bin_ip port: $port_number\n"; 
        @lines = $t->cmd("config access_profile profile_id 10 add access_id $port_number ip source_ip $ip port $port_number permit"); 
                    }
 else
                    {
        print "Set network status OFF for IP: $ip | Router: $router_bin_ip port: $port_number\n"; 
        @lines = $t->cmd("config access_profile profile_id 10 delete access_id $port_number");
                    }


        @lines = $t->cmd("config access_profile profile_id 20 add access_id $port_number ip destination_ip $bill port $port_number permit"); 
        @lines = $t->cmd("config access_profile profile_id 30 add access_id $port_number ip source_ip 0.0.0.0 port $port_number deny"); 
} 
#        print "Saving configuration, please wait...\n"; 
#        @lines = $t->cmd("save"); 
        @lines = $t->cmd("logout"); 
        print "Configuration sucssessfull added and logout.\n"; 
$sth->finish(); 

#Otkluchaemsia ot basi dannih 
$dbh->disconnect(); 
Идея простая до безобразия - в разблокированном состоянии - разрешаем все, в заблокированном - только траффик на биллинг для мониторинга баланса. В данном примере один нехороший момент - в заблокированном состоянии пользователь может прописать себе любой ip.

Да, разрешен только 1 mac на интерфейсе. (1 порт=1 пользователь=1 мак)

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

config port_security ports 1-24 admin_state enable max_learning_addr 1 lock_address_mode DeleteOnReset
[/quote]

bob
Сообщения: 20
Зарегистрирован: Сб дек 01, 2007 09:06

Сообщение bob »

Все правильно но насколько я понял вы всем "разрешенным" прописываете разрешение permit. У 3526 по всем портам максимальное количество записей =800. Это и будет ограничением пользователей на коммутаторе.

bob
Сообщения: 20
Зарегистрирован: Сб дек 01, 2007 09:06

Сообщение bob »

Pei0t писал(а):
bob писал(а):На билинге ставим скипт который рассылает на все 3526 мас/port/binding для пользователей подключенных к сети не зависимо есть ли у него долг. Это позволяет не пустить в сеть "чужих" при этом настраиваем чтобы биндинг не использовал ACL.
1. Web сервер - имеется ввиду доступ пользователей к статистике? Зачем выносить отдельно?
2. Можете поделиться наработками?
web вынесен отдельно чтобы заблокированные не могли даже пропинговать биллинг. У меня второй скрипт пости такой же он был на форуме. А первый подработан на его основе для рассылки ip/mac/binding.

Pei0t
Сообщения: 258
Зарегистрирован: Чт дек 13, 2007 20:48

Сообщение Pei0t »

bob писал(а): web вынесен отдельно чтобы заблокированные не могли даже пропинговать биллинг. У меня второй скрипт пости такой же он был на форуме. А первый подработан на его основе для рассылки ip/mac/binding.
Хотелось бы тоже самое, ограничить доступ на порту по ip+mac (я так полагаю у вас с базы скриптом по крону добавляется ip:mac binding?) и включать ACL при отрицательном балансе. Не могли бы скинуть? mikhajjlovskijj//gmail//com

hammer
Сообщения: 286
Зарегистрирован: Сб янв 20, 2007 22:58
Контактная информация:

Сообщение hammer »

На месте разработчиков биллинга, глядя на такую популярность работы не только CIsco но и простого оборудования D-LINK со своим биллингом (данная тема уже не один раз поднималась на этом форуме), уже сделали бы хоть какую нить надстройку на биллингом для максимально удобной работы с данным оборудованием.

A!eX-gRey
Сообщения: 82
Зарегистрирован: Вт май 17, 2005 18:52

Сообщение A!eX-gRey »

hammer писал(а):На месте разработчиков биллинга, глядя на такую популярность работы не только CIsco но и простого оборудования D-LINK со своим биллингом (данная тема уже не один раз поднималась на этом форуме), уже сделали бы хоть какую нить надстройку на биллингом для максимально удобной работы с данным оборудованием.
например: правила фаирвала и на заклатке "доплнительно" параметры "удаленный коммутатор" и "порт"..

что касается функционала такого рода, ИМХО его придостаточно
просто надо прикладывать голову или деньги

m1c
Сообщения: 39
Зарегистрирован: Чт авг 22, 2013 16:24

Сообщение m1c »

Здраствуйте, также интересен этот вопрос. Ниже я так понимаю скрипт логинится на коммутатор:
$t = new Net::Telnet (Timeout => 5,
Prompt => '/#/',
Host => $router_bin_ip );
$t->login($login, $password);
Но откуда он берет логин/пароль к коммутатору? Где они должны храниться не совсем понятно, также как и ip адрес и порт? Это все указывается в UTM Admin в информации о пользователе? С перлом никогда не работал :oops:

Ответить