cs:spravce:pripojovani:radius:radiator:check_reply.pl

Table of Contents

Skript check_reply.pl

Odpovědi od národního RADIUS serveru musí být kontrolovány jestli neobsahují AV páry, které by mohly ovlivnit funkci našich AP. Současně také probíhá kontrola, jestli návštěvník není na našem blacklistu.

Použití skriptu je uvedeno v sekci ověřování identity uživatele návodu popisujícího konfiguraci Radiatoru.

Načtení blacklistu do paměti

my $blackListFilename = "/etc/radiator/blacklist";
my %blacklist;
if (open(BLACKLIST, "<$blackListFilename")) {
  %blacklist = map {$_ => 1} map {$_ =~ s/\s+$//s; $_} <BLACKLIST>;
  close(BLACKLIST);
} else {
  &main::log($main::LOG_DEBUG, "Can't read \"$blackListFilename\": $!");
  &main::log($main::LOG_DEBUG, "Assuming that nobody is blacklisted.");
};

Definice zakázaných atributů a testovacího účtu

my @stripAttrs = ('Class',
                  'Cisco-AVPair',
                  'cisco-avpair',
                  'Tunnel-Type',
                  'Tunnel-Medium-Type');
 
my $testAccountID      = 'Tunnel-Private-Group-ID';
my $testAccountIDValue = '1:666';

Primitvní kontrola, jestli návštěvník není na našem blacklistu

sub isBlacklisted {
  my $username = shift;
 
  return $blacklist{$username};
}

Funkce odstraňující zakázané atributy z odpovědi

sub stripAttrs {
  my $p = shift;
  my @stripAttrs = @_;
 
  foreach my $attr (@stripAttrs) {
    if (defined($p->get_attr($attr))) {
      &main::log($main::LOG_DEBUG,
                 'Removing prohibited attr '.$attr.' from reply.');
      $p->delete_attr($attr);
    };
  };
};

Samotný kód hooku začíná až zde.

sub {
  my $replyFromProxy  = ${$_[0]};
  my $replyToNAS      = ${$_[1]};
  my $originalRequest = ${$_[2]};
  my $sentToProxy     = ${$_[3]};
  my $host            =   $_[4];
 
  if ($replyFromProxy->code eq 'Access-Accept') {
    # Zkontrolovat, jestli uzivatel neni na blacklistu.
    if (isBlacklisted($replyFromProxy->get_attr('User-Name'))) {
      &main::log($main::LOG_DEBUG,
                 $replyFromProxy->get_attr('User-Name').
                 ' is blacklisted rewriting to Access-Reject!');

Jestliže je návštěvník na blacklistu, tak je mu zamítnut přístup k síti.

      $replyFromProxy->set_code('Access-Reject');
      stripAttrs($replyToNAS, @stripAttrs, $testAccountID);
 
      return ;
    }; # ----------------------------------------------------------------------
 
    # Mrknout, jestli se jedna o testovaci ucet.
    my $attrVal = $replyFromProxy->get_attr($testAccountID);

Jedná-li se o testovací účet, tak se hodnota atributu $testAccountIDValue nechá na pokoji, jinak se odstraní, aby byl na základě konfigurace později přidán s hodnotou 1:100, což je identifikátor VLAN, kam jsou zařazováni uživatelé.

    if ($attrVal eq $testAccountIDValue) {
      &main::log($main::LOG_DEBUG, "This is a testing account!");
    } else {
      stripAttrs($replyToNAS, $testAccountID);
    }; # ----------------------------------------------------------------------
 
    # Odstranit atributy, ktery by mohly zmast nase APcka.
    stripAttrs($replyToNAS, @stripAttrs);
  };
 
  return ;
}

Příloha

Skript ke stažení: check_reply.pl

Jan Tomášek 15.09.2006 12:55 dokument převeden z www.eduroam.cz

Last modified:: 2006/11/07 15:23