Outils personnels

SOGo : installation sur CentOS-MariaDB-Postfix-Dovecot-PostfixAdmin : Différence entre versions

De wikiGite

Ligne 667 : Ligne 667 :
  
 
<syntaxhighlight lang=bash enclose="div">
 
<syntaxhighlight lang=bash enclose="div">
mysql -u root -p
+
mysql -u root -p postfix
 
</syntaxhighlight>
 
</syntaxhighlight>
  MariaDB> 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`;
+
  MariaDB> 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`;
  
 
Le reste des tables sera créé par SOGo.
 
Le reste des tables sera créé par SOGo.
  
La configuration du virtualhost Apache est dans /etc/httpd/conf.d/SOGo.conf (fichier d'exemple où tout est commenté). Modifier "yourhostname" par nom de vhost souhaité.
+
=== [TEMP] Ajouter des alias expéditeurs à un compte ===
 +
Solution temporaire en attendant que Sogo le gère lui-même.
 +
Modifier la table "mailbox" :
 +
<syntaxhighlight lang=bash enclose="div">
 +
mysql -u root -p postfix
 +
</syntaxhighlight>
 +
MariaDB> alter table mailbox add mail_alias1 varchar(255) after username;
 +
MariaDB> alter table mailbox add mail_alias2 varchar(255) after mail_alias1;
 +
MariaDB> alter table mailbox add mail_alias3 varchar(255) after mail_alias2;
 +
MariaDB> alter table mailbox add mail_alias4 varchar(255) after mail_alias3;
  
 +
Modifier la vue :
 +
MariaDB> DROP VIEW `sogo_users`;
 +
MariaDB> 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, mail1 AS mail_alias1, mail2 AS mail_alias2, mail3 AS mail_alias3, mail4 AS mail_alias4, domain FROM  `mailbox`;
 +
 +
Dans /etc/sogo/sogo.conf, ajouter la ligne :
 +
MailFieldNames = ("mail1", "mail2", "mail3", "mail4");
 +
entre "LoginFieldNames" et "viewURL" du bloc "domain" (voir configuration Sogo ci-dessous).
 +
 +
 +
=== Sogo ===
 
A l'intérieur de la première accolade "{", décommenter et modifier/ajouter :
 
A l'intérieur de la première accolade "{", décommenter et modifier/ajouter :
 
  SOGoTimeZone = "Europe/Paris";
 
  SOGoTimeZone = "Europe/Paris";
Ligne 736 : Ligne 755 :
  
 
Créer un user "admin", admin Sogo (SOGoSuperUsernames), qui partagera des dossiers mails, agenda et carnet d'adresses globaux.
 
Créer un user "admin", admin Sogo (SOGoSuperUsernames), qui partagera des dossiers mails, agenda et carnet d'adresses globaux.
= Apache =
+
=== Apache ===
Le RPM sogo a créé un fichier /etc/httpd/conf.d/SOGo.conf. Celui-ci intercepte une URL du type "https://monserveur.domain.com/SOGo".
+
Le RPM sogo a créé un fichier /etc/httpd/conf.d/SOGo.conf (fichier d'exemple où tout est commenté). Modifier "yourhostname" par le nom de vhost souhaité.
 +
 
 +
Ce fichier intercepte une URL du type "https://monserveur.domain.com/SOGo".
  
 
Problème, avec cette configuration, si on accède à "https://monserveur.domain.com", on tombe sur la page par défaut d'Apache.
 
Problème, avec cette configuration, si on accède à "https://monserveur.domain.com", on tombe sur la page par défaut d'Apache.

Version du 17 mars 2016 à 10:34

Système

installer une Centos6.x minimale, puis :

yum update
yum install screen wget bash-completion man

Désactiver iptables et selinux

service iptables stop
service ip6tables stop
chkconfig --del iptables
chkconfig --del ip6tables
setenforce 0

et dans /etc/sysconfig/selinux modifier :

SELINUX=disabled

Installer MariaDB Remplacer_MySQL_par_MariaDB_sur_CentOS6

Déclarer les dépôts complémentaires Dépôts_complémentaires

Installer les paquets nécessaires:

yum install --enablerepo=remi httpd php php-mysql php-mbstring php-imap
yum install postfix dovecot dovecot-mysql dovecot-pigeonhole cyrus-sasl-devel cyrus-sasl-sql

Postfix - PostfixAdmin

Vérifier la dernière version de PostfixAdmin sur http://sourceforge.net/projects/postfixadmin/files/

wget http://sourceforge.net/projects/postfixadmin/files/latest/download -O postfixadmin-2.92.tar.gz
tar -xvf postfixadmin-2.92.tar.gz
mv postfixadmin-2.92 /usr/share/postfixadmin
chown -R apache.apache /usr/share/postfixadmin/
# Pour vacation.pl :
yum install --enablerepo=epel perl-MailTools perl-MIME-EncWords perl-Email-Valid perl-MIME-Charset perl-Test-Pod perl-TimeDate perl-Mail-Sender perl-Log-Log4perl perl-Log-Dispatch perl-DBD-MySQL

Configurer le mail store (répertoire des boîtes mail)

mkdir /home/vmail
chmod 770 /home/vmail
useradd -r -u 101 -g mail -d /home/vmail -s /sbin/nologin -c "Virtual mailbox" vmail
chown vmail:mail /home/vmail

Paramétrer Apache

vi /etc/httalias /mailadmin /usr/share/postfixadmin
<Directory "/usr/share/postfixadmin">
  AllowOverride AuthConfig
</Directory>pd/conf.d/postfixadmin.conf
service httpd restart

Créer la base de données

mysql -u root -p # par défaut root n'a pas de mot de passe
MariaDB> CREATE DATABASE postfix;
MariaDB> CREATE USER postfix@localhost IDENTIFIED BY 'mysql_postfix_password';
MariaDB> GRANT ALL PRIVILEGES ON postfix.* TO postfix@localhost;

Configuration

Configuration de PostfixAdmin

cd /usr/share/postfixadmin 
vi config.inc.php

modifier ou ajouter :

$CONF['configured'] = true;
$CONF['setup_password'] = 'changeme'; //sera modifié ensuite
$CONF['default_language'] = 'fr';
$CONF['postfix_admin_url'] = '/mailadmin';
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'mysql_postfix_password';
$CONF['database_name'] = 'postfix';
$CONF['admin_email'] = 'postmaster@domain.fr'; // ou vide

// si besoin
$CONF['aliases'] = '50';
$CONF['mailboxes'] = '50';
$CONF['maxquota'] = '100';

$CONF['domain_quota'] = 'YES';
$CONF['quota_multiplier'] = '1024000';
$CONF['transport'] = 'YES';
$CONF['transport_options'] = array (
   'virtual',  // for virtual accounts
   'local',    // for system accounts
   'relay'     // for backup mx
);
$CONF['transport_default'] = 'virtual';
$CONF['vacation'] = 'YES';
$CONF['sendmail'] = 'NO';

$CONF['create_mailbox_subdirs']=array('Drafts','Spam','Sent','Trash');
$CONF['create_mailbox_subdirs_host']='localhost';
$CONF['create_mailbox_subdirs_prefix']=;

$CONF['create_mailbox_subdirs_hostport']=143;
// $CONF['create_mailbox_subdirs_hostoptions']=array('notls');
$CONF['create_mailbox_subdirs_hostoptions']=array('novalidate-cert','norsh');
//
// END OF CONFIG FILE
//

Tout le reste est laissé par défaut dans le fichier. Naviguer sur http://<URL du serveur>/mailadmin/setup.php

Si tous les pré-requis sont remplis, entrer un mot de passe dans "setup password" et valider. Il donne un hash à entrer dans config.inc.php.

Puis revenir sur setup.php, entrer à nouveau le mot de passe dans setup password, et créer un admin (postmaster@domain.fr) + mot de passe.

On peut alors naviguer sur http://<URL du serveur>/mailadmin avec ce login

Configuration de Postfix

vi /etc/postfix/main.cf

par rapport au défaut, modifier :

inet_interfaces = all
myhostname = sogo.domain.fr
mydomain = domain.fr
mynetworks = $config_directory/mynetworks
relay_domains = proxy:mysql:/etc/postfix/mysql-relay_domains_maps.cf
recipient_delimiter = +

AJOUTER à la fin :

transport_maps = hash:/etc/postfix/transport
# virtual setup
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_alias_maps.cf,
                    proxy:mysql:/etc/postfix/mysql-virtual_alias_alias_maps.cf,
                    regexp:/etc/postfix/virtual_regexp
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains_maps.cf
virtual_alias_domains = proxy:mysql:/etc/postfix/mysql-virtual_alias_domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_maps.cf,
                      proxy:mysql:/etc/postfix/mysql-virtual_mailbox_alias_maps.cf
virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf
virtual_minimum_uid = 101
virtual_uid_maps = static:101
virtual_gid_maps = static:12
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
mailbox_size_limit = 5120000000
smtp_host_lookup = dns, native

# authentication - "smtpd_sasl_auth_enable = no" to avoid open relay !!!
smtpd_sasl_auth_enable = no
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

# tls config
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_security_level = may
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
smtp_tls_session_cache_database = btree:$data_directory/smtp_tls_session_cache
# Change mail.example.com.* to your host name 
smtpd_tls_key_file = /etc/pki/tls/private/mail.example.com.key
smtpd_tls_cert_file = /etc/pki/tls/certs/mail.example.com.crt
# smtpd_tls_CAfile = /etc/pki/tls/root.crt

# rules restrictions 
smtpd_client_restrictions = 
smtpd_helo_restrictions = 
smtpd_sender_restrictions = 
smtpd_recipient_restrictions = permit_sasl_authenticated, 
       permit_mynetworks, 
       reject_unauth_destination,
       reject_non_fqdn_sender,
       reject_non_fqdn_recipient, 
       reject_unknown_recipient_domain
# uncomment for realtime black list checks
#	,reject_rbl_client zen.spamhaus.org
#	,reject_rbl_client bl.spamcop.net
#	,reject_rbl_client dnsbl.sorbs.net
smtpd_helo_required = yes
disable_vrfy_command = yes
smtpd_data_restrictions = reject_unauth_pipelining

# Other	options
# email	size limit ~20Meg
message_size_limit = 204800000

Générer les clé TLS

  1. Auto-signées :
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509
mv smtpd.cert /etc/pki/tls/certs/mail.example.com.crt
mv smtpd.key /etc/pki/tls/private/mail.example.com.key
  1. OU si certificat officiel : fusionner le certificat serveur signé (crt) avec le certificat intermédiaire de l'autorité (au format pem)
cat mail.example.com.officiel.crt /etc/pki/tls/GandiStandardSSLCA.pem > mail.example.com.pem

Editer les fichiers de configuration de Postfix

vi /etc/postfix/master.cf

par rapport au défaut, modifier :

submission inet n       -       n       -       -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
  -o syslog_name=postfix/submission
pickup    fifo  n       -       n       60      1       pickup
  -o content_filter= 
  -o receive_override_options=no_header_body_checks
maildrop  unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp     unix  -       n       n       -       -       pipe
  flags=Fq. user=bsmtp argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient

AJOUTER à la fin

127.0.0.1:10025 inet n  -       y       -       -       smtpd
  -o content_filter=
  -o smtpd_helo_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o mynetworks=127.0.0.0/8
  -o smtpd_error_sleep_time=0
  -o smtpd_soft_error_limit=1001
  -o smtpd_hard_error_limit=1000
  -o receive_override_options=no_header_body_checks
  -o smtpd_bind_address=127.0.0.1
  -o smtpd_helo_required=no
  -o smtpd_client_restrictions=
  -o smtpd_restriction_classes=
  -o disable_vrfy_command=no
  -o strict_rfc821_envelopes=yes
#
# Dovecot LDA (with management of recipient_delimiter)
dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:mail argv=/usr/libexec/dovecot/deliver -f {sender} -a ${recipient} -d ${user}@${nexthop}
#
# Vacation mail
vacation    unix  -       n       n       -       -       pipe
  flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl -f ${sender} -- ${recipient}

Eventuellement, si amavis est installé :

smtp-amavis  unix  -    -       y       -       2       smtp
  -o smtp_data_done_timeout=1200
  -o disable_dns_lookups=yes
  -o smtp_send_xforward_command=yes
vi /etc/postfix/mynetworks
# This specifies the list of subnets that Postfix considers as
# "trusted" SMTP clients that have more privileges than "strangers".
#
# In particular, "trusted" SMTP clients are allowed to relay mail
# through Postfix.
#
# Be sure to add your public ip address block if needed.
#
192.168.0.0/16
10.0.0.0/8
127.0.0.0/8
vi /etc/postfix/mysql-virtual_alias_maps.cf 
<syntaxhighlight lang=bash>
 hosts = localhost
 user = postfix
 password = mysql_postfix_password
 dbname = postfix
 query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

<syntaxhighlight lang=bash enclose="div">
vi /etc/postfix/mysql-virtual_domains_maps.cf
hosts = localhost
user = postfix
password = mysql_postfix_password
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'
vi /etc/postfix/mysql-virtual_alias_alias_maps.cf
user = postfix
password = mysql_postfix_passwordmysql_postfix_password
hosts = 127.0.0.1
dbname = postfix
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' AND alias.address = concat('%u', '@', alias_domain.target_domain) AND alias.active = 1
vi /etc/postfix/mysql-virtual_alias_domains.cf
user = postfix
password = mysql_postfix_password
hosts = 127.0.0.1
dbname = postfix
query = SELECT alias_domain FROM alias_domain where alias_domain='%s'
vi /etc/postfix/mysql-relay_domains_maps.cf
hosts = localhost
user = postfix
password = postfix
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1'
vi /etc/postfix/mysql-virtual_mailbox_maps.cf
hosts = localhost
user = postfix
password = postfix
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
vi /etc/postfix/mysql-virtual_mailbox_alias_maps.cf
user = postfix
password = mysql_postfix_password
dbname = postfix
query = SELECT maildir FROM mailbox, alias_domain WHERE alias_domain.alias_domain = '%d' AND mailbox.username = concat('%u', '@', alias_domain.target_domain ) AND mailbox.active = 1
vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf
hosts = localhost
user = postfix
password = mysql_postfix_password
dbname = postfix
query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'
touch /etc/postfix/virtual_regexp

Vacation Email

useradd -r -d /var/spool/vacation -s /sbin/nologin -c "Virtual vacation" vacation 
mkdir /var/spool/vacation 
chmod 770 /var/spool/vacation
cp /usr/share/postfixadmin/VIRTUAL_VACATION/vacation.pl /var/spool/vacation/
chmod 755 /var/spool/vacation/vacation.pl
echo "autoreply.domain.fr vacation:" > /etc/postfix/transport
postmap /etc/postfix/transport 
chown -R vacation:vacation /var/spool/vacation
echo "127.0.0.1 autoreply.domain.fr" >> /etc/hosts
mkdir /etc/postfixadmin # ou: mkdir -p /etc/mail/postfixadmin, vacation.pl accepte les 2 chemins
vi /etc/postfixadmin/vacation.conf
# ========== begin configuration ==========
$db_type = 'mysql';
$db_username = 'postfix';
$db_password = 'mysql_postfix_password';    
$db_name     = 'postfix';    
$vacation_domain = 'autoreply.domain.fr';
$custom_noreply_pattern = 1;

Custom vacation.pl : exclusion d'adresses

07/2015 : Ajout d'une fonction d'exlusion et des variables de configuration correspondantes (ne peut pas être traité par la fonction existante custom_noreply car celle-ci vérifie aussi le destinataire : donc nous-même !).

# diff /usr/share/postfixadmin/VIRTUAL_VACATION/vacation.pl /var/spool/vacation/vacation.pl
202a203,204
> our $custom_exclude_pattern = 0;
> our $exclude_pattern = 'some_address|some_domain'; 
642a645,655
> 
> sub exclude_from_address {
>     my ($address) = @_;
>     my $logger = get_logger();
> 
>     if( ($custom_exclude_pattern == 1 && $address =~ /^.*($exclude_pattern).*/i) ) {
>             $logger->debug("sender $address contains excluded pattern $1 - will not send vacation message");
>             exit(0);
>         }
> }
> 
692a706
> $from = exclude_from_address($from);

Et dans /etc/postfixadmin/vacation.conf ajouter:

$custom_exclude_pattern = 1;
$exclude_pattern = 'exclude_domain.org|exclude_address@domain.org|exclude_sender';

Configurer Dovecot

cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.save 
vi /etc/dovecot/dovecot.conf

modifier :

protocols = imap pop3 lmtp

dans le répertoire /etc/dovecot/conf.d, modifier :

  1. 10-auth.conf
auth_mechanisms = plain login 
#!include auth-system.conf.ext
!include auth-sql.conf.ext
  1. 10-mail.conf
mail_plugins = quota imap_quota trash
mail_location = maildir:/home/vmail/%d/%n
first_valid_uid = 101
first_valid_gid = 12
mailbox_idle_check_interval = 30 secs
maildir_copy_with_hardlinks = yes

ajouter :

plugin {
   trash = /etc/dovecot/trash.conf
}

et pour activer le partage de dossiers :

namespace {
 type = private
 separator = /
 prefix =
 #location defaults to mail_location.
 inbox = yes
}
namespace {
 type = shared
 separator = /
 prefix = Shared/%%n/
 #location = maildir:%%h/Maildir:INDEX=~/Maildir/shared/%%u
 location = maildir:/home/vmail/%%d/%%u:INDEX=/home/vmail/%d/%u/shared/%%u
 subscriptions = no
 list = children
}

NOTE: le partage de boîte mail à boîte mail (représenté par le namespace "type = shared") ne fonctionne pas pour le moment. Soit ce n'est pas la bonne configuration de namespace, soit on a un problème avec la version 2.0.9-8 de dovecot sur CentOS6. On continue à chercher...

En attendant, on peut activer les dossiers publics, qui remplacent avantageusement les partages d'utilisateur à utilisateur :

ajouter en plus des 2 namespaces ci-dessus :

namespace {
 type = public
 separator = /
 prefix = Public/
 location = maildir:/home/vmail/public
 subscriptions = no
} 

Créer le répertoire /home/vmail/public, et dedans un fichier dovecot-acl avec :

anyone itlr

Dans ce répertoire "public" créer des sous-répertoires (on ne peut pas déposer de mails directement dans "public"). Changer le propriétaire de tous ces répertoires et ce fichier en "vmail:mail". Relancer dovecot. Un dossier virtuel "Dossiers partagés" (ou simplement "Shared" en anglais) doit apparaitre dans les clients mails (penser à vérifier si ce client a besoin de s'abonner au dossiers pour les visualiser).

  1. 10-master.conf # décommenter :
service imap-login {
  inet_listener imap {
      port = 143
}
inet_listener imaps {
  port = 993
  ssl = yes
}
service pop3-login {
  inet_listener pop3 {
    port = 110
}
inet_listener pop3s {
    port = 995
    ssl = yes
}
service imap {
  vsz_limit = 256M
}
service pop3 {
}
service auth {
  unix_listener auth-userdb {
    mode = 0666
   user = vmail
   group = mail
}
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
}
service auth-worker {
}
service dict {
  unix_listener dict {
    mode = 0666
    user = vmail
    group = mail
  }
}
  1. 10-ssl.conf
ssl = yes
ssl_verify_client_cert = no
  1. 15-lda.conf
lda_mailbox_autocreate = yes         
lda_mailbox_autosubscribe = yes
protocol lda {
  mail_plugins = sieve acl
  postmaster_address = postmaster@your-domain.tld
} 
  1. 20-imap.conf
protocol imap {
  mail_plugins = $mail_plugins acl imap_acl
  imap_client_workarounds = delay-newmail
}
  1. 20-lmtp.conf
lmtp_save_to_detail_mailbox = yes
protocol lmtp {
  mail_plugins = $mail_plugins
}
  1. 20-managesieve.conf # décommenter :
service managesieve-login {
    inet_listener sieve {
    port = 4190
}
service_count = 1
    process_min_avail = 0
    vsz_limit = 64M
}
service managesieve {
}
protocol sieve {
   managesieve_max_line_length = 65536
   managesieve_implementation_string = Dovecot Pigeonhole
   managesieve_max_compile_errors = 5
}
  1. 20-pop3.conf
protocol pop3 {
  mail_plugins = $mail_plugins
  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
  1. 90-acl.conf
plugin {
  acl = vfile
}
  1. 90-quota.conf (on gère les quotas à l'utilisateur, avec les champs "messages" et "bytes" de la base)
dict {
  quotadict = mysql:/etc/dovecot/dovecot-dict-quota.conf
}
plugin {
  quota = dict:user::proxy::quotadict
}
  1. 90-sieve.conf (gestion des fitres mails)
plugin {
  sieve = ~/.dovecot.sieve
  sieve_global_path = /var/lib/dovecot/sieve/default.sieve
  sieve_dir = ~/sieve
  sieve_global_dir = /var/lib/dovecot/sieve/
  sieve_max_script_size = 1M
}

Créer les fichiers :

vi /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=mysql_postfix_password
default_pass_scheme = MD5-CRYPT

password_query = SELECT username as user, password, concat('/home/vmail/', maildir) as userdb_home, concat('maildir:/home/vmail/', maildir) as userdb_mail, 101 as userdb_uid, 12 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'

user_query = SELECT concat('/home/vmail/', maildir) as home, concat('maildir:/home/vmail/', maildir) as mail, 101 AS uid, 12 AS gid, CONCAT('*:bytes=', quota) as quota_rule FROM mailbox WHERE username = '%u' AND active = '1'
vi /etc/dovecot/trash.conf
1 Spam
# Uncomment if you want trash as well
# 2 Trash
vi /etc/dovecot/dovecot-dict-quota.conf
connect = host=localhost dbname=postfix user=postfix password=mysql_postfix_password
map {
  pattern = priv/quota/storage
  table = quota2
  username_field = username
  value_field = bytes
}
map {
  pattern = priv/quota/messages
  table = quota2
  username_field = username
  value_field = messages
}


NOTE : AVEC CETTE CONFIGURATION, LE PARTAGE DE BOITES MAIL NE FONCTIONNE PAS ! A DEBUGGUER.

Configuration Sieve

mkdir -p /var/lib/dovecot/sieve/
vi /var/lib/dovecot/sieve/globalfilter.sieve
require "fileinto";
  if exists "X-Spam-Flag" {
          if header :contains "X-Spam-Flag" "NO" {
          } else {
          fileinto "Spam";      
          stop;
          }
  }
  if header :contains "subject" ["***SPAM***"] {
    fileinto "Spam";      
    stop;
  }
touch /var/lib/dovecot/sieve/default.sieve
chmod 754 /var/lib/dovecot/sieve/default.sieve
chown -R vmail:mail /var/lib/dovecot
chkconfig dovecot on
service postfix restart
service dovecot restart

Les autres filtres sont sauvegardés dans un fichier dans ~/sieve/xxxxx et un lien ~/.dovecot.sieve pointe vers le fichier de ce répertoire pour l'activer. (il peut donc y avoir plusieurs fichiers de filtres dans le répertoire ~/sieve, activés selon le besoin).

Les filtres sont modifiables à la main, ou par Thunderbird en chargeant le module "Sieve" : https://github.com/thsmi/sieve/tree/master/nightly (en bas de page, enregistrer la cible du lien... sur sieve-0.2.3f.xpi, et installer dans les modules TH) Dans filtres de messages > paramètres Sieve, indiquer :

sogo.domain.fr
port 4190
compte IMAP
connexion sécurisée TRUE

Puis dans Filtres de messages > Filtres Sieve Créer un script (un seul actif à la fois) avec les règles.

Fin de configuration

Mettre l'IP et le nom de host dans /etc/hosts

Dans Postfixadmin, créer un domaine, et des comptes.

SOGo

Installation

vi /etc/yum.repos.d/sogo.repo
[SOGo]
name=Inverse SOGo Repository
baseurl=http://inverse.ca/downloads/SOGo/RHEL6/$basearch
gpgcheck=0
yum install --enablerepo=epel sogo sogo-ealarms-notify sogo-tool sudo memcached sope49-gdl1-mysql  mod_ssl
service memcached start
chkconfig memcached on

Configuration

Créer une vue MariaDB sur les tables Postfix pour SOGo

mysql -u root -p postfix
MariaDB> 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`;

Le reste des tables sera créé par SOGo.

[TEMP] Ajouter des alias expéditeurs à un compte

Solution temporaire en attendant que Sogo le gère lui-même. Modifier la table "mailbox" :

mysql -u root -p postfix
MariaDB> alter table mailbox add mail_alias1 varchar(255) after username;
MariaDB> alter table mailbox add mail_alias2 varchar(255) after mail_alias1;
MariaDB> alter table mailbox add mail_alias3 varchar(255) after mail_alias2;
MariaDB> alter table mailbox add mail_alias4 varchar(255) after mail_alias3;

Modifier la vue :

MariaDB> DROP VIEW `sogo_users`;
MariaDB> 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, mail1 AS mail_alias1, mail2 AS mail_alias2, mail3 AS mail_alias3, mail4 AS mail_alias4, domain FROM  `mailbox`;

Dans /etc/sogo/sogo.conf, ajouter la ligne :

MailFieldNames = ("mail1", "mail2", "mail3", "mail4");

entre "LoginFieldNames" et "viewURL" du bloc "domain" (voir configuration Sogo ci-dessous).


Sogo

A l'intérieur de la première accolade "{", décommenter et modifier/ajouter :

SOGoTimeZone = "Europe/Paris";
SOGoLanguage = French;
//SOGoMailMessageCheck = every_10_minutes;
//SOGoFirstDayOfWeek = 1;
//SOGoMailComposeMessageType = html;

# Obligatoitre, sinon les partages user à user ne fonctionnent pas :
SOGoCalendarDefaultRoles = (
    PublicDAndTViewer
  //  ConfidentialDAndTViewer
);

 SOGoSieveServer = sieve://127.0.0.1:4190;

//Envoyer des mail lors de différents événements (ex: changement de droit ou création) :
 SOGoAppointmentSendEMailNotifications = YES;
 SOGoFoldersSendEMailNotifications = YES;
 SOGoACLsSendEMailNotifications = YES;

//Authoriser les utilisateur à changer leur mot de passe :
 SOGoPasswordChangeEnabled = YES;

//Envoi de mail pour rappel d'une tache ou d'un événement :
 //SOGoEnableEMailAlarms = YES;

// Web Interface //
  SOGoForwardEnabled = YES;

  SOGoMemcachedHost = 127.0.0.1;

// Ces lignes sont importantes : ce sont elles qui obligent Sogo à créer les tables correspondantes
SOGoProfileURL = "mysql://sogo:secret@127.0.0.1:3306/sogo/sogo_user_profile";
OCSFolderInfoURL = "mysql://sogo:secret@127.0.0.1:3306/sogo/sogo_folder_info";
OCSSessionsFolderURL = "mysql://sogo:secret@127.0.0.1:3306/sogo/sogo_sessions_folder";

//Authoriser les connection en user@domain.tld :
SOGoEnableDomainBasedUID = YES;

//Authentification des utilisateurs - sur base Postfix - mysql
domains = {
       "domain.fr" =
              {
               SOGoMailDomain = "domain.com";
               SOGoDraftsFolderName = Drafts;
               SOGoUserSources = (
                       {canAuthenticate = YES;
                       displayName = "Utilisateurs domain.com";
                       id = users1;
                       isAddressBook = YES;
                       type = sql;
                       userPasswordAlgorithm = md5;
                       LoginFieldNames = ( "c_name" );
                       viewURL ="mysql://sogo:secret@127.0.0.1:3306/sogo/sogo_users";
                       IMAPLoginFieldName = "mail";
                       DomainFieldName = "domain"; });
               };
        };


Créer un user "admin", admin Sogo (SOGoSuperUsernames), qui partagera des dossiers mails, agenda et carnet d'adresses globaux.

Apache

Le RPM sogo a créé un fichier /etc/httpd/conf.d/SOGo.conf (fichier d'exemple où tout est commenté). Modifier "yourhostname" par le nom de vhost souhaité.

Ce fichier intercepte une URL du type "https://monserveur.domain.com/SOGo".

Problème, avec cette configuration, si on accède à "https://monserveur.domain.com", on tombe sur la page par défaut d'Apache.

Pour rediriger vers SOGo, sur CentOS modifier etc/httpd/conf.d/welcome.conf :

<LocationMatch "^/+$">
    Options -Indexes
#    ErrorDocument 403 /error/noindex.html
    Redirect / https://sogo.systea.fr/SOGo
</LocationMatch>

Puis :

service httpd restart
service sogod restart