17 Apr 2017

Openchange sur un serveur Debian ou Ubuntu

Openchange sur un serveur Debian ou Ubuntu

Il semblerait que OpenChange ne soit plus maintenu depuis Janvier 2016, je conseille plutôt d’utiliser ActiveSync supporté par Outlook depuis la version 2013. Edit du 12 sept. 2017 : Ce tuto sera très bientôt mis à jour.

Introduction

La suite Samba4/Openchange promet de nous fournir un contrôleur complet Active Directory(c) ainsi qu’une alternative à un serveur Microsoft Exchange. Grâce au portage du protocole MAPI, Outlook peut désormais se connecter de manière transparente à un serveur Linux en permettant la synchronisation et les partages des calendriers, contacts, tâches et mails.

Tout ça est possible grâce aux composants suivants :

  • Samba4 permet désormais de fournir une alternative complète à Microsoft Active Directory, avec un contrôleur de domaine et la gestion des stratégies de groupe.
  • Openchange fournit la couche MAPI utilisée par Outlook pour la connexion à un serveur Exchange.
  • Sogo gère la base de données dans laquelle les informations des utilisateurs seront stockées. Il fournit également une excellente interface web.
  • Dovecot est un serveur IMAP qui permettra à Sogo d’afficher les mails pour un utilisateur donné.
  • iGestis est une interface utilisateur qui permet de facilement créer des comptes et est synchronisable avec un annuaire tel que OpenLDAP ou Samba4.

Avant d’aller plus loin, nous vous conseillons de voir le chapitre des problèmes connus et rencontrés pour que vous ne soyez pas déçu de certaines limitations actuelles.

Machine virtuelle

Essayez notre machine virtuelle prête à l’emploi, désormais disponible sur notre site dédié http://os.igestis.org/

Pré-requis

Avant toute chose, vous devrez configurer votre serveur avec une adresse IP statique via la commande nano /etc/network/interfaces puis coller le contenu suivant à adapter en fonction de votre environnement :

auto eth0
iface eth0 inet static
        address 192.168.1.100
        netmask 255.255.255.0
        gateway 192.168.1.1

Vérifiez ensuite que votre nom d’hôte soit un FQDN, testez avec hostname -d. Si la commande ne vous sort rien, éditez le fichier avec nano /etc/hosts et vérifiez que vous ayez la ligne telle que présentée ici (remplacez server par le nom de votre serveur et domain.local par le nom de domaine souhaité) :

127.0.1.1       server.domain.local server

Depuis peu, le dépôt inverse est devenu payant. Il faudra aquérir un contrat de support pour pouvoir continuer à utiliser leur dépôt. Je fourni cependant une version testée sous Debian avec nos dépôts.

wget http://open.iabsis.com/iabsis.list -O /etc/apt/sources.list.d/iabsis.list
Décommentez la ligne testing avec @nano wget http://open.iabsis.com/open.iabsis.com.asc -O- apt-key add -@
deb http://open.iabsis.com main testing

Ajoutez ensuite le certificat du dépôt :

wget http://open.iabsis.com/open.iabsis.com.asc -O- | apt-key add -

N’oubliez pas d’actualiser l’index des paquets en tapant :

apt-get update

Installation de Samba4

Installez les paquets Samba4 depuis le dépôt ainsi que d’autres petits paquets utiles.

apt-get install acl attr samba

Supprimez la configuration actuelle créé par le paquet Samba4 car le fichier smb.conf généré n’est pas formaté comme il faut :

