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 !

A la suite de divers changement d’humeurs, je ne savais plus quelles versions de Linux j’avais installé au sein de mon infrastructure. Alors plutôt que de me connecter sur chaque serveur et vérifier quelle version et quelle révision de était présente, j’ai utilisé la fonction d’inventaire de Zabbix pour effectuer l’opération. Pour cela on va créer un nouvel item dans le template OS Linux fourni de base dans l’installation de Zabbix :

Aller dans Configuration -> Template -> Template OS Linux -> Items -> Create Item

puis créer l’item avec les informations suivantes :

Explications des informations importantes :

Name : System Distribution

-> Ici c’est le nom de l’item

Type : Zabbix Agent

-> le type de check qui va être effectué. Dans notre cas c’est l’agent Zabbix qui va nous remonter l’information.

Key : system.sw.os[name]

-> On positionne la clef que l’on souhaite remonter. Le « name » permet de ne remonter que la distribution, d’autres options sont disponibles.

Type of information : Character

-> la donnée remonté est de type character

Update interval : 86400

-> l’intervalle d’interrogation, étant donné que je ne met pas a jour mes serveurs tous les quatre matins, je l’ai positionné a 1 jour.

Populate host inventory field : OS (Short)

-> ici on stipule où sera placé l’information dans l’inventaire.

Attention : ceci n’est disponible qu’avec un agent égal ou supérieur à la version 2.0

Une fois que l’item est sauvegardé, il suffi de patienter que l’information remonte :

Un des problèmes que l’on rencontre souvent lors de l’installation de Zimbra sur un hôte, c’est qu’il ne faut pas installer le MTA de l’OS. En effet Zimbra en livre un par défaut (postfix). Du coup les mails systèmes ne sont pas transmis car ils n’utilisent aucun client. Pour que cela fonctionne, il suffi simplement de configurer le système d’exploitation pour qu’il utilise le postfix de Zimbra :

Dans un premier temps, on ajoute le postfix de Zimbra danes les alternatives pour le service « mta »

/usr/sbin/alternatives --install /usr/sbin/sendmail mta /opt/zimbra/postfix/sbin/sendmail 25 \
--slave /usr/bin/mailq mta-mailq /opt/zimbra/postfix/sbin/mailq \
--slave /usr/bin/newaliases mta-newaliases /opt/zimbra/postfix/sbin/newaliases \
--slave /usr/share/man/man1/mailq.1.gz mta-mailqman /opt/zimbra/postfix/man/man1/mailq.1 \
--slave /usr/share/man/man1/newaliases.1.gz mta-newaliasesman /opt/zimbra/postfix/man/man1/newaliases.1 \
--slave /usr/share/man/man8/sendmail.8.gz mta-sendmailman /opt/zimbra/postfix/man/man1/sendmail.1 \
--slave /usr/share/man/man5/aliases.5.gz mta-aliasesman /opt/zimbra/postfix/share/man/man5/aliases.5 \
--initscript zimbra

Puis on configure le système pour qu’il l’utilise en choisissant notre option (ici la 2) :

/usr/sbin/alternatives --config mta
There are 2 programs which provide 'mta'.
Selection Command
-----------------------------------------------
*+ 1 /usr/sbin/sendmail.postfix
2 /opt/zimbra/postfix/sbin/sendmail

Et si l’on souhaite vérifier :

