Jump to content

Recommended Posts

Posted

Вообщем на данном этапе я отказался в скрипте от удаления правил в фаерволе (муторное это дело), хотя работало. Сделал что бы скритп по достижению минусового баланса у пользователей добавлял коментарий # перед строчкий для этого пользователя в файл mpd.secret . Вроде бы всё нормально работает , но единственный косяк! Сессия ВПН у пользователя не обрывается пока он сам не отключится. Когда он уже отключился с минусовым баллансом то потом уже не может соответственно подключиться так как строка заремарена. Собстенно говоря ВОПРОС как обрубать ВПН сессии??? mpd 3.18

Posted
Собстенно говоря ВОПРОС как обрубать ВПН сессии??? mpd 3.18

#!/bin/bash

USER_IP="$1"

PID_DIR=/var/run

 

test -z "$USER_IP" && exit 1

IF=`/sbin/ifconfig | grep -B 1 "${USER_IP} " | head -n1 | awk {'print $1'}`;

PID=`cat ${PID_DIR}/${IF}.pid 2>/dev/nul`;

test -z "${PID}" && exit 1

kill -INT ${PID};

exit 0;

Posted

Собстенно говоря ВОПРОС как обрубать ВПН сессии??? mpd 3.18

#!/bin/bash

USER_IP="$1"

PID_DIR=/var/run

 

test -z "$USER_IP" && exit 1

IF=`/sbin/ifconfig | grep -B 1 "${USER_IP} " | head -n1 | awk {'print $1'}`;

PID=`cat ${PID_DIR}/${IF}.pid 2>/dev/nul`;

test -z "${PID}" && exit 1

kill -INT ${PID};

exit 0;

Блин... У mpd нет процесса на каждое соединение, у него 1 процесс и куча интерфейсов, так что там такой фокус не получится... Смотри в сторону -с :)

Posted
Сделал что бы скритп по достижению минусового баланса у пользователей добавлял коментарий # перед строчкий для этого пользователя в файл mpd.secret . Вроде бы всё нормально работает .....
махровейшая пионерия. юзай лучше фаервол при таком раскладе: сделал две таблицы - в одной всем коннекты разрешены, в другой всем запрещены и при необходимости перекидываешь из таблицы в таблицу и все.

ipfw table 1 add xxx.xxx.xxx.xxx
ipfw table 2 add yyy.yyy.yyy.yyy

ipfw add allow all from "table(1)" to any
ipfw add allow all from any to "table(1)"

ipfw add deny all from "table(2)" to any
ipfw add deny all from any to "table(2)"

#включение юзверя при поступлении бабла
ipfw table 2 del yyy.yyy.yyy.yyy
ipfw table 1 add yyy.yyy.yyy.yyy

#выключение юзверя при минусовом балансе
ipfw table 1 del xxx.xxx.xxx.xxx
ipfw table 2 add xxx.xxx.xxx.xxx

в последних патчах МПД проскакивало управление сессией из радиуса, но это не для анклбоба - у него МПД из мдп.секрет авторизует, а не как у нормальных людей - из радиуса.

Posted

Да. Из радиуса патчем рвалось: аттрибут Drop-User := 1, небрежно брошенный радиусом во время Accounting-Update приводил к краху сессии со стороны mpd, да причем так, что у виндового пользователя окошко с "Удалённый компьютер неожиданно завершил соединение. Попробовать подключиться заново?" не выскакивало. Просто завершалось и всё. Максимально корректно и в рамках протокола. А окошко это появляется, как понимаю только у тех, кто юзает pppd и сессию бьёт посредством kill -p ${USER_PPP_PID}.

 

Вот так запущу я сессию дома, свалю на работу (или в отпуск на пару недель), а пров из логов потом ежеминутные редиалы по впн будет выгребать :)

Posted
Вот так запущу я сессию дома, свалю на работу (или в отпуск на пару недель), а пров из логов потом ежеминутные редиалы по впн будет выгребать :)
по дефолту в ХР три редиала, выгребать особо нечего. а если кастомно что-то юзер замутит - так от этого никто не застрахован. например какой-нить брутфорсер запустить и в отпуск на пару недель :)

 

через пару недель приезжаешь - либо от сети отключен, либо база логинов/паролей на харде (либо был пожар/потоп и компу трендец, либо хату вскрыли и вынесли все, в т.ч. и комп :) )

Posted
Вот так запущу я сессию дома, свалю на работу (или в отпуск на пару недель), а пров из логов потом ежеминутные редиалы по впн будет выгребать :)

