• Serveurs
  • [Discussion] Installation automatisée d'un serveur de mail sous Debian

Ce script n'est plus maintenu, merci d'utiliser à la place mon image docker. Je considère cette méthode beaucoup plus fiable et rapide à mettre en place. Je continuerai d'apporter des mises à jour de sécurité si besoin mais le script décrit ici n'évoluera plus. Merci de votre compréhension.
EDIT: vous pouvez continuer d'utiliser ce script jusqu'à que Jessie soit en fin de vie donc encore pendant 2 ans (2018), mais je recommande tout de même de passer à l'image Docker pour bénéficier de nouvelles features.
C'est mieux en effet, c'est beaucoup, beaucoup plus propre !
Encore une fois bon boulot.
3 mois plus tard
Fonctionne parfaitement pour moi aussi. J'ai eu quelques difficultés avec mariadb qui semblait ne pas fonctionner au moment de la connection. Il m'a fallu rajouter une variable d'environnement (- TERM=dumb)
Par contre j'avoue ne pas en comprendre la signification ..

Autre petite question :
Il y a visiblement deux maineres d'installer avec docker soit docker run -d \ ... ou alors via docker compose. Est ce la même installation ?

Merci encore et très bon boulot !
2 mois plus tard
Bonsoir, j'ai un problème d'installation.
J'ai juste modifié sur le docker-compose les dossiers sans le /mnt/ ainsi que le nom du mariadb.
Mon problème n'est pas lié mais je le précise quand même.

Je vais faire l'installation sur deux serveurs (un test et un prod).
Sur le test en premier:
J'ai déjà le port 25 de pris
 netstat -tlnp | grep 25
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      772/exim4
tcp6       0      0 ::1:25                  :::*                    LISTEN      772/exim4
Sur le site en prod:
netstat -tlnp | grep 25
tcp        0      0 0.0.0.0:port           0.0.0.0:*               LISTEN      2257/sshd
tcp6       0      0 :::port                :::*                    LISTEN      2257/sshd
Je précise que je fais rien sur le site en prod tant que je ne vois pas d'installation me convenant. C'est juste un test que j'ai voulu faire en plus.

Message erreur lors de la création:
Creating mailserver

ERROR: for mailserver  driver failed programming external connectivity on endpoi                                                    nt mailserver (62d5e57a84767ac4c5e26bcf97ed83ee35f7206313a7a462680d7b843ad82551)                                                    : Error starting userland proxy: listen tcp 0.0.0.0:25: bind: address already in                                                     use
Traceback (most recent call last):
  File "<string>", line 3, in <module>
  File "compose/cli/main.py", line 63, in main
AttributeError: 'ProjectError' object has no attribute 'msg'
docker-compose returned -1
Quel est la meilleur méthode pour libérer ses ports utilisés pour finir mon installation.

Nicolas.
Arrêter le service Exim4, c'est le serveur mail par défaut sous debian.
systemctl stop exim4 && systemctl disable exim4
Yop,

