Configurer SOGo avec une base d’utilisateurs Postfix Admin

Environnement: Debian GNU/Linux 6.0.7 (squeeze) / MySQL 5.1 / Postfix 2.7.1 / Dovecot 1.2.15 / Postfix Admin 2.3.3

SOGo est un serveur de groupware qui a atteint une belle maturité, et dont l’un des gros avantages est de pouvoir s’intégrer dans une architecture de messagerie existante. Voici un petit topo pour installer SOGo sous Debian et configurer l’authentification SOGo sur une base MySQL d’utilisateurs multi-domaines au format Postfix Admin.

Conventions

Dans l’exemple, la base Postfix Admin s’appelle postfix, le user MySQL avec tous les privilèges sur la base est postfixadm, le mot de passe est secret. Les deux domaines configurés sont domaine1.com et domaine2.com. Il faudra modifier ces valeurs en fonction de votre cas, pour le reste ça devrait aller.

Installation des paquets

# en root sur le serveur
 
# ajout des sources
echo '# sogo:' >> /etc/apt/sources.list
echo 'deb http://inverse.ca/debian squeeze squeeze' >> /etc/apt/sources.list
apt-key adv --keyserver keys.gnupg.net --recv-key 0x810273C4
aptitude update
 
# installation
aptitude install sogo sope4.9-gdl1-mysql memcached rpl
 
# suppression des warning de tmpreaper
rpl 'SHOWWARNING=true' 'SHOWWARNING=false' /etc/tmpreaper.conf

Configuration Apache

Ajout des modules Apache

a2enmod proxy
a2enmod proxy_http
a2enmod headers
a2enmod rewrite
# restart apache
/etc/init.d/apache2 restart

Configuration du VirtualHost

Par défaut SOGo est accessible à partir de tous les virtualhost de la machine, et je ne suis pas le seul à ne pas aimer. Je préfère créer un VirtualHost dédié à SOGo.

mv /etc/apache2/conf.d/SOGo.conf /etc/apache2/conf.d/SOGo.conf.off

Créer un VirtualHost /etc/apache2/sites-available/sogo :

<VirtualHost *:80>
   Servername sogo.domaine1.com
   DocumentRoot /usr/lib/GNUstep/SOGo/WebServerResources/
   ErrorLog /var/log/apache2/error.log
   Customlog /var/log/apache2/access_SOGo.log combined
   ServerSignature Off
 
   Alias /SOGo.woa/WebServerResources/ /usr/lib/GNUstep/SOGo/WebServerResources/
   Alias /SOGo/WebServerResources/ /usr/lib/GNUstep/SOGo/WebServerResources/
   AliasMatch /SOGo/so/ControlPanel/Products/(.*)/Resources/(.*) /usr/lib/GNUstep/SOGo/$1.SOGo/Resources/$2
 
   <Directory /usr/lib/GNUstep/SOGo/>
      AllowOverride None
      Order deny,allow
      Allow from all
   </Directory>
 
   <LocationMatch "^/SOGo/so/ControlPanel/Products/.*UI/Resources/.*\.(jpg|png|gif|css|js)">
     SetHandler default-handler
   </LocationMatch>
 
   ProxyRequests Off
   SetEnv proxy-nokeepalive 1
   ProxyPreserveHost On
   ProxyPass /SOGo http://127.0.0.1:20000/SOGo retry=0
 
   <Proxy http://127.0.0.1:20000/SOGo>
     RequestHeader set "x-webobjects-server-port" "80"
     RequestHeader set "x-webobjects-server-name" "sogo.domaine1.com"
     RequestHeader set "x-webobjects-server-url" "http://sogo.domaine1.com"
     RequestHeader set "x-webobjects-server-protocol" "HTTP/1.0"
     RequestHeader set "x-webobjects-remote-host" %{REMOTE_HOST}e env=REMOTE_HOST
     AddDefaultCharset UTF-8
     Order allow,deny
     Allow from all
   </Proxy>
   ## We use mod_rewrite to pass remote address to the SOGo proxy.
   # The remote address will appear in SOGo's log files and in the X-Forward
   # header of emails.
   RewriteEngine On
   RewriteRule ^/SOGo/(.*)$ /SOGo/$1 [env=REMOTE_HOST:%{REMOTE_ADDR},PT]
 
   Redirect permanent /index.html http://sogo.domaine1.com/SOGo
 
