Installare un ambiente Groupware integrato in Samba4

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Document-page-setup.png Attenzione: questo articolo è ancora incompleto e in fase di scrittura da parte del suo autore.

Sentitevi liberi di contribuire, proponendo modifiche alla guida tramite l'apposita pagina di discussione, in modo da non interferire con il lavoro portato avanti sulla voce. Per altre informazioni si rimanda al template.



Edit-clear-history.png Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.

Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione.


Debian-swirl.png Versioni Compatibili

Debian 7 "wheezy"

Introduzione

Con il solo utilizzo di strumenti opensource possiamo installare e configurare un ambiente Groupware che sostituisca in tutto e per tutto Microsoft Exchange e ne fornisca tutte le funzionalità.
Gli strumenti che useremo sono i seguenti:

  • Samba4: per configurare un ambiente compatibile con Active Directory per la gestione degli utenti e delle group policy
  • Openchange: per avere il layer MAPI utilizzato da Outlook per connettersi ai server Microsoft Exchange
  • Sogo: il groupware sostitutivo di Exchange
  • Dovecot: un server IMAP in appoggo al groupware Sogo
  • iGestis: un'interfaccia che semplificherà il lavoro di creazione e gestione degli utenti

Prerequisiti

Per seguire questa guida è necessario disporre di un ambiente Samba4 configurato come controller di dominio Active Directory. Nel corso della guida faremo riferimento alla configurazione presentata qui: Samba e OpenLDAP: creare un controller di dominio Active Directory con Debian Wheezy
Si sconsiglia di proseguire senza aver prima completato la configurazione della guida indicata.

Occorre prima di tutto aggiungere il repository SoGo al nostro sources list. Il pacchetto SoGo è presente anche nei repository ufficiali di Debian, ma manca il connettore ActiveSync per Outlook, che utilizzeremo per sincronizzare i client Microsoft.

# nano /etc/apt/sources.list
# SoGo OpenChange Repository
deb http://inverse.ca/debian wheezy wheezy
deb-src http://inverse.ca/debian wheezy wheezy

Quindi aggiorniamo la cache di apt e installiamo la chiave del repository:

# apt-key adv --keyserver keys.gnupg.net --recv-key 0x810273C4
# apt-get update

Installazione di OpenChange

Possiamo ora installare OpenChange. OpenChange fornisce un layer MAPI per permettere ai client Microsoft Outlook 2003/2007/2010/2013 di connettersi a un server Groupware SoGo utilizzando direttamente il protocollo proprietario Exchange. Questo permette di evitare costi aggiuntivi per l'acquisto di un connettore MAPI di terze parti. Se nella nostra organizzazione non sono presenti client Outlook possiamo saltare questo capitolo.
Installiamo quindi OpenChange:

# apt-get install openchangeserver openchangeproxy openchange-ocsmanager openchange-rpcproxy

Quindi effettuiamo il provisioning di Samba4 con lo schema di OpenChange:

# openchange_provision

Creiamo il database per OpenChange:

# openchange_provision --openchangedb

Infine abilitiamo in Samba il protocollo MAPI:

# nano /etc/samba/smb.conf
# Abilito MAPI
dcerpc endpoint servers = +epmapper, +mapiproxy
dcerpc_mapiproxy:server = true
dcerpc_mapiproxy:interfaces = exchange_emsmdb, exchange_nsp, exchange_ds_rfr

Installazione di SoGo

Installiamo i pacchetti necessari:

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

Se abbiamo installato OpenChange, occorre installare anche il connettore per SoGo:

# apt-get install sogo-openchange

Creiamo un database MySQL per SoGo:

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

Sostituiamo il file di configurazione di SoGo con il seguente:

# cp /etc/sogo/sogo.conf /etc/sogo/sogo.conf.old
# cat /dev/null > /etc/sogo/sogo.conf
# nano /etc/sogo/sogo.conf

Attenzione: all'interno del file di configurazione vanno inserite le password corrette per l'utente MySQL sogo e per l'utente Administrator di Samba.

