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.
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 :
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.
Essayez notre machine virtuelle prête à l’emploi, désormais disponible sur notre site dédié http://os.igestis.org/
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 :
N’oubliez pas d’actualiser l’index des paquets en tapant :
apt-get update
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 :
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.
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
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
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 :
Inutile de tenter de s’authentifier pour l’instant, nous testerons plus tard.
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
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
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
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]))^.*"
Désormais votre serveur est prêt à opérer. Vous pouvez maintenant créer vos utilisateurs.
Accéder à 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.