====== 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 [[cs:spravce:pripojovani:radius:radiator#Ověření identity uživatele a jeho oprávnění používat eduroam|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; $_} ; 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í: [[cs:spravce:pripojovani:radius:radiator:check_reply.pl:raw_config|check_reply.pl]] ====== ====== --- //[[http://staff.cesnet.cz/~semik|Jan Tomášek]] 15.09.2006 12:55// dokument převeden z www.eduroam.cz