update-alternatives --display mta
mta - status is manual.
link currently points to /opt/zimbra/postfix/sbin/sendmail
/usr/sbin/sendmail.postfix - priority 30
slave mta-pam: /etc/pam.d/smtp.postfix
slave mta-mailq: /usr/bin/mailq.postfix
slave mta-newaliases: /usr/bin/newaliases.postfix
slave mta-rmail: /usr/bin/rmail.postfix
slave mta-sendmail: /usr/lib/sendmail.postfix
slave mta-mailqman: /usr/share/man/man1/mailq.postfix.1.gz
slave mta-newaliasesman: /usr/share/man/man1/newaliases.postfix.1.gz
slave mta-aliasesman: /usr/share/man/man5/aliases.postfix.5.gz
slave mta-sendmailman: /usr/share/man/man1/sendmail.postfix.1.gz
/opt/zimbra/postfix/sbin/sendmail - priority 25
slave mta-pam: (null)
slave mta-mailq: /opt/zimbra/postfix/sbin/mailq
slave mta-newaliases: /opt/zimbra/postfix/sbin/newaliases
slave mta-rmail: (null)
slave mta-sendmail: (null)
slave mta-mailqman: /opt/zimbra/postfix/man/man1/mailq.1
slave mta-newaliasesman: /opt/zimbra/postfix/man/man1/newaliases.1
slave mta-aliasesman: /opt/zimbra/postfix/share/man/man5/aliases.5
slave mta-sendmailman: /opt/zimbra/postfix/man/man1/sendmail.1
Current `best' version is /usr/sbin/sendmail.postfix.

Si comme moi vous utilisez un reverse proxy pour desservir plusieurs sites web, vous devez avoir connu le problèmes du relayage des adresses IP du proxy dans les logs des serveurs web (aka backends).

J’en ai parlé dans cet article ici

Maintenant j’ai le même souci avec Zimbra. En effet Zimbra utilise un mécanisme de reverse proxy basé sur du NGINX et Memcached; la configuration de celui-ci inclus de nombreuses variables basée sur des attributs LDAP. Lorsque utilise les briques natives de Zimbra, dans les fichiers de logs des Mailbox on retrouve bien le « oip » (Originating IP); mais lorsqu’on utilise un proxy maison, celui-ci n’est évidement pas pris en compte. On peux voir ça dans les logs du serveur Zimbra (mailbox.log) :

2013-10-02 00:01:39,190 INFO  [btpool0-12://mail.domain.tld/service/soap] [name=wolfy@les-titans.com;mid=8;ip=reverse_proxy_IP;] soap - EndSessionRequest

Pour modifier cela il faut renseigner notre reverse proxy dans la configuration de Zimbra. Pour cela passer en tant qu’utilisateur Zimbra puis effectuez les commandes suivantes :

[zimbra@zimbra ~]$ zmprov ms `zmhostname` +zimbraMailTrustedIP reverse_proxy_IP
[zimbra@zimbra ~]$ zmprov ms `zmhostname` +zimbraMailTrustedIP reverse_proxy_IP_n°2

Pensez bien a mettre le « + » devant l’attribut sinon cela écrasera les autres occurrences.

Une fois l’opération effectué, redémarrez Zimbra et vous verrez ce changement dans les logs :

2013-10-03 13:43:06,994 INFO  [btpool0-13://mail.domain.tld/service/soap/SearchRequest] [name=wolfy@les-titans.com;mid=8;ip=reverse_proxy_IP;oip=Client_IP;ua=ZimbraWebClient - FF3.0 (Win)/7.2.5_GA_2906;] soap - SearchRequest elapsed=5

Introduction

Vous avez sans doute eu le souci lors de l’utilisation d’un reverse proxy pour desservir des machines web type Apache. Dans les logs des backend, l’adresse IP retourné est celle du reverse proxy; logique puisque c’est lui qui effectue les requêtes. Cela peut être gênant si vous voulez lever des statistiques sur vos visiteurs.

Pour que le backend traite les trames les frontend ajoute dans les headers l’occurrence X-Forwarded-For. Voici comment cela se présente :

X-Forwarded-For: client, proxy1, proxy2

En premier lieu on l’adresse ip d’origine (celle du client) puis le ou les proxy par lesquels la demande est passée.

Nginx

Pour configurer cela sous NGINX, il faut d’abord vérifier que votre version de NGINX a été compilé avec. Pour cela :

nginx -V

piuis vérifier que l’occurrence suivante apparait bien dans la ligne des compilations :

--with-http_realip_module

si cela est présent vous n’avez simplement qu’a rajouter dans votre virtualhost ces deux lignes :

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Coté backend il faut maintenant prendre en compte ces headers pour cela sur

CentOS

On installe le module mod_extract_forwarded disponible dans les repository EPEL puis :

yum install mod_extract_forwarded

Une fois le module installé, il faut le configurer pour accepter les headers de la part de certains proxy (un peu de sécurité que diable !).

Pour cela éditer le fichier /etc/httpd/conf.d/mod_extract_forwarded.conf et ajouter la ligne suivante :

MEFaccept reverse_proxy_IP
MEFaccept reverse_proxy_IP2

Puis on redémarre apache

service httpd restart

On vérifie que le module est bien chargé :

apachectl -M | grep frowarded

et normalement dans vos logs ça roulera.

Debian

Même topo que pour CentOS, a la différence que c’est le module rpaf que l’on installe :

apt-get install libapache2-mod-rpaf

Puis on modifie le fichier /etc/apache2/mods-enabled/rpaf.conf pour ajouter l’IP du reverse proxy

J’utilise au quotidien XBMC pour la lecture de mes vidéos. Pour avoir une bibliothèque propre, je préfère me baser sur un logiciel de gestion de scrapper plutot que de laisser XBMC gérer cela.

Historiquement j’utilisai MediaCompanion, mais mon récent passage à Linux (j’ai enfin convaincu madame) sur mon poste de travail personnel me poussea changer de logiciel celui-ci n’étant pas disponible sous Linux. Après plusieurs tests, j’ai  opté pour MediaElch.
Aucun paquet n’étant disponible sous Fedora, il faut l’installer depuis les sources :
Dans un premier temps, il faut installer les binaires & devel Mediainfo

rpm -Uvh http://mediaarea.net/download/binary/libzen0/0.4.29/libzen0-0.4.29-1.x86_64.Fedora_19.rpm http://mediaarea.net/download/binary/libmediainfo0/0.7.64/libmediainfo0-0.7.64-1.x86_64.Fedora_19.rpm

Devel :

rpm -Uvh http://mediaarea.net/download/binary/libzen0/0.4.29/libzen-devel-0.4.29-1.x86_64.Fedora_19.rpm http://mediaarea.net/download/binary/libmediainfo0/0.7.64/libmediainfo-devel-0.7.64-1.x86_64.Fedora_19.rpm

Puis on installe les dépendances disponible dans les répositories de bases :

yum install qt-devel git phonon-devel libmediainfo-devel quazip-devel libcurl-devel

Enfin, on installe la dernière version de MediaElch disponible sur Github (1.7 à ce jour)


cd /opt/
git clone https://github.com/Komet/MediaElch.git
cd MediaElch
qmake && make
sudo ln -s /opt/MediaElch/MediaElch /usr/bin/MediaElch
sudo ln -s /opt/MediaElch/desktop/MediaElch.png /usr/share/pixmaps/MediaElch.png
sudo ln -s /opt/MediaElch/desktop/MediaElch.desktop /usr/share/applications

Le binaire sera disponible depuis le lanceur.

Amusez-vous bien.