rm /etc/samba/smb.conf
rm -R /var/lib/samba/private/*
rm -R /var/lib/samba/sysvol/*

Provisionnez maintenant à nouveau Samba4, replacez DOMAIN et domain.local par les valeurs de votre choix.

samba-tool domain provision --domain=DOMAIN \
--dns-backend=SAMBA_INTERNAL --server-role=dc \
--function-level=2008_R2 --use-xattr=yes \
--use-rfc2307 --realm=domain.local

Une fois terminé, le script vous donnera les informations recapitulatives suivantes :

Once the above files are installed, your Samba4 server will be ready to use
Server Role:           active directory domain controller
Hostname:              server
NetBIOS Domain:        DOMAIN
DNS Domain:            domain.local
DOMAIN SID:            S-1-5-21-1716394670-2609614925-1081274792

Changez le mot de passe du compte Administrator avec la commande suivante :

samba-tool user setpassword Administrator
samba-tool user setexpiry Administrator --noexpiry

Modifiez au besoin le serveur DNS utilisé par Samba4 en modifiant la ligne suivante avec nano /etc/samba/smb.conf. Par exemple.

dns forwarder = 8.8.8.8

Changez vos DNS pour utiliser Samba4 comme server DNS principal à l’aide de la commande nano /etc/resolv.conf et assurez vous d’avoir des lignes similaires (en remplaçant domain.local par le domaine choisi pendant la configuration de Samba4) :

domain domain.local
search domain.local
nameserver 127.0.0.1

Redémarrez maintenant Samba4.

/etc/init.d/samba restart

Si vous arrivez jusqu’ici, bravo, vous avez configuré Samba4 en tant que contrôleur de domaine.

Informations de sécurité

Si vous souhaitez supprimer les restrictions des mots de passe nécessitant au moins une majuscule, une minuscule et un chiffre, tapez la commande suivante :

samba-tool domain passwordsettings set --complexity=off

Si vous souhaitez supprimer la restriction sur la longueur minimum d’un mot de passe, tapez la commande suivante :

samba-tool domain passwordsettings set --min-pwd-length=1

Si vous souhaitez désactiver l’expiration des mots de passe :

samba-tool domain passwordsettings set --max-pwd-age=0

Installation de OpenChange

Cette section ne fonctionne apparemment plus car le projet OpenChange est abandonné ! Passez directement à la configuration de SOGo.

Il suffit maintenant d’installer les paquets pour OpenChange :

apt-get install openchangeserver sogo-openchange openchangeproxy \
openchange-ocsmanager openchange-rpcproxy python-mysqldb

Il faut maintenant provisionner Samba4 avec les schémas de Openchange :

openchange_provision --standalone

Puis créer une base interne de OpenChange :

openchange_provision --openchangedb

Ensuite, il faut déclarer des informations dans le fichier de configuration de Samba4 à l’aide de la commande

nano /etc/samba/smb.conf

Et ajoutez les lignes ci-dessous dans la section [global] du fichier de configuration

dcerpc endpoint servers = +epmapper, +mapiproxy
dcerpc_mapiproxy:server = true
dcerpc_mapiproxy:interfaces = exchange_emsmdb, exchange_nsp, exchange_ds_rfr

Installation de Sogo

Sogo est le service nécessaire pour le “backend” de OpenChange. Installez-le à l’aide de la commande suivante :

apt-get install sogo sope4.9-gdl1-mysql mariadb-server sogo-activesync

Créez un mot de passe aléatoire :

date +%s | sha256sum | base64 | head -c 10 ; echo

Créez la base de données SOGo dans MySQL en remplaçant Password par le mot de passe aléatoire :

mysql -uroot -p
create database sogo;
create user 'sogo'@'localhost' identified by 'Password';
grant all privileges on sogo.* to 'sogo'@'localhost';

Modifiez ensuite le fichier de configuration de SOGo avec la commande :

nano /etc/sogo/sogo.conf

Décommentez les lignes suivantes pour faire ressembler à l’exemple ci-dessous. N’oubliez pas de corriger le mot de passe Passw0rd.

{
  /* *********************  Main SOGo configuration file  **********************
   *                                                                           *
   * Since the content of this file is a dictionary in OpenStep plist format,  *
   * the curly braces enclosing the body of the configuration are mandatory.   *
   * See the Installation Guide for details on the format.                     *
   *                                                                           *
   * C and C++ style comments are supported.                                   *
   *                                                                           *
   * This example configuration contains only a subset of all available        *
   * configuration parameters. Please see the installation guide more details. *
   *                                                                           *
   * ~sogo/GNUstep/Defaults/.GNUstepDefaults has precedence over this file,    *
   * make sure to move it away to avoid unwanted parameter overrides.          *
   *                                                                           *
   * **************************************************************************/

  /* Database configuration (mysql:// or postgresql://) */
  SOGoProfileURL = "mysql://sogo:Passw0rd@localhost:3306/sogo/sogo_user_profile";
  OCSFolderInfoURL = "mysql://sogo:Passw0rd@localhost:3306/sogo/sogo_folder_info";
  OCSSessionsFolderURL = "mysql://sogo:Passw0rd@localhost:3306/sogo/sogo_sessions_folder";

  /* Mail */
  SOGoDraftsFolderName = Drafts;
  SOGoSentFolderName = Sent;
  SOGoTrashFolderName = Trash;
  SOGoIMAPServer = 127.0.0.1:143;
  SOGoSieveServer = sieve://127.0.0.1:4190;
  SOGoSMTPServer = 127.0.0.1;
  SOGoMailDomain = domain.local;
  SOGoMailingMechanism = smtp;
  //SOGoForceExternalLoginWithEmail = NO;
  //SOGoMailSpoolPath = /var/spool/sogo;
  //NGImap4ConnectionStringSeparator = "/";

  /* Notifications */
  //SOGoAppointmentSendEMailNotifications = NO;
  //SOGoACLsSendEMailNotifications = NO;
  //SOGoFoldersSendEMailNotifications = NO;

  /* Authentication */
  //SOGoPasswordChangeEnabled = YES;

  /* LDAP authentication example */
  //SOGoUserSources = (
  //  {
  //    type = ldap;
  //    CNFieldName = cn;
  //    UIDFieldName = uid;
  //    IDFieldName = uid; // first field of the DN for direct binds
  //    bindFields = (uid, mail); // array of fields to use for indirect binds
  //    baseDN = "ou=users,dc=acme,dc=com";
  //    bindDN = "uid=sogo,ou=users,dc=acme,dc=com";
  //    bindPassword = qwerty;
  //    canAuthenticate = YES;
  //    displayName = "Shared Addresses";
  //    hostname = ldap://127.0.0.1:389;
  //    id = public;
  //    isAddressBook = YES;
  //  }
  //);

  /* LDAP AD/Samba4 example */
  SOGoUserSources = (
	{
	  type = ldap;
	  CNFieldName = cn;
	  UIDFieldName = sAMAccountName;
	  baseDN = "CN=users,dc=domain,dc=local";
	  bindDN = "Administrator@domain.local";
	  bindFields = (sAMAccountName, mail);
	  bindPassword = "Passw0rd";
	  canAuthenticate = YES;
	  displayName = "Public";
	  hostname = ldap://127.0.0.1:389;
	  filter = "mail = '*'";
	  id = directory;
	  isAddressBook = YES;
	}
  );


  /* SQL authentication example */
  /*  These database columns MUST be present in the view/table:
   *    c_uid - will be used for authentication -  it's the username or username@domain.tld)
   *    c_name - which can be identical to c_uid -  will be used to uniquely identify entries
   *    c_password - password of the user, plain-text, md5 or sha encoded for now
   *    c_cn - the user's common name - such as "John Doe"
   *    mail - the user's mail address
   *  See the installation guide for more details
   */
  //SOGoUserSources =
  //  (
  //    {
  //      type = sql;
  //      id = directory;
  //      viewURL = "postgresql://sogo:sogo@127.0.0.1:5432/sogo/sogo_view";
  //      canAuthenticate = YES;
  //      isAddressBook = YES;
  //      userPasswordAlgorithm = md5;
  //    }
  //  );

  /* Web Interface */
  SOGoPageTitle = SOGo;
  SOGoVacationEnabled = YES;
  SOGoForwardEnabled = YES;
  SOGoSieveScriptsEnabled = YES;
  //SOGoMailAuxiliaryUserAccountsEnabled = YES;
  //SOGoTrustProxyAuthentication = NO;

  /* General */
  SOGoLanguage = French;
  SOGoTimeZone = Europe/Paris;
  SOGoCalendarDefaultRoles = (
	PublicDAndTViewer,
	ConfidentialDAndTViewer
  );
  SOGoSuperUsernames = (Administrator); // This is an array - keep the parens!
  SxVMemLimit = 384;
  WOPidFile = "/var/run/sogo/sogo.pid";
  SOGoMemcachedHost = 127.0.0.1;

  /* Debug */
  //SOGoDebugRequests = YES;
  //SoDebugBaseURL = YES;
  //ImapDebugEnabled = YES;
  //LDAPDebugEnabled = YES;
  //PGDebugEnabled = YES;
  //MySQL4DebugEnabled = YES;
  //SOGoUIxDebugEnabled = YES;
  //WODontZipResponse = YES;
  //WOLogFile = /var/log/sogo/sogo.log;
}

