Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako diskonektovati usera iz freeradiusa?

[es] :: Wireless :: Mikrotik :: Kako diskonektovati usera iz freeradiusa?

[ Pregleda: 2478 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mpx

Član broj: 97043
Poruke: 38
*.exe-net.net.



+1 Profil

icon Kako diskonektovati usera iz freeradiusa?07.11.2007. u 22:24 - pre 200 meseci
Pozdrav,

Podigao sam freeradius server, malo prilagodio dialup admin mikrotiku, i ta kombinacija radi prilicno dobro.... ali, problem se javlja kada recimo mikrotik koji je udaljen od radius-a ostane bez struje, kada se taj mikrotik vrati u funkciju, onda svim korisnicima koji su prethodno bili ulogovani javlja da im je username i password vec aktivan. Tacnije, problem je u tome sto radius nije dobio informaciju o tome da su ti korisnici bili diskonektovani.
E sad, da li je moguce konfigurisati freeradius da recimo sa vremena na vreme proveri status konekcija, ili... da li postoji komanda za diskonektovanje online usera da bi se mogli rucno izbaciti.
I jos nesto.. cak i kad se restartuje racunar sa radiusom, i dalje baza sa prethodno ulogovanim korisnicima ostaje nepromenjena, tj ni to ne pomaze.

Nadam se da ste me razumeli,
Da li neko moze da mi pomogne??

Hvala
 
Odgovor na temu

simor
Simo Radjenovic
Wirecard AG
München

Član broj: 19175
Poruke: 366
*.dynamic.sbb.co.yu.



Profil

icon Re: Kako diskonektovati usera iz freeradiusa?17.03.2008. u 15:47 - pre 196 meseci
Pretpostavljam da mislis na tzv "visece sesije", gde ti je u radacct tabeli za nekog korisnika AcctStopTime = "0000-00-00 00:00:00",
elem uz freeradius koliko se secam dolazi neka perl skripta checkrad.pl koja na osnovu prosledjenih parametara proverava na odredjenom
NAS-u (mikrotik) da li postoji aktivna sesija za odredjenog korisnika, cak ne vraca nikakav rezultat vec ga vadis sa "echo $?", ukoliko
to koristis pod linux-om.

Verzija te skripte koja je dolazila uz verziju 1.0.5 bila je prilicno jadno odradjena sto se tice MT-a, mogla je da proveri jedino jel navedeni
korisnik aktivan ili ne. Davno bese pa kasnije nisam proveravao. Secam se jedino da sam morao da iskoristim komandu:
"ppp active print terse" da bi dosao do session id-a za korisnika i svoju neku php skriptu koja je svakih 5 min proveravala i cistila bazu
od visecih sesija.

pozd
 
Odgovor na temu

Schmidt
RHCE

Član broj: 80784
Poruke: 647
*.poen.net.



+10 Profil

icon Re: Kako diskonektovati usera iz freeradiusa?17.03.2008. u 21:37 - pre 196 meseci
Prouchi koje sve atribute radius server mozhe poslati mikrotiku, posebno "Acct-Interim-Interval".

Taj atribut cje recji mikrotiku da se javi radiusu svakih n sekundi, za svaku pppoe sesiju. Na taj nachin nijedna konekcija ti necje biti mrtva, a najvishe shto mozhesh izgubiti je n sekundi konekcije. Program koji cje ti srediti (necje ih obrisati, samo cje ih zakljuchiti) eventualne zaostale sesije je radzap. Dolazi uz freeradius instalaciju.
 
Odgovor na temu

simor
Simo Radjenovic
Wirecard AG
München

Član broj: 19175
Poruke: 366
*.dynamic.sbb.co.yu.



Profil

icon Re: Kako diskonektovati usera iz freeradiusa?19.03.2008. u 18:38 - pre 196 meseci
Evo, negde sam iskopao i modifikovani kod za checkrad skriptu u perlu koju sam ja koristio da cistim bazu od "visecih sesija". Ova modifikacija koristi telnet na NAS (MT) da proveri ko je sve ulogovan i koji je session-id, jer je taj podatak nemoguce izvuci preko snmp-a.

Code:
sub mikrotik_telnet {
  # Localize all variables first.
  my ($t, $login, $password);
  my (@fields, @output, $output, $username_seen, $user);

  return 2 unless (check_net_telnet());

  $terminalserver = $ARGV[1];
  $user = $ARGV[3];

  # Get login name and password for a certain NAS from $naspass.
  ($login, $password) = naspasswd($terminalserver, 1);
  return 2 if ($password eq "");

  # MikroTik routeros doesnt tell us to which port the user is connected
  # practically this would limit us to a simple only-one user limit for
  # this script to work properly.
  $t = new Net::Telnet (Timeout => 5,
                        Prompt => '//\[.*@.*\] > /');

  # Dont just exit when there is error
  $t->errmode('return');

  # Telnet to terminal server
  $t->open($terminalserver) or return 2;

  #Send login and password etc.
  $t->login(Name => $login,
            Password => $password,
  # We must detect if we are logged in from the login banner.
  # Because if routeros is with a free license the command
  # prompt dont come. Instead it waits us to press "Enter".
            Prompt => '/MikroTik/');

  # Just be sure that routeros isn't waiting for us to press "Enter"
  $t->print("");

  # Wait for the real prompt
  $t->waitfor('/\[.*@.*\] > /');

  # It is not possible to get the line numbers etc.
  # Thus we cant support if simultaneus-use is over 1
  # At least I was using pppoe so it wasnt possible.
  #$t->print('ppp active print column name detail');
  $t->print('ppp active print without-paging detail');

  # Somehow routeros echo'es our commands 2 times. We dont want to mix
  # this with the real command prompt.
  $t->waitfor('/\[.*@.*\] > ppp active print without-paging detail/');

  # Now lets get the list of online ppp users.
  ( $output ) = $t->waitfor('/\[.*@.*\] > /');

  # For debugging we can print the list to stdout
#  print $output;

  #Lets logout to make everybody happy.
  #If we close the connection without logging out then routeros
  #starts to complain after a while. Saying;
  #telnetd: All network ports in use.
  $t->print("quit");
  $t->close;

  #check for # of $user in output
  #the output includes only one = between name and username so we can
  #safely use it as a seperator.

#disabled until mikrotik starts to send newline after each line...
#  @output = $output;
#  foreach $line ( @output ) {
#    #remove newline
#    chomp $line;
#    #remove trailing whitespace
#    ($line = $line) =~ s/\s+$//;
#    if( $line =~ /name=/ ) {
#      print($line);
#      @fields = split( /=/, $line );
#      if( $fields[1] == "\"$user\"") {
#        $username_seen++;
#      }
#    }
#  }

  if( ($output =~ /name="$user"/)&&($output=~/session-id=$ARGV[4]/) ) {
    $username_seen++;
  }

  #lets return something
  if ($username_seen > 0) {
    return 1;
  } else {
    return 0;
  }
}



Znaci upotreba (npr):

checkrad mikrotik 192.168.0.10 14 simo 0x81600000

- "mikrotik" je tip NAS-a (sto se perla tice poziva se funkcija mikrotik_telnet)
- "192.168.0.10" ip adresa NAS-a na koji se skripta telnetuje i proverava da li postoji navedeni korisnik sa navedenim session-id-jem
- 14 je nas_port (skripta ga ne koristi pa moze da stoji ovde bilo sta, moze da se implementira)
- "simo" je user koga proveravamo
- "0x81600000" je session-id koji vadimo iz radacct tabele i proveravamo

i naravno uredno popunjen fajl naspasswd:

192.168.0.10 admin password

ovo se koristi za telnet, pa ne bi bilo lose kreirati neki read-only user na mt-u samo za ove potrebe...
 
Odgovor na temu

Schmidt
RHCE

Član broj: 80784
Poruke: 647
*.poen.net.



+10 Profil

icon Re: Kako diskonektovati usera iz freeradiusa?20.03.2008. u 21:57 - pre 196 meseci
@Simo:
nema potrebe za tom skriptom, prouchi radzap...
 
Odgovor na temu

[es] :: Wireless :: Mikrotik :: Kako diskonektovati usera iz freeradiusa?

[ Pregleda: 2478 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.