kill -TERM <PID>

для pptpd завершает соединение штатно "в рамках протокола"... что совершенно не мешает сделать редиал не ограниченное количество раз. ну и про выгребание логов это ересь какая-то....

Posted
kill -TERM <PID>

для pptpd завершает соединение штатно "в рамках протокола"... что совершенно не мешает сделать редиал не ограниченное количество раз. ну и про выгребание логов это ересь какая-то....

Ну, не знаю, как у Вас там в штатном завершении - у меня винда редиалов (автоматических) не делала. Вручную - да, сколько угодно. И про логи - то, конечно, круто, не вести логи, оно куда как спокойней по случаю юзверю ответить "Ничего не знаем, что случилось не в курсе, как побороть еще не придумали".
Posted
Сколько всего интересного :)

буду пробовать! а в 4 mpd не решенно это случайно?

решено

на форуме NetUP вроде видел. Там еще весной с этим бились

Posted

а можно ссылочку на форум нетапа? я на сайте не нашёл!

по поводу абилса ничего не понял. Мне нужно что бы просто командой какой нить определённый интерфейс с опред ИП адресом падал

Posted
а можно ссылочку на форум нетапа? я на сайте не нашёл!

по поводу абилса ничего не понял. Мне нужно что бы просто командой какой нить определённый интерфейс с опред ИП адресом падал

 

кусок кода

 

#####################################################################

# MPD functions

#*******************************************************************

# HANGUP MPD

# hangup_mpd($SERVER, $PORT)

#*******************************************************************

sub hangup_mpd {

my ($NAS_IP, $PORT) = @_;

 

my $ctl_port = "pptp$PORT";

my @commands=("\]\tlink $ctl_port",

"\]\tlink $ctl_port",

"\]\tclose",

"\]\texit");

 

my $result = telnet_cmd("$NAS->{NAS_MNG_IP_PORT}", \@commands);

print $result;

return 0;

}

 

 

#*******************************************************************

#

# telnet_cmd($hostname, $login, $password, $commands)

#*******************************************************************

sub telnet_cmd {

my($hostname, $commands, $attr)=@_;

my $port = 23;

 

 

if ($hostname =~ /:/) {

($hostname, $port)=split(/:/, $hostname, 2);

}

 

 

# my $debug = (defined($attr->{debug})) ? 1 : 0;

my $timeout = defined($attr->{'TimeOut'}) ? $attr->{'TimeOut'} : 5;

 

 

 

use Socket;

my $dest = sockaddr_in($port, inet_aton("$hostname"));

 

if(! socket(SH, PF_INET, SOCK_STREAM, getprotobyname('tcp'))) {

print "ERR: Can't init '$hostname:$port' $!";

return 0;

}

 

 

 

if(! CORE::connect(SH, $dest) ) {

print "ERR: Can't connect to '$hostname:$port' $!";

return 0;

}

 

log_print('LOG_DEBUG', "Connected to $hostname:$port");

 

my $sock = \*SH;

my $MAXBUF= 512;

my $input = '';

my $len = 0;

my $text = '';

my $inbuf = '';

my $res = '';

 

 

my $old_fh = select($SH); $| = 1; select($old_fh);

 

SH->autoflush(1);

 

 

 

foreach my $line (@$commands) {

 

my ($waitfor, $sendtext)=split(/\t/, $line, 2);

 

$input = '';

 

if ($waitfor eq '-') {

send($sock, "$sendtext\r\n", 0, $dest) or die log_print('LOG_INFO', "Can't send: '$text' $!");

}

 

do {

recv($sock, $inbuf, $MAXBUF, 0);

$input .= $inbuf;

$len = length($inbuf);

alarm 5;

} while ($len >= $MAXBUF || $len < 4);

 

 

 

log_print('LOG_DEBUG', "Get: \"$input\"\nLength: $len");

log_print('LOG_DEBUG', " Wait for: '$waitfor'");

 

if ($input =~ /$waitfor/ig){ # || $waitfor eq '') {

$text = $sendtext;

log_print('LOG_DEBUG', "Send: $text");

send($sock, "$text\r\n", 0, $dest) or die log_print('LOG_INFO', "Can't send: '$text' $!");

#"Can't send: $!\n";

};

 

$res .= "$input\n";

 

#print "<pre>$res</pre>";

 

}

 

 

#print "<pre>$res</pre>";

close(SH);

return $res;

 

}

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.