</virtualhost>

Activation de la chose :

a2ensite sogo
apache2ctl restart

Configuration MySQL

On crée une vue MySQL sur la base postfix qui va contenir ce que SOGo s’attend à trouver.

mysql -u root -p
USE postfix;
CREATE VIEW  `sogo_users` AS SELECT local_part AS c_uid, username AS c_name, 
PASSWORD AS c_password, name AS c_cn, username AS mail, domain
FROM  `mailbox`;
QUIT

Configuration de SOGo

Le fichier de configuration de SOGo est au format GNUstep, il se trouve ici: /var/lib/sogo/GNUstep/Defaults/.GNUstepDefaults

Plutôt que de l’éditer directement, on utilise la commande defaults

Paramètres globaux :

defaults -u sogo write sogod SOGoTimeZone "Europe/Paris"
defaults -u sogo write sogod SOGoLanguage "French"
defaults -u sogo write sogod SOGoAppointmentSendEMailNotifications YES
defaults -u sogo write sogod SOGoFoldersSendEMailNotifications YES
defaults -u sogo write sogod SOGoACLsSendEMailNotifications YES
defaults -u sogo write sogod NGUseUTF8AsURLEncoding YES
defaults -u sogo write sogod SOGoEnableDomainBasedUID YES
defaults -u sogo write sogod SOGoPasswordChangeEnabled YES
defaults -u sogo write sogod SOGoMailingMechanism smtp
defaults -u sogo write sogod SOGoSMTPServer localhost
defaults -u sogo write sogod SOGoDraftsFolderName  Drafts
defaults -u sogo write sogod SOGoSentFolderName Sent
defaults -u sogo write sogod SOGoTrashFolderName Trash
defaults -u sogo write sogod SOGoIMAPServer localhost
defaults -u sogo write sogod SOGoProfileURL 'mysql://postfixadm:secret@127.0.0.1:3306/postfix/sogo_user_profile'
defaults -u sogo write sogod OCSFolderInfoURL 'mysql://postfixadm:secret@127.0.0.1:3306/postfix/sogo_folder_info'
defaults -u sogo write sogod OCSSessionsFolderURL 'mysql://postfixadm:secret@127.0.0.1:3306/postfix/sogo_sessions_folder'
defaults -u sogo write sogod SOGoCalendarDefaultRoles '(PublicViewer,ConfidentialDAndTViewer)'
defaults -u sogo write sogod SOGoLoginModule Calendar
defaults -u sogo write sogod SOGoVacationEnabled YES
defaults -u sogo write sogod SOGoMailMessageCheck every_5_minutes
defaults -u sogo write sogod SOGoFirstDayOfWeek 1
defaults -u sogo write sogod SOGoSuperUsernames '( "admin@domaine1.com" )'
defaults -u sogo write sogod SOGoMemcachedHost 127.0.0.1

Paramétrage des domaines

Tous les domaines utilisés doivent être déclarés dans SOGo. Attention, il faut que l’id du SOGoUserSources soit différent pour chaque domaine.

defaults -u sogo write sogod domains '{ 
	"domaine1.com" = 
		{SOGoMailDomain = "domaine1.com"; 
		SOGoDraftsFolderName = Drafts; 
		SOGoUserSources = (
			{canAuthenticate = YES; 
			displayName = "Utilisateurs domaine1.com"; 
			id = users1; 
			isAddressBook = YES; 
			type = sql; 
			userPasswordAlgorithm = md5-crypt; 
			LoginFieldNames = ( "c_name" ); 
			viewURL ="mysql://postfixadm:secret@127.0.0.1:3306/postfix/sogo_users"; 
			IMAPLoginFieldName = "mail"; 
			DomainFieldName = "domain" }) 
		;}
	; 
	"domaine2.com" = 
		{SOGoMailDomain = "domaine2.com"; 
		SOGoDraftsFolderName = Drafts; 
		SOGoUserSources = (
			{canAuthenticate = YES; 
			displayName = "Utilisateurs domaine2.com"; 
			id = users2; 
			isAddressBook = YES; 
			type = sql; 
			userPasswordAlgorithm = md5-crypt; 
			LoginFieldNames = ( "c_name" ); 
			viewURL ="mysql://postfixadm:secret@127.0.0.1:3306/postfix/sogo_users"; 
			IMAPLoginFieldName = "mail"; 
			DomainFieldName = "domain" })
		;}
	;
}'
 