Vous devez maintenant configurer Apache2 en utilisant la commande :

nano /etc/apache2/conf.d/SOGo.conf

Et commentez les lignes suivantes avec un dièse :

# RequestHeader set "x-webobjects-server-port" "443"
# RequestHeader set "x-webobjects-server-name" "yourhostname"
# RequestHeader set "x-webobjects-server-url" "https://yourhostname"

Activez les modules nécessaires au bon fonctionnement de Apache2 :

a2enmod proxy
a2enmod proxy_http
a2enmod headers
a2enmod rewrite
a2dismod reqtimeout

Redémarrez Apache2 :

service apache2 restart
service samba4 restart
service sogo restart

Vous pouvez maintenant vérifier depuis un autre ordinateur en utilisant l’adresse IP du serveur, comme par exemple :

http://ip_de_votre_serveur/SOGo

Inutile de tenter de s’authentifier pour l’instant, nous testerons plus tard.

Activer ActiveSync

Il est possible d’utiliser ActiveSync, pour cela, il suffit d’aller décommenter les lignes suivantes avec la commande @nano /etc/apache2/conf.d/SOGo.conf@

ProxyPass /Microsoft-Server-ActiveSync \
 http://127.0.0.1:20000/SOGo/Microsoft-Server-ActiveSync \
 retry=60 connectiontimeout=5 timeout=360

