forum.bitel.ru
http://forum.bitel.ru/

Проверка по MAC: Linux+BGRadius+PPPoE. Решение
http://forum.bitel.ru/viewtopic.php?f=5&t=65
Страница 1 из 1

Автор:  Shturman [ 26 янв 2007, 15:05 ]
Заголовок сообщения:  Проверка по MAC: Linux+BGRadius+PPPoE. Решение

Мне наконец удалось решить проблему того, как все это организовать.

Все кто юзает Linux стоит попробывать. Одно условие: все компоненты Linux. С цисками не пробовал. Пока.

Если интересно, расскажу. На мой взгляд, решает более чем на половину проблемы кражи паролей. Если не полностью!
Тестирую уже второй месяц.

Дело в том, что МАС вытягиваю из логов PPPoE сервера, то есть подделав МАС работать ничего не будет. Поправте меня, если не прав

Первый МАС пользователя метится как допустимый и хранится в MySQL базе. Все остальные МАС (Они тоже заносятся в базу) необходимо разрешать операторам абонентского отдела.

Автор:  ЛИС [ 27 янв 2007, 17:45 ]
Заголовок сообщения: 

Ну, интересно. Как?

Автор:  Shturman [ 30 янв 2007, 11:06 ]
Заголовок сообщения: 

Все просто на самом деле:
1. При аторизации на исполнение уходит скрипт auth-up, он вызывает другой сценарий.
2. Листинг другого сценария:
Код:
#!/usr/bin/perl
use strict;
use Mysql;

my $log_path = "/var/log/messages";

sub GetLog {
    my @lines;
    open (TXTFILE, $_[0]);
    @lines = <TXTFILE>;
    close(TXTFILE);
    return @lines;   
};

my $q = "created";

my @result = grep /\s$q\s/, GetLog ($log_path);
my ($line, $mac_adr) = "";

foreach $line (@result) {
    if ($line =~ /\w+\s+(\w+:\w+:\w+:\w+:\w+:\w+)\s+/) {
   $mac_adr=$1;
    };
};

my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime (time);
my $date = 1900+$year."-".(1+$mon)."-".$mday;
my $login = $ARGV[0];
my $If =  $ARGV[1];
my $MAC_DB = Mysql->Connect("localhost","MAC_base");

my $Res = $MAC_DB->Query("SELECT * FROM center WHERE  login = \"$login\"") or die $Mysql::db_errstr;
my $Count = $Res->rows;
my @Rows;

if ($Count==0) {
    $MAC_DB->Query("INSERT INTO center ( login, mac, date1, accept) VALUES(\"$login\" , \"$mac_adr\", \"$date\", 1)") or die $Mysql::db_errstr;
} else {
    $Res = $MAC_DB->Query("SELECT * FROM center WHERE  login = \"$login\" AND mac = \"$mac_adr\" AND accept = 1") or die $Mysql::db_errstr;
    $Count = $Res->rows;
    if ($Count == 0) {
        $Res = $MAC_DB->Query("SELECT * FROM center WHERE  login = \"$login\" AND mac = \"$mac_adr\" AND accept = 0") or die $Mysql::db_errstr;
   $Count = $Res->rows;
   if ($Count==0) {
       $MAC_DB->Query("INSERT INTO center ( login, mac, date1, accept) VALUES(\"$login\" , \"$mac_adr\", \"$date\", 0)") or die $Mysql::db_errstr;
   };
   system ("/sbin/ifconfig $If down");   
   print "User $login with MAC $mac_adr at $date is disconnected\n";
    };
};


exit;


Лог messages пополняется следующими сообщениями типа:
Код:
Jan 30 09:51:34 gateway pppoe-server[1089]: Session 10 created for client 00:15:f2:3b:5b:30 (10.67.15.10) on eth0 using Service-Name ''

На доли секунды в которые все просиходит, запись о старте сессии является последним сообщением PPPoE сервера

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/