{
  /* *********************  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 = English;
  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;
}

Modifichiamo la configurazione di Apache2:

# nano /etc/apache2/conf.d/SOGo.conf
# RequestHeader set "x-webobjects-server-port" "443"
# RequestHeader set "x-webobjects-server-name" "yourhostname"
# RequestHeader set "x-webobjects-server-url" "https://yourhostname"

Abilitiamo i moduli necessari in Apache:

# a2enmod proxy
# a2enmod proxy_http
# a2enmod headers
# a2enmod rewrite
# a2dismod reqtimeout

Riavviamo Apache e gli altri servizi:

# /etc/init.d/apache2 restart
# /etc/init.d/samba4 restart
# /etc/init.d/sogo restart

Verifichiamo che la pagina di login di SoGo sia raggiungibile:

http://IP.DEL.NOSTRO.SERVER/SOGo

Non proviamo a effettuare il login, dato che gli utenti vanno ancora configurati.

Abilitare SSL

Iniziamo con abilitare il supporto SSL in Apache:

# a2enmod ssl
# a2ensite default-ssl
# /etc/init.d/apache2 restart

Verifichiamo di nona vere problemi con i certificati andando all'indirizzo:

https://domain_name_of_your_server/rpc/rpcproxy.dll

Installazione di Dovecot

Aggiungiamo innanzitutto un utente e un gruppo per Dovecot:

# 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

Quindi installiamo Dovecot:

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

Creiamo un file di configurazione:

# nano /etc/dovecot/local.conf

di contenuto:

protocols = imap sieve
 
mail_home = /var/vmail/sieve/%d/%u
mail_location = maildir:~/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/mail/%u
}
 
passdb {
    driver = ldap
    args = /etc/dovecot/dovecot-ldap.conf
}
 
passdb {
  driver = static
  args = nopassword=y host=127.0.0.1
}
 
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
}

Creiamo anche il file di configurazione per LDAP:

# nano /etc/dovecot/dovecot-ldap.conf

stando attenti a sostituire la password con la nostra password di Samba e il dominio con il nostro dominio di Samba:

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

Proteggiamo il file:

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

e riavviamo Dovecot:

# /etc/init.d/dovecot restart

Installazione di Postfix

L'installazione di Postfix rimuoverà il pacchetto exim. Procediamo lasciando le opzioni di default:

# apt-get install postfix postfix-ldap

Quindi creiamo un nuovo file di configurazione:

# cp /etc/postfix/main.cf /etc/postfix/main.cf.old
# cat /dev/null > /etc/postfix/main.cf
# nano /etc/postfix/main.cf

stando attenti a modificare correttamente il nome del server e il dominio:

smtpd_banner = $myhostname ESMTP $mail_name (Debian)
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 = mioserver.domain.local
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = mioserver.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

Aggiungiamo le seguenti righe al file master di Postfix:

# nano /etc/postfix/master.cf
dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${user}

Impostiamo un connettore per LDAP:

# nano /etc/postfix/ldap_aliases.cf

stando attenti a modificare correttamente le password e il dominio:

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

Proteggiamo il file e riavviamo Postfix:

# chmod 700 /etc/dovecot/dovecot-ldap.conf
# /etc/init.d/postfix restart

Installazione di iGestis

iGestis è un tool che ci permetterà di amministrare gli utenti del nostro groupware in maniera agevole da un'interfaccia web. Aggiungiamo quindi il repository di iGestis:

# wget http://iabsis.com/uploaded_content/igestis.list -O /etc/apt/sources.list.d/igestis.list
# wget http://open.iabsis.com/open.iabsis.com.asc -O- | apt-key add -
# apt-get update

Quindi installiamo iGestis rispondendo come segue alle domande dell'installer:

# apt-get install igestis igestis-openchange
  • Choose the wanted authentication method : Samba4
  • Choose the admin account name : administrator
  • Specify the uris for the directory : ldapi://%2Fvar%2Flib%2Fsamba%2Fprivate%2Fldapi (lasciare così)
  • Specify the directory base tree : you domain (example in the context : domain.local)
  • Specify the directory admin account for the directory : Administrator@domain.local
  • Please specify the admin password for the directory : password di Samba4
  • Create a user in iGestis when present in the directory ? Yes
  • Configure database for igestis with dbconfig-common? Yes
  • Password of the database’s administrative user: Password di root di MySQL
  • MySQL application password for igestis: vuoto
  • Web server to reconfigure automatically : Apache2

Infine forziamo il valore seguente nella configurazione di iGestis:

# nano /etc/igestis/ConfigIgestisGlobalVars.php
const LDAP_USER_RDN = "cn=%username%";