Serveur virtuels FreeRadius avec LDAP : Différence entre versions
De wikiGite
(→Config Freeradius) |
(→Exemple avec pfsense) |
||
(4 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
Installer les paquets FreeRadius et le serveur openldap | 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 == | == Config de la base LDAP == | ||
Définir le compte et le mot de passe admin | 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 | Copier le SHA qui est renvoyé dans le fichier /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif | ||
Ligne 10 : | Ligne 10 : | ||
Dans ce même fichier modifier les attributs olcSuffix et olcRootDN : | Dans ce même fichier modifier les attributs olcSuffix et olcRootDN : | ||
− | + | olcSuffix: dc=domain,dc=com | |
− | + | ... | |
− | + | olcRootDN: cn=Admin,dc=domain,dc=com | |
Modifier également le fichier olcDatabase\=\{1\}monitor.ldif pour que le rootDN corresponde : | 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=domain,dc=com" read by * none | |
Même chose dans olcDatabase\=\{2\}bdb.ldif sur les lignes : | 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=Admin,dc=domain,dc=com" write by self write by * read | |
Démarrer openldap avec le système : | Démarrer openldap avec le système : | ||
− | + | chkconfig slapd on | |
On utilisera Webmin ou tout autre interface graphique pour gérer les utilisateurs. | On utilisera Webmin ou tout autre interface graphique pour gérer les utilisateurs. | ||
Ligne 29 : | Ligne 29 : | ||
== Config Freeradius == | == Config Freeradius == | ||
− | Pour la suite, | + | Pour la suite, ont é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 | Créer un fichier /etc/raddb/modules/ldap | ||
− | + | ldap ANNUAIRE1 { | |
− | + | server = "192.168.2.250" | |
− | + | identity = "cn=Admin,dc=domain,dc=com" | |
− | + | password = cela2LDAP! | |
− | + | basedn = "ou=Annuaire1,dc=domain,dc=com" | |
− | + | filter = "(uid=%{Stripped-User-Name:-%{User-Name}})" | |
− | + | #base_filter = "(objectclass=radiusprofile)" | |
− | + | } | |
− | + | ||
− | + | ldap ANNUAIRE2 { | |
− | + | server = "192.168.2.250" | |
− | + | identity = "cn=Admin,dc=domain,dc=com" | |
− | + | password = cela2LDAP! | |
− | + | basedn = "ou=Annuaire2,dc=domain,dc=com" | |
− | + | 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. | 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 { | |
− | + | 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/ | + | /etc/raddb/sites-enabled/annuaire2 |
− | + | 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. <br/> | Les deux serveurs sont bindés sur la même IP, mais sur deux port différents. <br/> | ||
Ligne 120 : | Ligne 119 : | ||
=== Exemple avec pfsense === | === 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. | + | On a deux portails captifs, chacuns sur une interface, destinés à deux publics différents, l'un est surveillé par un squid (sur l'interface OPT1), 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. | Il suffit alors d'indiquer l'adresse du serveur radius, avec le port qui correspond, suivant la base que l'on souhaite interroger. | ||
Ligne 132 : | Ligne 131 : | ||
<br/> | <br/> | ||
− | On modifie le port dans la configuration de chacun des portails : | + | On modifie le port dans la configuration de chacun des portails. Le pfsense étant au coeur du réseau, il peut communiquer avec les réseaux des deux interfaces. Un poste dans le réseau 1 peut donc : |
[[Fichier:radiusldap2.png]] | [[Fichier:radiusldap2.png]] |
Version actuelle datée du 15 janvier 2016 à 10:28
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=domain,dc=com ... olcRootDN: cn=Admin,dc=domain,dc=com
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=domain,dc=com" 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=Admin,dc=domain,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, ont é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=domain,dc=com" password = cela2LDAP! basedn = "ou=Annuaire1,dc=domain,dc=com" filter = "(uid=%{Stripped-User-Name:-%{User-Name}})" #base_filter = "(objectclass=radiusprofile)" } ldap ANNUAIRE2 { server = "192.168.2.250" identity = "cn=Admin,dc=domain,dc=com" password = cela2LDAP! basedn = "ou=Annuaire2,dc=domain,dc=com" 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/annuaire2
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 (sur l'interface OPT1), 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 :
On modifie le port dans la configuration de chacun des portails. Le pfsense étant au coeur du réseau, il peut communiquer avec les réseaux des deux interfaces. Un poste dans le réseau 1 peut donc :