Привет
Надо написать скрипт. который бы отключал подключенных пользователей от сервера с mpd.
Серверу можно будет передавать такие переменые:
IP клиента, имя интерфейса между клисентом и сервером (еще %{имя пользователя} %{NAS-IP-Address} %{Client-IP-Address} %{NAS-Port} %{Framed-IP-Address})Думаю отключение будет вот таким
$x- переменая, в которой записано имя интерфейса между клиентом-сервером. в принципе это не проблема...
.....
/sbin/ifconfig $x down
....устанавливаю правила фаераНо Проблема - как закрывается подключение или как Оно разрыватся между ользователем и Сервером???
В принципе получится Я заблокирую доступ, а как отключить - не знаю.
Помогите Плиз!!!
Еще придумал - применить правилоipfw add deny from $ip to $server
sleep 1
ipfw add allow from $ip to $serverНо это как-то некоректно...
У Меня mpd+freeNibs+freeRadius+ipfw+FreeBSD6.0 в принципе этот скрипт будет вызываться имено freeNibs, но Я не знаю последствий...
Может есть какой-то особый сигнал?
Почитай 2 последние страници новостей на этом сайте...
>Еще придумал - применить правило
>
>ipfw add deny from $ip to $server
>sleep 1
>ipfw add allow from $ip to $server
>
>Но это как-то некоректно...
>
>У Меня mpd+freeNibs+freeRadius+ipfw+FreeBSD6.0 в принципе этот скрипт будет вызываться имено freeNibs, но
>Я не знаю последствий...
>Может есть какой-то особый сигнал?для FreeNIBS и MPD есть патчи,которые обеспечивают сброс пользователя при достижении порога отключения без доп. извращений и внешних программ.
У меня эта связка нормально работает. MPD 3.18 + FreeRadius 1.0.1 + FreeNIBS. коректно считает и сбрасывает пользователей при отрицательном балансе.
>для FreeNIBS и MPD есть патчи,которые обеспечивают сброс пользователя при достижении порога
>отключения без доп. извращений и внешних программ.
>У меня эта связка нормально работает. MPD 3.18 + FreeRadius 1.0.1 +
>FreeNIBS. коректно считает и сбрасывает пользователей при отрицательном балансе.Можно ли узнать линки на эти патчи?
Я лично Их не нашел...Я порылся и вот, что нашел...
В nibs.conf у Меня стоит kill_program = "${sbindir}/dialup.userkill , а не dialup.pppkill
Не пробовал менять...Во вторых как Мне обьяснили - создается pid файл, в котором прописано для даного подключения - что надо убивать, потом вызывается что-то типа такого:
kill `cat $ppp_pid_file` и всё.
Но Я лично - ничего не эксперементировал...Завтра поэксперементирую...
>Привет
>Надо написать скрипт. который бы отключал подключенных пользователей от сервера с mpd.
>
>Серверу можно будет передавать такие переменые:
>IP клиента, имя интерфейса между клисентом и сервером (еще %{имя пользователя} %{NAS-IP-Address}
>%{Client-IP-Address} %{NAS-Port} %{Framed-IP-Address})
>
>Думаю отключение будет вот таким
>
>$x- переменая, в которой записано имя интерфейса между клиентом-сервером. в принципе это
>не проблема...
>
>.....
>/sbin/ifconfig $x down
>....устанавливаю правила фаера
>
>Но Проблема - как закрывается подключение или как Оно разрыватся между ользователем
>и Сервером???
>
>В принципе получится Я заблокирую доступ, а как отключить - не знаю.
>
>Помогите Плиз!!!
подними телнет вместе с mpd и потом пиши перловый скрипт(что-то около 15 строк), который будет дропать интерфейс пользователя.
Я себе так и сделал, пока нареканий нет.
>подними телнет вместе с mpd и потом пиши перловый скрипт(что-то около 15
>строк), который будет дропать интерфейс пользователя.
>Я себе так и сделал, пока нареканий нет.Тогда уж лучше ssh.
>>подними телнет вместе с mpd и потом пиши перловый скрипт(что-то около 15
>>строк), который будет дропать интерфейс пользователя.
>>Я себе так и сделал, пока нареканий нет.
>
>Тогда уж лучше ssh.
В mpd? Научи...
>>>подними телнет вместе с mpd и потом пиши перловый скрипт(что-то около 15
>>>строк), который будет дропать интерфейс пользователя.
>>>Я себе так и сделал, пока нареканий нет.
>>
>>Тогда уж лучше ssh.
>В mpd? Научи...Я имел ввиду не тот telnet который внутри mpd.
>>>>подними телнет вместе с mpd и потом пиши перловый скрипт(что-то около 15
>>>>строк), который будет дропать интерфейс пользователя.
>Я имел ввиду не тот telnet который внутри mpd.
Я то понял...
Можешь выложить скрипт?
ЗЫ6 У Мну mpd4, 3,18 чего-то не хочет пахать...
>ЗЫ6 У Мну mpd4, 3,18 чего-то не хочет пахать...
Там насчет патчей для 3.18 говорили, а вот на mpd4-4.0b4 надо ли?Чёт этот вопрос не освещен...
И еще в freeNIBS по умолчанию стоит dialup.userkill, Я посмотрел, а там route -n и т.п. чепуха - для pppd, что бы обнаружить пид сессии и завалить, но у mpd сессия одна и kill'ом не завалиш...
Кто и как решил?
>>>>>подними телнет вместе с mpd и потом пиши перловый скрипт(что-то около 15
>>>>>строк), который будет дропать интерфейс пользователя.
>>Я имел ввиду не тот telnet который внутри mpd.
>Я то понял...
>Можешь выложить скрипт?
>ЗЫ6 У Мну mpd4, 3,18 чего-то не хочет пахать...[pppoe0:pppoe0] show layers
Name Description
---- -----------
iface System interface
ipcp IPCP: IP control protocol
ccp CCP: compression ctrl prot.
ecp ECP: encryption ctrl prot.
bund Multilink bundle
lcp LCP: link control protocol
phys Physical link layer
[pppoe0:pppoe0] help close
Usage: close [layer]http://www.opennet.me/base/dev/perl_net_telnet.txt.html
и потом в скрипте делай $mpd->print("close [layer]\n");Запускай только mpd -b -a $ip -c $port
P.S.
[pppoe0:pppoe0] show ver
MPD version: 3.18 (root@example.com 09:58 4-May-2006)
С консолькой тяжело в mpd4 :( Ну как бы её нету :)
Посоветовали не смотреть даже в сторону 3.18...
Пробовал на 3.18, не получается убить соеденение :(Нашел как убить соеденение - только 2-мя способами, и оба не хотят работать:
http://www.rostovlinux.ru/content/view/934/56/
Здесь для управления NAS'ом используется консоль mpd, поэтому запускать mpd следует с дополнительными ключами: -a MHOST -c MPORT, где MHOST и MPORT нужно заменить на прослушиваемые ip и порт соответсвенно.
Скрипт прерывания сессии:
#!/usr/local/bin/bash
MHOST=127.0.0.1 # mpd host
MPORT=5555 # mpd telnet port
IP="$3";
test -z "$IP" && exit 1
for bundle in `echo "bundle" | /usr/bin/nc $MHOST $MPORT | grep Opened | awk '{print $1}'`;
do
if echo -e "bundle $bundle\\nshow iface" | /usr/bin/nc $MHOST $MPORT | grep "${IP}$" >/dev/null 2>&1
then
echo -e "bundle $bundle\\nclose phys" | /usr/bin/nc $MHOST $MPORT >/dev/null 2>&1
fi
done;
exit 0;
2.
Этот пытался запустить локально - висит, ничего не делает...
Вот 100% рабочий скрипт:mpd_kill.pl
#!/usr/bin/perlif( $ARGV[3] eq '' ) { die 'Usage: mpddown user nasip userip nasport'; };
$linkname='pptp'; ## имя линка без номера (links.conf, mpd.conf)
$maxng=40; ## номер последнего линка. первый должен быть 0 (ноль)
$user=$ARGV[0];$nasip=$ARGV[1];
$userip=$ARGV[2];
$nasport=$ARGV[3]; if( $nasport > $maxng ) { $nasport=1; };
$nastelnetport=5005;use IO::Socket;
sub checklink;
$sock = IO::Socket::INET->new(
PeerAddr => $nasip,
PeerPort => $nastelnetport,
Proto => 'tcp') or die "Can not connect to mpd!\n$!";
$sock->autoflush(1);
while (<$sock>){ print; last; }; ## читаем ввод из сокета
while (<$sock>){ print; last; }; ## пропускаем приветствие
while (<$sock>){ print; last; }; ## всего 3 строки
printf($ARGV[0]);
$portn=$nasport;
sprintf("PORT NO %d",portn);
checklink;
if( $user eq $luser ) {
print $sock "close\n"; }
else {
$portn++;
while( ($portn != $nasport) && ($user ne $luser) ) {
if( $portn > $maxng ) { exit 0};
checklink;
if( $user eq $luser ) {
print $sock "close\n";
};
$portn++;
} ;
};
close $sock;
exit 0;sub checklink {
print $sock "link pptp",$portn,"\n"; ## выбрали линк
print $sock "show radius\n"; ## запросили инфу о линке
while (<$sock>){ ## обрабатываем в цикле ввод
print;
@words=split(' ');
$luser=$words[2];
last if( $words[0] eq 'Authname' ); ## ищем строку с именем пользователя
};
};
, а в файле nibs.conf должна быть след. строчка:kill_program = "${sbindir}/mpd_kill.pl %{User-Name} %{NAS-IP-Address} %{Client-IP-Address} %{NAS-Port}
Для работы второгой скрипта (mpd_kill.pl) необходимо добавить следующее в rc.conf:mpd_flags="--console-address 127.0.0.1 --background --console-port 5005"
have fun (: