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 ; }
Skript ke stažení: check_reply.pl
— Jan Tomášek 15.09.2006 12:55 dokument převeden z www.eduroam.cz
CESNET, z. s. p. o.
Generála Píky 26
160 00 Praha 6
info@cesnet.cz
Tel: +420 234 680 222
GSM: +420 602 252 531
support@cesnet.cz