je suis en train d'essayer de migrer mon install en dur, sur docker.
Par contre pas moyen de se connecter a la BDD (même vierge) sur PFA j'ai connection denied (a cause du mdp) et même en faisant
docker exec -ti mariadb bash
je peu pas me co, que ce soit en root ou en postfix (avec les mdp de bases ou ceux que j'ai configuré dans le compose)

EDIT:

C'est ok j'avais zapper de rm -R /mnt/docker/mysql/

OK j'ai du régler quelques soucis d'importation de BDD, maintenant c'est ok par contre je n'arrive pas à me co sur PFA Oo

EDIT:

C'est ok le cryptage du MDP de la BDD etait plus bon, du coup j'ai crée un second compte admin modifier le MDP du premier et voila
J'ai lancé la commande et l'installation s'est faite.
Mais j'ai comme toujours des soucis avec ma database:
Postfix Admin Setup Checker

Running software:

PHP version 7.0.8
Checking for dependencies:

Magic Quotes: Disabled - OK
Depends on: presence config.inc.php - OK
Checking $CONF['configured'] - OK
Smarty template compile directory is writable - OK
Depends on: MySQL 4.1 - OK
Error: Can't connect to database
Please edit the $CONF['database_*'] parameters in config.inc.php.
DEBUG INFORMATION:
Connect: Access denied for user 'postfix'@'172.17.0.7' (using password: YES)

Depends on: session - OK
Depends on: pcre - OK
Depends on: multibyte string - OK
Depends on: IMAP functions - OK
Please fix the errors listed above.
Le fichier conf? Je le trouve où?
Peut être aussi voir pour m'aider à optimisé mon docker-compose.
http://pastebin.com/MA0K4z4s

hs: Si c'est possible d'avoir une seule base de donnée et mettre des variables d'environnement de la base de donnée dans le container d'application.
2 mois plus tard
Bonjour,

Quelques cheveux en moins durant l'installation docker. je modifie le fichier docker-compose.yml avec mes données perso, mot de passe MySQL, nom de domaine etc .. je lance la commande docker-compose up -d. La vérification des logs me donnait une erreur de connexion avec la base MySQL

Je lance la commande
docker exec  -it <id> sh
cd etc
cd postfix
cd MySQL
le mot de passe en dur est 'postfixadmin'
# cat mysql-virtual-alias-maps.cf
hosts    = mariadb
user     = postfix
password = postfixadmin
dbname   = postfix

query = SELECT goto FROM alias WHERE address='%s' AND active = 1# ^C

# cat mysql-virtual-mailbox-domains.cf
hosts    = mariadb
user     = postfix
password = postfixadmin
dbname   = postfix
Pareil pour le fichier 'config.inc.php' de postfixadmin

Voila du coup pour ceux que ca peut aider dans le fichier docker-compose.yml, mettez bien postfixadmin comme mot de passe pour la base de donnée postfix

Autre soucis, en considerant que dans un premier temps je n'installe pas let's encrypt, la création des clés par défaut ne se fait pas dans le dossier 'crt'. du coup le postfixadmin.conf fourni ne me permet pas d'accéder à l'interface web d'installation de postfixadmin.

Pour l'instant je fait tourner avec un postfixadmin.conf basique avec le port 80. Si vous avez des solutions pour régler ces détails?

Merci
3 mois plus tard

Bonjour, j'ai besoin de rajouter un domaine a mon serveur mail, mais je n'ai pas trop d'idée de comment faire, quelqu'un l'a deja fait ?

2 ans plus tard

Bonjour à tous !

Désolé de relancer ce post un peu mort mais j'ai un problème avec sieve.
J'ai mon serveur mail qui fonctionne correctement et ce depuis plusieurs mois sauf Sieve.
Lorsque je vais sur la page des filtres il est marqué "Impossible d'obtenir les filtres".

J'ai bien suivi chaque étape de l'installation, j'ai même fait des améliorations pour certains soucis récurrents, mais je ne parviens toujours pas à faire fonctionner sieve.
Voici déjà mon fichier de conf dovecot et les fichiers de conf sieve.

dovecot.conf

## Dovecot configuration file
# If you're in a hurry, see http://wiki2.dovecot.org/QuickConfiguration

# "doveconf -n" command gives a clean output of the changed settings. Use it
# instead of copy&pasting files when posting to the Dovecot mailing list.

# '#' character and everything after it is treated as comments. Extra spaces
# and tabs are ignored. If you want to use either of these explicitly, put the
# value inside quotes, eg.: key = "# char and trailing whitespace  "

# Most (but not all) settings can be overridden by different protocols and/or
# source/destination IPs by placing the settings inside sections, for example:
# protocol imap { }, local 127.0.0.1 { }, remote 10.0.0.0/8 { }
#
# Default values are shown for each setting, it's not required to uncomment
# those. These are exceptions to this though: No sections (e.g. namespace {})
# or plugin settings are added by default, they're listed only as examples.
# Paths are also just examples with the real defaults being based on configure
# options. The paths listed here are for configure --prefix=/usr
# --sysconfdir=/etc --localstatedir=/var

# Enable installed protocols
!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap lmtp sieve

# A comma separated list of IPs or hosts where to listen in for connections.
# "*" listens in all IPv4 interfaces, "::" listens in all IPv6 interfaces.
# If you want to specify non-default ports or anything more complex,
# edit conf.d/master.conf.
listen = *

# Base directory where to store runtime data.
#base_dir = /var/run/dovecot/

# Name of this instance. In multi-instance setup doveadm and other commands
# can use -i <instance_name> to select which instance is used (an alternative
# to -c <config_path>). The instance name is also added to Dovecot processes
# in ps output.
#instance_name = dovecot

# Greeting message for clients.
#login_greeting = Dovecot ready.

# Space separated list of trusted network ranges. Connections from these
# IPs are allowed to override their IP addresses and ports (for logging and
# for authentication checks). disable_plaintext_auth is also ignored for
# these networks. Typically you'd specify your IMAP proxy servers here.
#login_trusted_networks =

# Space separated list of login access check sockets (e.g. tcpwrap)
#login_access_sockets =

# With proxy_maybe=yes if proxy destination matches any of these IPs, don't do
# proxying. This isn't necessary normally, but may be useful if the destination
# IP is e.g. a load balancer's IP.
#auth_proxy_self =

# Show more verbose process titles (in ps). Currently shows user name and
# IP address. Useful for seeing who are actually using the IMAP processes
# (eg. shared mailboxes or if same uid is used for multiple accounts).
#verbose_proctitle = no

# Should all processes be killed when Dovecot master process shuts down.
# Setting this to "no" means that Dovecot can be upgraded without
# forcing existing client connections to close (although that could also be
# a problem if the upgrade is e.g. because of a security fix).
#shutdown_clients = yes

# If non-zero, run mail commands via this many connections to doveadm server,
# instead of running them directly in the same process.
#doveadm_worker_count = 0
# UNIX socket or host:port used for connecting to doveadm server
#doveadm_socket_path = doveadm-server

# Space separated list of environment variables that are preserved on Dovecot
# startup and passed down to all of its child processes. You can also give
# key=value pairs to always set specific settings.
#import_environment = TZ

##
## Dictionary server settings
##

# Dictionary can be used to store key=value lists. This is used by several
# plugins. The dictionary can be accessed either directly or though a
# dictionary server. The following dict block maps dictionary names to URIs
# when the server is used. These can then be referenced using URIs in format
# "proxy::<name>".

dict {
  #quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
  #expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext
}

# Most of the actual configuration gets included below. The filenames are
# first sorted by their ASCII value and parsed in that order. The 00-prefixes
# in filenames are intended to make it easier to understand the ordering.
!include conf.d/*.conf

# A config file can also tried to be included without giving an error if
# it's not found:
!include_try local.conf

90-seive.conf

plugin {
  sieve = /var/mail/vhosts/%d/%n/.dovecot.sieve
  sieve_default = /var/mail/sieve/default.sieve
  sieve_dir = /var/mail/vhosts/%d/%n/sieve
  sieve_global_dir = /var/mail/sieve
  sieve_trace_debug = yes
}

20-lmtp.conf

##
## LMTP specific settings
##

# Support proxying to other LMTP/SMTP servers by performing passdb lookups.
#lmtp_proxy = no

# When recipient address includes the detail (e.g. user+detail), try to save
# the mail to the detail mailbox. See also recipient_delimiter and
# lda_mailbox_autocreate settings.
#lmtp_save_to_detail_mailbox = no

# Verify quota before replying to RCPT TO. This adds a small overhead.
#lmtp_rcpt_check_quota = no

# Which recipient address to use for Delivered-To: header and Received:
# header. The default is "final", which is the same as the one given to
# RCPT TO command. "original" uses the address given in RCPT TO's ORCPT
# parameter, "none" uses nothing. Note that "none" is currently always used
# when a mail has multiple recipients.
#lmtp_hdr_delivery_address = final

protocol lmtp {
  # Space separated list of plugins to load (default is global mail_plugins).
  #mail_plugins = $mail_plugins
  postmaster_address = postmaster@<mon-domaine>
  mail_plugins = $mail_plugins sieve
}
    Répondre…