Installation de Dovecot

Ajoutez l’utilisateur et le groupe vmail :

groupadd -g 5000 vmail
useradd -m -u 5000 -g 5000 -s /bin/bash -d /var/vmail vmail
mkdir -p /var/vmail
chown vmail:vmail -R /var/vmail

Installez Dovecot :

apt-get install dovecot-imapd dovecot-managesieved dovecot-sieve dovecot-ldap

Configurez Dovecot en créant un fichier de configuration à l’aide de la commande :

nano /etc/dovecot/local.conf

Puis coller le texte suivant :

protocols = imap sieve

mail_home = /var/vmail/sieve/%d/%u
mail_location = maildir:~/
mail_uid = vmail
mail_gid = vmail
first_valid_uid = 107
first_valid_gid = 8
disable_plaintext_auth = no

service auth {
  unix_listener auth-userdb {
	mode = 0600
	user = vmail
	group = vmail
  }

}

userdb {
	driver = ldap
	args = /etc/dovecot/dovecot-ldap.conf
}

userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/vmail/%u
}

passdb {
	driver = ldap
	args = /etc/dovecot/dovecot-ldap.conf
}

passdb {
  driver = static
  args = nopassword=y allow_nets=127.0.0.1/32
}

protocol imap {
  mail_plugins = quota imap_quota autocreate
}

service managesieve-login {
  inet_listener sieve {
	port = 4190
  }
}

service managesieve {
}

protocol sieve {
}

plugin {
  quota = maildir:User quota
  quota_rule = *:storage=0

  sieve = /var/vmail/sieve/%d/%u/sieve-script
  sieve_global_path = /var/vmail/sieve/default.sieve
  sieve_storage = /var/vmail/sieve/%d/%u

  autocreate = Trash
  autocreate2 = Spam
  autocreate3 = Sent
  autocreate4 = Drafts
  autosubscribe = Trash
  autosubscribe2 = Spam
  autosubscribe3 = Sent
  autosubscribe4 = Drafts

}

protocol lda {
  postmaster_address = administrator@domain.local
  mail_plugins = sieve
  auth_socket_path = /var/run/dovecot/auth-userdb
}

Créer également le fichier LDAP avec :

nano /etc/dovecot/dovecot-ldap.conf

Puis collez le contenu en remplaçant bien sur le Password :

uris = ldapi://%2Fvar%2Flib%2Fsamba%2Fprivate%2Fldapi
dn = "Administrator@domain.local"
dnpass = "Passw0rd"
sasl_bind = no
tls = no
ldap_version = 3
deref = never
scope = subtree
base = cn=Users,dc=domain,dc=local
auth_bind = yes
user_filter = (&(objectClass=user)(sAMAccountName=%u))
user_attrs = sAMAccountName=user,userPassword=password,=mail=maildir:/var/vmail/%Ld/%n, =home=/var$
pass_filter = (&(objectClass=user)(sAMAccountName=%u))
pass_attrs = sAMAccountName=user,userPassword=password

Securisez le fichier :

chmod 700 /etc/dovecot/dovecot-ldap.conf

Redémarrez Dovecot :

service dovecot restart

Installation de Postfix

Installez Postfix la gestion de la livraison des mails :

apt-get install postfix postfix-ldap

Laissez comme d’habitude les options par défaut, puis modifiez le fichier avec :

nano /etc/postfix/main.cf

