anclbob Posted December 30, 2006 Posted December 30, 2006 Вообщем на данном этапе я отказался в скрипте от удаления правил в фаерволе (муторное это дело), хотя работало. Сделал что бы скритп по достижению минусового баланса у пользователей добавлял коментарий # перед строчкий для этого пользователя в файл mpd.secret . Вроде бы всё нормально работает , но единственный косяк! Сессия ВПН у пользователя не обрывается пока он сам не отключится. Когда он уже отключился с минусовым баллансом то потом уже не может соответственно подключиться так как строка заремарена. Собстенно говоря ВОПРОС как обрубать ВПН сессии??? mpd 3.18 Вставить ник Quote
EvilShadow Posted December 30, 2006 Posted December 30, 2006 Убивайте соотв. процесс ppp демона. Вставить ник Quote
EvilShadow Posted December 31, 2006 Posted December 31, 2006 пользуйте радиус Радиус не убивает сессии, это дело NAS'а Вставить ник Quote
v-m-k Posted December 31, 2006 Posted December 31, 2006 По консольному порту обрубай нужный порт, посмотри на opennet.ru это было реализовано... Вставить ник Quote
rsst Posted December 31, 2006 Posted December 31, 2006 Собстенно говоря ВОПРОС как обрубать ВПН сессии??? 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; Вставить ник Quote
v-m-k Posted December 31, 2006 Posted December 31, 2006 Собстенно говоря ВОПРОС как обрубать ВПН сессии??? 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 процесс и куча интерфейсов, так что там такой фокус не получится... Смотри в сторону -с :) Вставить ник Quote
balamutang Posted December 31, 2006 Posted December 31, 2006 Сделал что бы скритп по достижению минусового баланса у пользователей добавлял коментарий # перед строчкий для этого пользователя в файл 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 в последних патчах МПД проскакивало управление сессией из радиуса, но это не для анклбоба - у него МПД из мдп.секрет авторизует, а не как у нормальных людей - из радиуса. Вставить ник Quote
GateKeeper Posted January 3, 2007 Posted January 3, 2007 Да. Из радиуса патчем рвалось: аттрибут Drop-User := 1, небрежно брошенный радиусом во время Accounting-Update приводил к краху сессии со стороны mpd, да причем так, что у виндового пользователя окошко с "Удалённый компьютер неожиданно завершил соединение. Попробовать подключиться заново?" не выскакивало. Просто завершалось и всё. Максимально корректно и в рамках протокола. А окошко это появляется, как понимаю только у тех, кто юзает pppd и сессию бьёт посредством kill -p ${USER_PPP_PID}. Вот так запущу я сессию дома, свалю на работу (или в отпуск на пару недель), а пров из логов потом ежеминутные редиалы по впн будет выгребать :) Вставить ник Quote
balamutang Posted January 3, 2007 Posted January 3, 2007 Вот так запущу я сессию дома, свалю на работу (или в отпуск на пару недель), а пров из логов потом ежеминутные редиалы по впн будет выгребать :)по дефолту в ХР три редиала, выгребать особо нечего. а если кастомно что-то юзер замутит - так от этого никто не застрахован. например какой-нить брутфорсер запустить и в отпуск на пару недель :) через пару недель приезжаешь - либо от сети отключен, либо база логинов/паролей на харде (либо был пожар/потоп и компу трендец, либо хату вскрыли и вынесли все, в т.ч. и комп :) ) Вставить ник Quote
desperado Posted January 3, 2007 Posted January 3, 2007 Вот так запущу я сессию дома, свалю на работу (или в отпуск на пару недель), а пров из логов потом ежеминутные редиалы по впн будет выгребать :) kill -TERM <PID> для pptpd завершает соединение штатно "в рамках протокола"... что совершенно не мешает сделать редиал не ограниченное количество раз. ну и про выгребание логов это ересь какая-то.... Вставить ник Quote
omi4 Posted January 4, 2007 Posted January 4, 2007 http://www.lanbilling.ru/doc/1.8/drop_sessions.html Вставить ник Quote
anclbob Posted January 4, 2007 Author Posted January 4, 2007 Сколько всего интересного :) буду пробовать! а в 4 mpd не решенно это случайно? Вставить ник Quote
GateKeeper Posted January 4, 2007 Posted January 4, 2007 kill -TERM <PID>для pptpd завершает соединение штатно "в рамках протокола"... что совершенно не мешает сделать редиал не ограниченное количество раз. ну и про выгребание логов это ересь какая-то.... Ну, не знаю, как у Вас там в штатном завершении - у меня винда редиалов (автоматических) не делала. Вручную - да, сколько угодно. И про логи - то, конечно, круто, не вести логи, оно куда как спокойней по случаю юзверю ответить "Ничего не знаем, что случилось не в курсе, как побороть еще не придумали". Вставить ник Quote
omi4 Posted January 4, 2007 Posted January 4, 2007 Сколько всего интересного :)буду пробовать! а в 4 mpd не решенно это случайно? решено на форуме NetUP вроде видел. Там еще весной с этим бились Вставить ник Quote
~AsmodeuS~ Posted January 4, 2007 Posted January 4, 2007 http://abills.sf.net уже в пакете обрубалка для MPD Вставить ник Quote
anclbob Posted January 4, 2007 Author Posted January 4, 2007 а можно ссылочку на форум нетапа? я на сайте не нашёл! по поводу абилса ничего не понял. Мне нужно что бы просто командой какой нить определённый интерфейс с опред ИП адресом падал Вставить ник Quote
~AsmodeuS~ Posted January 5, 2007 Posted January 5, 2007 а можно ссылочку на форум нетапа? я на сайте не нашёл! по поводу абилса ничего не понял. Мне нужно что бы просто командой какой нить определённый интерфейс с опред ИП адресом падал кусок кода ##################################################################### # 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; } Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.