/etc/init.d/sogo restart

On vérifie que tout fonctionne en visitant http://sogo.domain1.com

Liens

La doc officielle (en)
Wiki SOGo Debian (en)
Un bel exemple de config, merci les gars ça m’a bien aidé.

No votes yet.
Please wait...

6 réactions sur “Configurer SOGo avec une base d’utilisateurs Postfix Admin”

  1. Maxime

    Merci ça commence à prendre forme, actuellement tout fonctionne sauf l’envoie d’email…
    J’ai passé du temps pour ne plus avoir aucune erreur dans les log, ça devient vraiment très intéressant.

    Il y a également OpenChange qui ne fonctionne pas encore avec Outlook, soit disant que le serveur ne répond pas, bref, encore du temps à passer dessus, mais en gros pour moi 80% du travail est fait et je commence à bien connaître 🙂

    Super 🙂

    No votes yet.
    Please wait...
  2. François

    C’est déjà plus constructif comme remarques. Il n’en reste pas moins que ce tuto ne correspond pas du tout à ton environnement, et que tu le notes 1/5 en râlant parce que ça ne marche pas du premier coup avec Ctrl-C Ctrl-V… Comprends que ça énerve.

    Bon allez, bonne chance pour ta config, et n’oublie pas de me mettre un lien vers ton tuto quand tu auras réussi 😉

    No votes yet.
    Please wait...
  3. Maxime

    J’ai oublié au passage je n’utilise pas postfix, les utilisateurs sont gérer par MySQL ou PostgreSQL

    No votes yet.
    Please wait...
  4. Maxime

    Faut pas le prendre si mauvais que ça, mais par exemple, dans la conf tu parle de sieve, et sieve n’est même pas installé de base et n’ai mentionné nul part, donc pourquoi configurer un service qui ne tourne pas de base et qu’on en parle même pas ?

    defaults -u sogo write sogod SOGoSieveScriptsEnabled YES
    defaults -u sogo write sogod SOGoSieveServer sieve://localhost:4190

    netstat -anlptu ne m’affiche aucun port 4190 ou 2000 utilisable par sieve, j’en conclu que ça va foirer c’est logique ?

    Si j’ai posté un message sur ce billet, c’est tout simplement que ça ma quand même été utile, car je regarde un tuto à droite, à gauche, je rassemble ce qui fonctionne POUR MOI, jusqu’à avoir ma propre procédure qui fonctionne impec quoi.

    Je tourne sous wheezy, et, par exemple l’utilisation de GNUstep n’est plus la même, avec tes commandes ça ne fonctionne pas, j’ai donc préférer modifier /etc/sogo/sogo.conf à la mimine.

    Actuellement ça « fonctionne » il me reste à installer un serveur IMAP, pour le reste c’est OK.

    No votes yet.
    Please wait...
  5. François

    @maxime
    Si tu avais lu ne serait-ce que le titre de l’article avant de copier-coller tu aurais pu voir qu’il te faut une base d’utilisateurs Postfix Admin. Essaie de comprendre ce que tu fais, tu verras ça ira mieux, et tu seras plus reconnaissant envers ceux qui prennent de leur temps pour écrire des tutos…

    No votes yet.
    Please wait...
  6. Maxime

    Salut,

    C’est vraiment domâge que mettre la moitié des choses comme la plus part des tuto sur le net :
    la base mysql, ça ne fonctionne tout simplement pas en faisant un copier coller de ce que tu indique plus haut.

    Il faut donc créer à la mimine la table SQL en rapport avec ta commande, et quand on connait pas, bah on peut pas avancer…

    No votes yet.
    Please wait...

Laisser une réponse