Outils personnels

Serveur virtuels FreeRadius avec LDAP : Différence entre versions

De wikiGite

(Config Freeradius)
(Config Freeradius)
Ligne 32 : Ligne 32 :
  
 
Créer un fichier /etc/raddb/modules/ldap
 
Créer un fichier /etc/raddb/modules/ldap
  ldap ANNUAIRE1 {
+
ldap ANNUAIRE1 {
  server = "192.168.2.250"
+
server = "192.168.2.250"
          identity = "cn=Admin,dc=systea,dc=local"
+
        identity = "cn=Admin,dc=systea,dc=local"
          password = cela2LDAP!
+
        password = cela2LDAP!
          basedn = "ou=Annuaire1,dc=systea,dc=local"
+
        basedn = "ou=Annuaire1,dc=systea,dc=local"
          filter = "(uid=%{Stripped-User-Name:-%{User-Name}})"
+
        filter = "(uid=%{Stripped-User-Name:-%{User-Name}})"
          #base_filter = "(objectclass=radiusprofile)"
+
        #base_filter = "(objectclass=radiusprofile)"
  }
+
}
 
+
  ldap ANNUAIRE2 {
+
ldap ANNUAIRE2 {
  server = "192.168.2.250"
+
server = "192.168.2.250"
          identity = "cn=Admin,dc=systea,dc=local"
+
        identity = "cn=Admin,dc=systea,dc=local"
          password = cela2LDAP!
+
        password = cela2LDAP!
          basedn = "ou=Annuaire2,dc=systea,dc=local"
+
        basedn = "ou=Annuaire2,dc=systea,dc=local"
          filter = "(uid=%{Stripped-User-Name:-%{User-Name}})"
+
        filter = "(uid=%{Stripped-User-Name:-%{User-Name}})"
          #base_filter = "(objectclass=radiusprofile)"
+
        #base_filter = "(objectclass=radiusprofile)"
  }
+
}
  
 
Deux serveurs virtuels sont créés, chacun pointant vers une OU de l'annuaire LDAP. La seule limitation que cela impose, c'est qu'on ne peut avoir deux fois le même nom (uid), puisqu'il ne s'agit d'OUs appartenant à un seul et même domaine.
 
Deux serveurs virtuels sont créés, chacun pointant vers une OU de l'annuaire LDAP. La seule limitation que cela impose, c'est qu'on ne peut avoir deux fois le même nom (uid), puisqu'il ne s'agit d'OUs appartenant à un seul et même domaine.
Ligne 57 : Ligne 57 :
 
/etc/raddb/sites-enabled/annuaire1 :
 