Et coller l’exemple suivant :

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no
readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = ubuntu.domain.local
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = ubuntu.domain.local, localhost.domain.local, , localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

virtual_alias_maps = ldap:/etc/postfix/ldap_aliases.cf
virtual_mailbox_domains = virtual.domain.local
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

Modifier le fichier avec :

nano /etc/postfix/master.cf

Et ajoutez la ligne suivante à la fin :

dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${user}

Créez le fichier avec :

nano /etc/postfix/ldap_aliases.cf

Et collez le contenu suivant :

server_host = localhost
search_base = cn=Users,dc=domain,dc=local
query_filter = (mail=%s)
result_attribute = sAMAccountName
result_format = %s@virtual.domain.local
bind = yes
bind_dn = Administrator@domain.local
bind_pw = Passw0rd
start_tls = no
version = 3

Securisez le fichier :

chmod 700 /etc/dovecot/dovecot-ldap.conf

Redémarrez ensuite Postfix :

service postfix restart

Installation d’iGestis (optionnel)

Ajoutez le dépôt pour iGestis :

wget http://open.iabsis.com/igestis.list -O /etc/apt/sources.list.d/igestis.list

Installez ensuite le certificat pour la signature du dépôt :

wget http://open.iabsis.com/open.iabsis.com.asc -O- | apt-key add -

N’oubliez pas d’actualiser l’index des paquets avec la commande :

apt-get update

Et installez iGestis.

apt-get install igestis igestis-openchange

Répondez aux questions comme il suit :

* Choose the wanted authentication method : *Samba4*
* Choose the admin account name : *administrator*
* Specify the uris for the directory : *ldapi://%2Fvar%2Flib%2Fsamba%2Fprivate%2Fldapi* (keep as is)
* Specify the directory base tree : votre domaine (exemple dans ce contexte : *domain.local*)
* Specify the directory admin account for the directory : *Administrator@domain.local*
* Please specify the admin password for the directory : Your Administrator password choosed during the Samba4 provision
* Create a user in iGestis when present in the directory ? Prefered Yes
* Configure database for igestis with dbconfig-common? Yes
* Password of the database's administrative user: Votre mot de passe mysql
* MySQL application password for igestis: Laissez vide pour un mot de passe aléatoire
* Web server to reconfigure automatically : Laissez cocher *apache2*

Ajoutez valeur personnalisées dans le fichier de configuration :

nano /etc/igestis/config.ini

Et changer la ligne pour avoir (reprenez la ligne telle quelle) :

LDAP_USER_RDN = "cn=%username%";
USERNAME_FORMAT = "^([a-z_][a-z0-9_]{0,30})$"
PASSWORD_FORMAT = "(?=^.{8,255}$)((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*"

Création de vos premiers compte

Désormais votre serveur est prêt à opérer. Vous pouvez maintenant créer vos utilisateurs.

Accéder à iGestis

http://ip_de_votre_serveur/igestis

Identifiez-vous avec l’utilisateur administrator sur iGestis et le mot de passe précédemment créé. Rendez-vous dans le menu Administration, Mes sociétés, Ajouter une nouvelle société (ne faire que la première fois).

Rendez-vous ensuite dans le menu Contacts, Employés, puis Ajouter un nouvel employé. Saisissez les mêmes identifiants que précédemment. En faisant cette action, vous allez créer un lien entre les deux comptes. N’oubliez pas de saisir une adresse mail afin que cette information soit renseignée correctement dans votre client mail.

Configuration d’un client sous Windows 7 avec Outlook

  • Ouvrez Outlook et suivez l’assistant. Dans la première étape, cochez Configurer manuellement les paramètres du serveur ou les types de serveurs supplémentaires, puis cliquez sur Suivant >.
  • Cochez ensuite Microsoft Exchange ou un service compatible et Suivant >.
  • Dans le champs Serveur :, tapez l’adresse IP de votre serveur.
  • Dans le champs Nom d’utilisateur, tapez votre nom d’utilisateur.
  • Cliquez sur Paramètres supplémentaires, onglet Connexion et cochez Se connecter à Microsoft Exchange avec HTTP.
  • Cliquez sur Paramètres proxy Exchange, puis dans la ligne http:// tapez simplement l’adresse de votre serveur. Cochez ou non se connecter en utilisant SSL uniquement suivant si vous avez configuré un certificat.
  • Validez ensuite toutes les dernières étapes.

Tags: