Mes serveurs Linux lorsqu’ils sont provisionnés via Foreman (j’y reviendrais) vont s’enregistrer à mon FreeIPA qui gère l’authentification et mon DNS interne.
Histoire de pousser un peu la sécurité, je me connecte en SSH depuis mon MacOS à ces machines via Kerberos.
Et pour cela il faut configurer votre MacOS mais surtout vérifier deux choses avant de démarrer :
1. Une bonne résolution DNS de vos FreeIPA (2 MMR dans mon cas)
2. Que votre date et heure coïncide avec vos serveurs FreeIPA, le plus simple étant de pointer votre MacOS sur vos serveurs FreeIPA

Mais trêve de bavardage, commençons.

Lire la suite de

Par défaut, Freeipa ne fournit pas de solution de self service password.
Dans leur documentation ils vous indiquent d’utiliser des services tiers type PWM.
Celui-ci a l’air très complet, mais trop lourd pour mes besoins, car écrit en java et nécessite donc un serveur tomcat pour faire tourner la bête.
J’ai donc utilisé le service du projet LTB qui lui est écrit en PHP.

Installation

wget http://tools.ltb-project.org/attachments/download/800/ltb-project-self-service-password-0.9.tar.gz
tar xzvf ltb-project-self-service-password-0.9.tar.gz -C /var/www/ltb-password

Modifier votre virtual host pour qu’il prenne en compte vos changements.
Puis dans le dossier, modifier le fichier config.inc.php comme suit :

#==============================================================================
# Configuration
#==============================================================================
# LDAP
$ldap_url = "ldap://freeipa.domain.local";
$ldap_starttls = true;
$ldap_binddn = "cn=Directory Manager";
$ldap_bindpw = 'MY_STRONG_PASSWORD';
$ldap_base = "cn=users,cn=accounts,dc=domain,dc=local";
$ldap_login_attribute = "uid";
$ldap_fullname_attribute = "cn";
$ldap_filter = "(&(objectClass=person)($ldap_login_attribute={login}))";

$hash = "auto";
...

Ltb utilise l’attribut userPassword pour effectuer le changement de mot de passe, or FreeIPA ne laisse que le directory manager voir cet attribut, il faut donc obligatoirement passer par cet utilisateur.
Veillez bien à utiliser un certificat, même auto signée, pour avoir un minimum de sécurité.

Je continue l’intégration de mes services à FreeIPA; dans cette optique je vous présente aujourd’hui comment intégrer Zabbix à FreeIPA grâce au module Kerberos d’Apache

Génération de la keytab

A faire sur le serveur FreeIPA

ipa service-add HTTP/zabbix.domain.local

Dans mon cas j’ouvre le service sur l’extérieur, il faut donc que le nom du service externe soit aussi dans la keytab sinon le service Kerberos ne valide pas l’authentification.

ipa service-add HTTP/zabbix.domain.com

une fois les deux services ajoutés, on peut concaténer le tout directement sur le serveur cible (ici Zabbix):

A faire sur le serveur cible

ipa-getkeytab -s freeipa.domain.local -p HTTP/zabbix.domain.local -k /etc/httpd/zabbix.keytab
ipa-getkeytab -s freeipa.domain.local -p HTTP/zabbix.domain.com -k /etc/httpd/zabbix.keytab

On liste le contenu de la keytab pour vérifier :

klist -e -k /etc/httpd/zabbix.keytab

FILE:/etc/httpd/zabbix.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   1 HTTP/zabbix.domain.local@DOMAIN.LOCAL (aes256-cts-hmac-sha1-96)
   1 HTTP/zabbix.domain.local@DOMAIN.LOCAL (aes128-cts-hmac-sha1-96)
   1 HTTP/zabbix.domain.local@DOMAIN.LOCAL (des3-cbc-sha1)
   1 HTTP/zabbix.domain.local@DOMAIN.LOCAL (arcfour-hmac)
   1 HTTP/zabbix.domain.com@DOMAIN.LOCAL (aes256-cts-hmac-sha1-96)
   1 HTTP/zabbix.domain.com@DOMAIN.LOCAL (aes128-cts-hmac-sha1-96)
   1 HTTP/zabbix.domain.com@DOMAIN.LOCAL (des3-cbc-sha1)
   1 HTTP/zabbix.domain.com@DOMAIN.LOCAL (arcfour-hmac)

Ajout de l’utilisateur dans Zabbix et modification de l’authentification

Afin de ne pas se retrouver sans pouvoir accéder a notre plateforme après la modification de l’authentification, il faut créer les utilisateurs sur la plateforme. Faite ça de façon classique en passant par l’interface de Zabbix. Il faut savoir que par défaut l’authentification va prendre en compte l’uid du compte , il faut donc que les uid corresponde.