/etc/raddb/sites-enabled/annuaire1 :
  
  listen {
+
listen {
  ipaddr = 192.168.2.250
+
ipaddr = 192.168.2.250
          port = 1812
+
        port = 1812
          type = auth
+
        type = auth
          virtual_server = one
+
        virtual_server = one
  }
+
}
  server one {
+
server one {
  authorize {
+
authorize {
          ANNUAIRE1
+
        ANNUAIRE1
  }
+
}
  authenticate {
+
authenticate {
          Auth-Type LDAP {
+
        Auth-Type LDAP {
                  ANNUAIRE1
+
                ANNUAIRE1
          }
+
        }
  }
+
}
  preacct {
+
preacct {
  }
+
}
  accounting {
+
accounting {
  }
+
}
  session {
+
session {
  }
+
}
  post-auth {
+
post-auth {
  }
+
}
  pre-proxy {
+
pre-proxy {
  }
+
}
  post-proxy {
+
post-proxy {
  }
+
}
  
 
/etc/raddb/sites-enabled/nonrestricted
 
/etc/raddb/sites-enabled/nonrestricted
  listen {
+
listen {
  ipaddr = 192.168.2.250
+
ipaddr = 192.168.2.250
          port = 1813
+
        port = 1813
          type = auth
+
        type = auth
          virtual_server = two
+
        virtual_server = two
  }
+
}
  server two {
+
server two {
  authorize {
+
authorize {
          ANNUAIRE2
+
        ANNUAIRE2
  }
+
}
  authenticate {
+
authenticate {
          Auth-Type LDAP {
+
        Auth-Type LDAP {
                  ANNUAIRE2
+
                ANNUAIRE2
          }
+
        }
  }
+
}
  preacct {
+
preacct {
  }
+
}
  accounting {
+
accounting {
  }
+
}
  session {
+
session {
  }
+
}
  post-auth {
+
post-auth {
  }
+
}
  pre-proxy {
+
pre-proxy {
  }
+
}
  post-proxy {
+
post-proxy {
  }
+
}
  }
+
}
  -------------------------------------------------------------
 
  
 
Les deux serveurs sont bindés sur la même IP, mais sur deux port différents. <br/>
 
Les deux serveurs sont bindés sur la même IP, mais sur deux port différents. <br/>

Version du 14 janvier 2016 à 15:49

Installer les paquets FreeRadius et le serveur openldap

 yum install freeradius freeradius-mysql freeradius-utils openldap openldap-clients openldap-servers -y

Config de la base LDAP

Définir le compte et le mot de passe admin

 slappasswd

Copier le SHA qui est renvoyé dans le fichier /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif

Dans ce même fichier modifier les attributs olcSuffix et olcRootDN :

 olcSuffix: dc=systea,dc=local	
 ...
 olcRootDN: cn=Admin,dc=systea,dc=local

Modifier également le fichier olcDatabase\=\{1\}monitor.ldif pour que le rootDN corresponde :

 olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Admin,dc=systea,dc=local" read by * none

Même chose dans olcDatabase\=\{2\}bdb.ldif sur les lignes :

 olcAccess: {0}to attrs=userPassword by self write by dn.base="cn=Manager,dc=acme,dc=com" write by anonymous auth by * none
 olcAccess: {1}to * by dn.base="cn=Manager,dc=acme,dc=com" write by self write by * read

Démarrer openldap avec le système :

 chkconfig slapd on

On utilisera Webmin ou tout autre interface graphique pour gérer les utilisateurs.

Config Freeradius

Pour la suite, on été crées deux OU dans l'annuaire LDAP. Chacune correspondra à un serveur radius, dans le but de fournir deux sources d'identification isolées.

Créer un fichier /etc/raddb/modules/ldap

ldap ANNUAIRE1 {
server = "192.168.2.250"
        identity = "cn=Admin,dc=systea,dc=local"
        password = cela2LDAP!
        basedn = "ou=Annuaire1,dc=systea,dc=local"
        filter = "(uid=%{Stripped-User-Name:-%{User-Name}})"
        #base_filter = "(objectclass=radiusprofile)"
}

ldap ANNUAIRE2 {
server = "192.168.2.250"
        identity = "cn=Admin,dc=systea,dc=local"
        password = cela2LDAP!
        basedn = "ou=Annuaire2,dc=systea,dc=local"
        filter = "(uid=%{Stripped-User-Name:-%{User-Name}})"
        #base_filter = "(objectclass=radiusprofile)"
}

Deux serveurs virtuels sont créés, chacun pointant vers une OU de l'annuaire LDAP. La seule limitation que cela impose, c'est qu'on ne peut avoir deux fois le même nom (uid), puisqu'il ne s'agit d'OUs appartenant à un seul et même domaine.

Chaque fichier dans /etc/raddb/sites-enabled/ représente un serveur virtuel. au démarrage du serveur, tous les fichiers sont lus et tous les serveurs essaient donc de démarrer. Il faut supprimer le fichier default, pour éviter tout conflit.
On crée ensuite les fichiers :

/etc/raddb/sites-enabled/annuaire1 :

listen {
ipaddr = 192.168.2.250
        port = 1812
        type = auth
        virtual_server = one
}
server one {
authorize {
        ANNUAIRE1
}
authenticate {
        Auth-Type LDAP {
                ANNUAIRE1
        }
}
preacct {
}
accounting {
}
session {
}
post-auth {
}
pre-proxy {
}
post-proxy {
}

/etc/raddb/sites-enabled/nonrestricted

listen {
ipaddr = 192.168.2.250
        port = 1813
        type = auth
        virtual_server = two
}
server two {
authorize {
        ANNUAIRE2
}
authenticate {
        Auth-Type LDAP {
                ANNUAIRE2
        }
}
preacct {
}
accounting {
}
session {
}
post-auth {
}
pre-proxy {
}
post-proxy {
}
}

Les deux serveurs sont bindés sur la même IP, mais sur deux port différents.
Pour terminer, commenter tous les blocs listen dans radiusd.conf pour évite les conflits d'adresse qui empècheraient radius de démarrer.

Exemple avec pfsense

On a deux portails captifs, chacuns sur une interface, destinés à deux publics différents, l'un est surveillé par un squid, l'autre non. Les deux sont en wifi, donc atteignable par tout le monde. Un L'intêret ici de séparer les bases est évident.

Il suffit alors d'indiquer l'adresse du serveur radius, avec le port qui correspond, suivant la base que l'on souhaite interroger.


Deux portails captifs, bindés sur leur interface respective :

Radiusldap1.png


On modifie le port dans la configuration de chacun des portails :

Radiusldap2.png