Radius

From Knowledge
Jump to: navigation, search

Ce tutoriel explique l'installation de Radius sur un serveur GNU/Linux Debian (mode CLI).

Conditions requises

Aucune condition requise

Installation

  • Créer une base de données et préparer un accès MySQL pour radius comme suit
    • Utilisateur (user): radius
    • Base de données (database/schema): radius
    • Hôte source: localhost
    • Mot de passe (password): Libre
  • Installer les paquets Debian: freeradius freeradius-common freeradius-mysql freeradius-utils libfreeradius2
apt-get update
apt-get install freeradius freeradius-common freeradius-mysql freeradius-utils libfreeradius2
  • Exécuter le fichier SQL suivant dans la base de données radius: /etc/freeradius/sql/mysql/schema.sql
  • Exécuter les commandes SQL suivantes dans la base de données radius:
RENAME TABLE `radcheck` TO `radcheckold`;
CREATE TABLE `radcheckext` (`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `username` VARCHAR(64) NOT NULL DEFAULT '', `password` VARCHAR(253) NOT NULL DEFAULT '', `from` BIGINT(20) NOT NULL DEFAULT '0', `through` BIGINT(20) NOT NULL DEFAULT '2145826800', `comment` TEXT NOT NULL, PRIMARY KEY (`id`), UNIQUE INDEX `XU_USERNAME` (`username`)) COLLATE='utf8_general_ci' ENGINE=MyISAM AUTO_INCREMENT=10;
CREATE TABLE `radcheck` (`id` INT(11) UNSIGNED NOT NULL, `username` VARCHAR(64) NOT NULL COLLATE 'utf8_general_ci', `attribute` VARCHAR(13) NOT NULL COLLATE 'utf8_general_ci', `op` VARCHAR(2) NOT NULL COLLATE 'utf8_general_ci', `value` VARCHAR(253) NOT NULL COLLATE 'utf8_general_ci') ENGINE=MyISAM;
DROP TABLE IF EXISTS `radcheck`;
CREATE ALGORITHM=UNDEFINED DEFINER=`radius`@`localhost` SQL SECURITY DEFINER VIEW `radcheck` AS select `radcheckext`.`id` AS `id`,`radcheckext`.`username` AS `username`,'User-Password' AS `attribute`,':=' AS `op`,`radcheckext`.`password` AS `value` from `radcheckext` where ((`radcheckext`.`from` <= unix_timestamp()) and (`radcheckext`.`through` >= unix_timestamp()));
CREATE DEFINER=`radius`@`localhost` TRIGGER `triggerafterinsert_radpostauth` AFTER INSERT ON `radpostauth` FOR EACH ROW UPDATE voucher SET `begun` = '1', `from` = unix_timestamp(), `through` = (unix_timestamp()+duration) WHERE `username` = NEW.username AND `begun` = '0'
  • Modifier les variables suivantes du fichier /etc/freeradius/sql.conf par rapport à la base de données radius préparée au préalable
    • server (selon l'architecture souhaitée, mais probablement localhost)
    • port
    • login
    • password
    • radius_db
  • Modifier les lignes suivantes du fichier /etc/freeradius/radiusd.conf:
    • Décommenter l'inclusion du fichier sql.conf
    • Décommenter l'inclusion du fichier sql/mysql/counter.conf
  • Modifier le fichier /etc/freeradius/sites-available/inner-tunnel comme suit:
    • Ajouter sql juste après authorize {
    • Ajouter sql juste après session {
  • Modifier le fichier /etc/freeradius/sites-available/default comme suit:
    • Ajouter sql juste après authorize {
    • Ajouter sql juste après session {
    • Ajouter sql juste après accounting {
    • Ajouter sql juste après post-auth {
  • Modifier le fichier /etc/freeradius/clients.conf comme suit:
    • Remplacer client localhost { par client 0.0.0.0/0 {
    • Commenter la variable ipaddr
    • Commenter la variable shortname (si ce n'est pas déjà fait)
    • Définir la variable secret avec une nouvelle valeur (à garder secrète)
  • Redémarrer le serveur Radius
/etc/init.d/freeradius restart

Test

  • Exécuter la commande SQL suivante dans la base de données radius:
INSERT INTO `radcheckext` (`username`, `password`, `from`, `through`, `comment`) VALUES ('test', 'test', 0, 2145830400, 'Just testing...');
  • Exécuter la commande suivante: radtest test test 127.0.0.1 0 mysecret
    • Le premier test représente le nom d'utilisateur
    • Le deuxième test représente le mot de passe
    • 127.0.0.1 représente le serveur Radius à contacter
    • 0 est le numéro de port NAS. Rien à expliquer ici, indiquer simplement 0...
    • mysecret est le secret défini à l'étape au préalable
    • La commande devrait aboutir à une réponse de type "Access-Accept"