Une fois l’ajout effectué on peut changer l’authentification en HTTP

Ne vous déloguez pas, ainsi vous gardez le ticket de session le temps de valider que votre infrastructure est fonctionnel.

Modification d’Apache

On va s’appuyer sur un module qui s’appel : auth_kerb. Pour l’installer sur CentOS il suffi de simplement faire :

yum install mod_auth_kerb.x86_64

Il ne reste plus qu’à modifier apache pour prendre en compte la nouvelle méthode authentification

On modifie le virtualhost de Zabbix pour intégrer les lignes en gras :

<VirtualHost *:80>
...
<Directory /usr/share/zabbix/>

                      AuthType Kerberos
                      AuthName "Kerberos Login"
                      KrbMethodNegotiate on
                      KrbMethodK5Passwd on
                      KrbServiceName HTTP
                      KrbAuthRealms DOMAIN.LOCAL
                      Krb5KeyTab /etc/httpd/zabbix.keytab
                      KrbSaveCredentials on
                      KrbConstrainedDelegation on
                      Require valid-user

</Directory>

...

</VirtualHost>

puis on redémarre apache

service httpd restart

A ce stade vous en mesure de vous authentifier sur Zabbix via Kerberos

Si maintenant vous voulez filtrer par groupe d’utilisateurs, le module Kerberos n’est pas en mesure de le faire en l’état, il faut passer par le module LDAP de apache qui va vérifier l’appartenance du compte au groupe avant de valider l’accès.

Je ne l’ai pas encore fait, mais cela ne serai tarder, j’updaterai ce billet en fonction.

Dans la version 8.0 de Zimbra il est maintenant possible de déléguer l’authentification à un serveur Kerberos. Quand on pense Kerberos, on pense assez rapidement à l’Active Directory, mais dans mon cas, je ne gère que des machines sous Linux et n’ai nul besoin d’un produit de chez Microsoft dans mon infrastructure. Comme solution alternative couvrant mes besoins, je me suis penché sur l’identity manager de chez Red Hat en sa version OpenSource : FreeIPA. Je ne détaillerai pas comment installer FreeIPA, mais je pense écrire des articles sur le produit au fur et à mesure de mon apprentissage sur le sujet en commençant par celui-ci :

Configuration de Zimbra avec FreeIPA

Ajout de la machine dans le domaine

Dans un premier temps il faut que la machine fasse parti du domain Kerberos. Pour cela, enregistrer la avec la commande suivante :

ipa-client-install --enable-dns-updates --domain=DOMAIN.TLD --server=FREEIPA.DOMAIN.TLD

Une fois passé le wizard vérifiez que vous pouvez acquérir un ticket kerberos via la commande suivante :

kinit admin

puis vérifiez la validité du ticket :

klist 
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin@DOMAIN.TLD

Valid starting     Expires            Service principal
01/23/14 19:44:12  01/24/14 19:44:10  krbtgt/DOMAIN.TLD@DOMAIN.TLD

Maintenant que la machine est dans le domaine Kerberos, on passe a la suite.
Si vous n’arrivez pas jusqu’à cette étape, je vous recommande de lire la documentation de FreeIPA

Modification du système et configuration de Zimbra

Tout d’abord il faut vérifier que dans la configuration de votre système Kerberos va effectuer un reverse lookup DNS sur le KDC pour cela vérifier que l’option dns_lookup_kdc est bien à true dans le fichier krb5.conf

Une fois cela fait, mettez vous en tant qu’utilisateur Zimbra et effectuez les commandes suivantes :

zmprov md les-titans.com  zimbraAuthMech kerberos5 <= Modification de la méthode d'authentification
zmprov md les-titans.com zimbraAuthKerberos5Realm DOMAIN.TLD <= On  spécifie ici le domaine Kerberos, celui-ci sera ajouté au nom d'utilisateur. La case est très importante, il faut qu'elle soit en majuscule.

Une fois cela fait, il faut redémarrer Zimbra afin qu’il prenne en compte le fichier de configuration krb5.conf si celui-ci a été modifié.

zmcontrol restart

Votre serveur Zimbra est maintenant connecté à FreeIPA.

Si votre compte zimbra est different de votre compte Kerberos, l’authentification ne retrouvera pas l’utilisateur du coté de FreeIPA.
Il faut specifier alors a Zimbra le Princpipal a chercher dans le FreeIPA.
Pour cela, il faut commencer modifier la valeur de l’attribut utilisateur :

zmprov ma my_account@domain.tld zimbraForeignPrincipal kerberos5:account@DOMAIN.TLD

en precisant bien kerberos en debut de ligne.

Enjoy !