Présentation
Dans cet article pratique, nous vous expliquerons comment créer un serveur de messagerie complet sur Ubuntu 14.04 avec Postfix. Construire un serveur de messagerie Linux à partir de zéro peut être un processus pénible à moins que vous ne le fassiez jour après jour, mais nous allons vous montrer comment le faire aussi facilement que possible.
Un serveur de messagerie se compose généralement d'une gamme de packages différents qui gèrent SMTP, POP3/IMAP, le stockage du courrier et les tâches liées au spam, et ils doivent tous parler ensemble. Voici un aperçu des packages et des objectifs de cet article pratique.
Présentation des packages et des étapes de configuration
1 – Préparation de base du serveur
2 – Créer le serveur Web LAMP
3 – Configurer PHP
4 – Configurer Apache2
5 – Installer et configurer Memcached
6 – Installer les packages du serveur de messagerie
7 – Créer une base de données MySQL pour le serveur de messagerie
8.1 – Installer Postfix Admin
8.2 – Configurer Postfix Admin
9 – Ajouter des comptes utilisateurs (boîtes aux lettres) à Postfix Admin
10 – Créer un utilisateur système pour gérer les répertoires de messagerie virtuels
11 – Configurer Dovecot
12 – Configurer les filtres anti-spam et antivirus
13 – Configurer Postfix
14 – Recherche DNS inversée
15 – Installer RoundCube Webmail
Prérequis
- Serveur Ubuntu 14.04 entièrement mis à jour, si vous n'avez pas de serveur Ubuntu exécuté sur un serveur comme les serveurs cloud Linux d'Atlantic.net.
– Accès au nom de domaine pour lequel vous configurerez la messagerie (nous utiliserons "example.tld ” dans les exemples de cet article).
.
1 - Préparation de base du serveur
L'installation de base d'Ubuntu est livrée avec un ensemble limité de packages, donc la première chose que nous voulons faire est d'installer les outils que nous utiliserons pour effectuer toutes les tâches.
Tout d'abord, assurez-vous que vous êtes connecté en tant que compte d'utilisateur root.
sudo su -
Maintenant, installons les outils de base afin de pouvoir télécharger des fichiers et modifier facilement les fichiers de configuration.
apt-get install wget nano ssl-cert
- wget :package permettant de récupérer des fichiers via HTTP, HTTPS et FTP, les protocoles Internet les plus répandus.
- nano :éditeur de texte en ligne de commande avec des commandes faciles à utiliser.
- certificat SSL :package qui permet de créer des certificats SSL.
Ensuite, nous allons mettre à jour le nom d'hôte et le nom de domaine du serveur afin que lorsque vous envoyez un e-mail, il corresponde à l'enregistrement DNS du pointeur inverse que nous avons configuré avec votre fournisseur d'hébergement. Nous mettrons également à jour le /etc/hostname
dossier. Assurez-vous de remplacer example par votre nom d'hôte et votre nom de domaine réels.
nom d'hôte mail.example.tldecho "mail.example.tld"> /etc/hostname
Nous allons maintenant éditer manuellement le /etc/hosts
fichier de configuration afin qu'il corresponde au nom que nous venons d'entrer.
nano /etc/hosts
Modifiez la première ligne et ajoutez votre FQDN (nom de domaine complet) juste après l'adresse IP 127.0.0.1.
127.0.0.1 mail.example.tld localhost
Nous allons maintenant mettre à jour le certificat SSL par défaut sur le serveur afin qu'il corresponde à notre nouveau nom d'hôte. Si vous avez acheté un certificat SSL pour votre serveur de messagerie, vous pouvez ignorer cette étape.
make-ssl-cert generate-default-snakeoil --force-overwrite
Cette commande indique au serveur de régénérer le certificat SSL du système par défaut et l'oblige à écraser les fichiers CRT et KEY d'origine.
Nous avons maintenant terminé la préparation de base du serveur et pouvons passer à l'installation de nos services de serveur Web.
[Retour en haut]
2 - Créer le serveur Web LAMP
Au cours de cette étape, nous allons installer les packages "LAMP". LAMP signifie Linux, Apache, MySQL et PHP. Ces packages combinés permettront à votre serveur de fournir des services Web dynamiques avec une connectivité MySQL.
Tout d'abord, installons les packages. C'est ce qu'on appelle une installation de package de tâches.
apt-get install lamp-server^
Pour voir une liste des packages inclus dans cette installation de groupe, vous pouvez exécuter ce qui suit :
tasksel --task-packages lamp-server
Lors de l'installation de ces packages, le serveur vous demandera d'entrer un mot de passe pour l'installation de votre base de données MySQL. Ce mot de passe sera défini pour le "root ” compte utilisateur de la base de données MySQL. Assurez-vous que ce mot de passe est un mot de passe sécurisé et assurez-vous de documenter le mot de passe utilisé car vous en aurez à nouveau besoin tout au long de cet article.
Une fois tous les packages installés, nous serons prêts à installer des modules PHP supplémentaires. Ces modules supplémentaires permettront à votre serveur de prendre en charge APC User Cache pour PHP 5, memcached, cURL, un analyseur XML et le traitement d'image GD.
apt-get install php-apc php5-memcache php5-curl php5-gd php-xml-parser php5-imap
[Retour en haut]
3 - Configurer PHP
Nous allons maintenant mettre à jour la configuration de PHP. La configuration par défaut est généralement suffisante pour la plupart des systèmes; cependant, nous voulons nous assurer que PHP n'expose pas d'informations à des attaquants potentiels. Nous allons éditer le fichier /etc/php5/apache2/php.ini
.
nano /etc/php5/apache2/php.ini
Localisez la variable expose_php
et mettre à jour la valeur de On
sur Off
. Avec nano, vous pouvez rechercher en appuyant sur CTRL-W
puis entrez votre mot de recherche.
367;;;;;;;;;;;;;;;;;;368; Divers;369;;;;;;;;;;;;;;;;;;;370 371; Décide si PHP peut exposer le fait qu'il est installé sur le serveur372; (par exemple en ajoutant sa signature à l'en-tête du serveur Web). Ce n'est pas une sécurité373; menace de quelque manière que ce soit, mais cela permet de déterminer si vous utilisez PHP374; sur votre serveur ou non.375; http://php.net/expose-php376 expose_php =Off377
[Retour en haut]
4 - Configurer Apache2
Nous sommes maintenant prêts à passer à la personnalisation de la configuration des services Web Apache. Le résultat final pour Apache est qu'il servira un seul site Web avec quelques applications Web en cours d'exécution :Webmail (RoundCube) et Postfix Admin. Tout le trafic sera dirigé vers les services Web HTTPS (sécurisés).
Tout d'abord, nous allons minimiser les informations qu'Apache expose au public. En utilisant nano, nous allons éditer le fichier de configuration /etc/apache2/conf-available/security.conf
.
nano /etc/apache2/conf-available/security.conf
Recherchez la variable de configuration ServerTokens
et définissez la valeur de OS
à Prod
.
# ServerTokens# Cette directive configure ce que vous renvoyez comme en-tête de réponse HTTP du serveur#. La valeur par défaut est 'Full' qui envoie des informations sur le type de système d'exploitation# et compilé en modules.# Défini sur l'un des éléments suivants :Full | SE | Minime | Mineur | majeur | Prod# où Full transmet le plus d'informations et Prod le moins.#ServerTokens MinimalServerTokens Prod#ServerTokens Full
Recherchez maintenant la variable de configuration ServerSignature
et définissez la valeur de On
sur Off
.
# Ajoutez éventuellement une ligne contenant la version du serveur et le nom de l'hôte virtuel # aux pages générées par le serveur (documents d'erreur internes, listes de répertoire # FTP, sortie mod_status et mod_info, etc., mais pas les documents # générés par CGI ou les documents d'erreur personnalisés) .# Définissez sur "EMail" pour inclure également un lien mailto :vers ServerAdmin.# Définissez sur l'un des éléments suivants :On | Désactivé | EMailServerSignature Off#ServerSignature On
Vous pouvez maintenant enregistrer et quitter ce fichier de configuration.
Nous allons maintenant activer les modules supplémentaires rewrite
, et ssl
dans Apache afin que nous puissions rediriger le trafic HTTP par défaut vers le port HTTPS et prendre en charge les certificats SSL dans Apache.
a2enmod réécrit ssla2ensite default-ssl
Nous passons maintenant à la personnalisation de la configuration du site Web. Ces fichiers se trouvent dans le répertoire /etc/apache2/sites-available
. Nous allons mettre à jour les fichiers de configuration par défaut existants pour prendre en charge les services SSL.
Tout d'abord, éditez le fichier de configuration 000-default.conf
. Vous pouvez remplacer la configuration existante par celle ci-dessous, remplacez simplement le ServerName
variable avec votre nom d'hôte.
nano /etc/apache2/sites-available/000-default.conf
# La directive ServerName définit le schéma de requête, le nom d'hôte et le port # que le serveur utilise pour s'identifier. Ceci est utilisé lors de la création d'URL de redirection #. Dans le contexte des hôtes virtuels, le ServerName # spécifie quel nom d'hôte doit apparaître dans l'en-tête Host:de la demande pour # correspondre à cet hôte virtuel. Pour l'hôte virtuel par défaut (ce fichier), cette valeur # n'est pas décisive car elle est utilisée comme hôte de dernier recours malgré tout. # Cependant, vous devez le définir explicitement pour tout autre hôte virtuel. ServerName mail.example.tld DocumentRoot /var/www/html Options FollowSymLinks AllowOverride All # Niveaux de journalisation disponibles :trace8, ..., trace1, debug, info, notice, avertir, # erreur, critique, alerte, urgence. # Il est également possible de configurer le niveau de journalisation pour # des modules particuliers, par ex. LogLevel info ssl:warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combiné # Pour la plupart des fichiers de configuration de conf-available/, qui sont # activés ou désactivés au niveau global, il est possible de # inclure une ligne pour un seul hôte virtuel particulier. Par exemple, la ligne # suivante n'active la configuration CGI pour cet hôte # qu'après qu'elle ait été globalement désactivée avec "a2disconf". #Include conf-available/serve-cgi-bin.conf
Vous pouvez maintenant enregistrer et quitter ce fichier de configuration.
Si vous n'avez pas acheté votre propre certificat SSL, le fichier de configuration SSL par défaut du système default-ssl.conf
fonctionnera pour nos besoins. Cependant, si vous avez acheté un certificat SSL personnalisé, vous devrez modifier le fichier de configuration et mettre à jour les variables SSLCertificateFile
, SSLCertificateKeyFile
et SSLCertificateChainFile
pour pointer vers l'emplacement où vous avez enregistré votre certificat et vos fichiers de clé (consultez votre autorité de certification ou votre fournisseur pour une assistance supplémentaire à la configuration).
Nous allons maintenant créer un .htaccess
fichier de configuration qui obligera les visiteurs de votre serveur Web à utiliser le protocole HTTPS (SSL).
nano /var/www/html/.htaccess
Copiez et collez les variables suivantes dans le .htaccess
configuration.
RewriteEngine OnRewriteCond %{SERVER_PORT} 80RewriteRule ^(.*) https://%{HTTP_HOST}/$1 [L]
Ces variables de configuration indiquent à Apache d'activer le moteur mod_rewrite, puis de rediriger les visiteurs sur HTTP (port 80) vers l'URL HTTPS (port 443).
[Retour en haut]
5 - Installer et configurer Memcached
Memcached est un système de mise en cache d'objets en mémoire distribuée hautes performances. Ce package aidera à accélérer les applications Web dynamiques, telles que RoundCube et Postfix Webadmin.
Tout d'abord, installons le paquet en utilisant apt-get.
apt-get install memcached
Pour les petits systèmes, la configuration par défaut est généralement suffisante. Il verrouille l'accès à l'hôte local et fournit des valeurs d'allocation de mémoire suffisantes. Toutefois, si vous créez un serveur plus volumineux susceptible d'être utilisé de manière intensive, vous souhaiterez probablement modifier les valeurs d'allocation de mémoire pour qu'elles soient supérieures à la valeur par défaut de 64 M.
Les fichiers de configuration memcached se trouvent dans /etc/memcached.conf
.
[Retour en haut]
6 - Installer les packages de serveur de messagerie
Nous sommes maintenant prêts à installer les packages du serveur de messagerie. Encore une fois, ceux-ci sont situés dans un tasksel
groupe de packages.
apt-get install mail-server^
Pour voir une liste des packages inclus dans cette installation de groupe, vous pouvez exécuter ce qui suit :
tasksel --task-packages serveur de messagerie
Lors de l'installation du package, Postfix vous posera une série de questions :
- Type de configuration d'installation :
Vous devrez sélectionner "Site Internet ” comme type de configuration. - Nom d'hôte du serveur de messagerie :
Assurez-vous d'entrer le même nom d'hôte (FQDN) que celui que vous avez utilisé à l'étape 1 - Créer un certificat SSL auto-signé —
Sélectionnez l'option "Oui" - Configurez le nom commun du certificat SSL :
Entrez le même nom d'hôte (FQDN) que celui que vous avez utilisé à l'étape 1
Nous allons maintenant installer le reste des packages nécessaires au serveur de messagerie pour prendre en charge les utilisateurs basés sur MySQL, ainsi que les packages de détection de spam et d'antivirus. (Remarque :ces packages peuvent être installés via un seul apt-get install
commande, avec chaque nom de package séparé par un espace, mais ils sont présentés ici comme des commandes séparées pour faciliter la lecture.)
apt-get install postfix-mysql dovecot-mysql dovecot-imapd postgreyapt-get install amavis clamav clamav-daemon spamassassinapt-get install php5-imap
Ce prochain ensemble de packages facultatifs étend les capacités des packages de détection anti-spam et antivirus en permettant une meilleure inspection des fichiers joints qui arrivent sur votre serveur de messagerie.
apt-get install libnet-dns-perl pyzor razorapt-get install arj bzip2 cabextract cpio file gzip noarch pax unzip zip
Maintenant, redémarrons les services Apache2 pour qu'il voie les nouveaux modules que nous lui avons fournis.
service apache2 redémarrage
[Retour en haut]
7 – Création d'une base de données MySQL pour le serveur de messagerie
Nous sommes maintenant prêts à créer la base de données pour nos comptes d'utilisateurs et d'autres fonctions de serveur de messagerie.
Pour commencer, nous devons nous connecter au service de base de données MySQL en tant qu'utilisateur root. Vous aurez besoin de ce mot de passe que vous avez entré pour la première fois à l'étape 2.
mysql -u root -p
Vous verrez maintenant une invite de ligne de commande différente (mysql>
). Il s'agit de la console MySQL CLI où vous pouvez gérer les bases de données et les tables de votre serveur MySQL.
Tout d'abord, nous allons créer une nouvelle base de données nommée "mail", puis nous créerons un compte d'utilisateur système avec toutes les autorisations sur cette nouvelle base de données. Assurez-vous de remplacer le <secure password>
variable avec un autre *nouveau* mot de passe sécurisé pour ce compte. N'utilisez pas le même mot de passe que celui que vous avez utilisé pour le compte d'utilisateur racine .
créer un courrier de base de données ; accorder tout sur le courrier.* à 'mail'@'localhost' identifié par '' ;vider les privilèges ;quitter ;
Nous avons maintenant configuré la base de données qui sera utilisée par vos services de serveur de messagerie.
[Retour en haut]
8.1 – Installer l'administrateur de Postfix
Postfix Admin est un outil de gestion Web créé pour Postfix. Il s'agit d'une application basée sur PHP qui gère les domaines virtuels et les utilisateurs de style Postfix qui sont stockés dans MySQL ou PostgreSQL.
Tout d'abord, nous devons télécharger la dernière version de l'application. Cet exemple téléchargera la version 2.92 :vérifiez toujours la version sur le site Web du fournisseur pour vous assurer que vous disposez de la dernière version .
cd /tmpwget http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.92/postfixadmin-2.92.tar.gz
Nous allons maintenant extraire l'application et la copier dans le répertoire HTML /var/www/html/postfixadmin
sur notre serveur.
tar -xvf postfixadmin-2.92.tar.gzcp -r postfixadmin-2.92/ /var/www/html/postfixadmin
Nous devons maintenant mettre à jour les autorisations de ce nouveau dossier afin que le www-data
compte d'utilisateur y a accès.
chown -R www-data:www-data /var/www/html/postfixadmin
[Retour en haut]
8.2 – Configurer l'administrateur de Postfix
Nous avons maintenant quelques configurations à mettre à jour dans les fichiers Admin de Postfix. Tout d'abord, nous allons modifier le config.inc.php
fichier afin qu'il sache comment communiquer avec la base de données que nous venons de créer à l'étape 7.
nano /var/www/html/postfixadmin/config.inc.php
Rechercher la variable 'configured'
et réinitialiser la valeur de false
à true
.
$CONF['configured'] =vrai ;
Recherchez maintenant la variable 'database_'
et remplacez les valeurs de votre configuration de serveur MySQL. Assurez-vous de remplacer la variable <your secure password>
avec le mot de passe de l'utilisateur de la base de données "mail" que vous avez entré à l'étape 7.
$CONF['database_type'] ='mysqli';$CONF['database_host'] ='localhost';$CONF['database_user'] ='mail';$CONF['database_password'] ='';$CONF['database_name'] ='mail';
Cherchez maintenant la variable 'admin_email'
et remplacez la valeur par l'adresse e-mail que vous allez configurer pour votre compte de messagerie administrateur.
$CONF['admin_email'] ='[email protected]';
Recherchez maintenant la variable 'domain_path'
et remplacez la valeur de 'YES
‘ à ‘NO
‘.
$CONF['domain_path'] ='NON' ;
Recherchez maintenant la variable 'domain_in_mailbox'
et remplacez la valeur de 'NO
‘ à ‘YES
‘.
$CONF['domain_in_mailbox'] ='OUI' ;
Ces dernières variables de configuration ne définissent pas le chemin vers lequel les données réelles de la boîte aux lettres de l'utilisateur seront stockées sur le serveur. Ceux-ci seront définis ultérieurement lors des étapes de configuration de Dovecot.
Vous êtes maintenant prêt à enregistrer le fichier de configuration, mais ne quittez pas encore !
Nous allons maintenant ouvrir un navigateur web entrez l'URL de votre serveur de messagerie, pointant directement sur le setup.php
page de paramétrage. Assurez-vous de remplacer mail.example.tld avec le vrai nom d'hôte de votre serveur.
http://mail.example.tld/postfixadmin/setup.php
Lorsque vous accédez à l'URL, le script vérifie automatiquement le serveur et confirme que tous les modules prérequis sont installés et fonctionnent.
Sortie du vérificateur de configuration de l'administrateur Postfix
Une fois les vérifications terminées, vous serez invité à entrer un mot de passe de configuration. Ce mot de passe est utilisé pour créer des comptes d'administrateur maître pour l'interface Web d'administration de Postfix.
Entrez un mot de passe sécurisé et appuyez sur le bouton "Générer le hachage du mot de passe".
L'administrateur de Postfix génère un hachage de mot de passe
Exemple de hachage du mot de passe de l'administrateur Postfix
Ne fermez PAS encore le navigateur Web ! Nous revenons ici dans quelques minutes.
Après avoir généré le hachage du mot de passe, nous devrons alors mettre à jour le config.inc.php
déposer à nouveau avec ce mot de passe. Recherchez la variable 'setup_password'
et remplacez la valeur par celle générée à partir du script.
// Afin de configurer Postfixadmin, vous DEVEZ spécifier un mot de passe haché ici.// Pour créer le hachage, visitez setup.php dans un navigateur et tapez un mot de passe dans le champ,// lors de la soumission, il sera renvoyé en écho pour vous en tant que valeur hachée.$CONF['setup_password'] ='';
Vous pouvez maintenant enregistrer et quitter le fichier de configuration.
Nous sommes maintenant prêts à retourner au navigateur Web et à générer le compte "super administrateur" pour le portail d'administration de Postfix.
Lorsque vous avez cliqué sur le bouton "Générer le hachage du mot de passe", les champs du formulaire ont changé pour ressembler à l'exemple ci-dessous. Vous pouvez maintenant remplir le formulaire pour générer un compte super administrateur.
Création d'un compte superadmin avec Postfix Admin
[Retour en haut]
9 – Ajouter des comptes d'utilisateurs (boîtes aux lettres) à l'administrateur de Postfix
Nous sommes maintenant prêts à créer un compte utilisateur virtuel sur notre serveur de messagerie. Pour ce faire, nous retournerons à l'URL d'administration de Postfix dans notre navigateur Web et entrerons l'URL de votre serveur de messagerie. Assurez-vous de remplacer mail.example.tld avec le vrai nom d'hôte de votre serveur.
https://mail.example.tld/postfixadmin/
Vous pourrez maintenant vous connecter au portail d'administration de Postfix où vous pourrez gérer les domaines virtuels et les comptes d'utilisateurs virtuels. Entrez le nom d'utilisateur et le mot de passe du super administrateur que vous avez créés ci-dessus lors de la configuration de l'administrateur de Postfix, puis appuyez sur le bouton "Connexion".
Connexion administrateur pour Postfix Admin
Une fois connecté au portail d'administration de Postfix, vous verrez un menu en haut de la page.
Les options de menu permettent de gérer les domaines virtuels et les utilisateurs de votre serveur de messagerie Postfix et d'afficher les fichiers journaux.
Menu Admin de Postfix
Option Postfix Admin Ajouter une boîte aux lettres
Pour créer une boîte aux lettres utilisateur, cliquez sur le lien rapide "Ajouter une boîte aux lettres". Vous serez maintenant redirigé vers l'écran "Assistant d'ajout de boîte aux lettres". Remplissez les détails dans le formulaire et appuyez sur le bouton "Ajouter une boîte aux lettres" une fois terminé. L'assistant créera votre premier compte d'utilisateur virtuel (boîte aux lettres).
Création d'une nouvelle boîte aux lettres dans Postfix Admin
[Retour en haut]
10 – Créer un utilisateur système pour gérer les répertoires de messagerie virtuels
Les utilisateurs virtuels sont ceux qui n'existent pas techniquement sur votre serveur Linux, et ils n'utilisent pas les méthodes Linux standard pour l'authentification ou la livraison et le stockage du courrier. Les comptes d'utilisateurs virtuels de votre serveur de messagerie sont définis dans la base de données créée par Postfix Admin plutôt que d'exister en tant que comptes d'utilisateurs système. Nous devons donc créer un compte utilisateur système unique qui gérera des services tels que le stockage du courrier et l'authentification Dovecot.
Tout d'abord, créons un compte utilisateur système appelé vmail
et donnez-lui les autorisations pour les répertoires requis. Ce compte système sera responsable des opérations de backend pour le stockage et les services de la boîte aux lettres.
useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Virtual MailDir Handler" vmailmkdir -p /var/vmailchown vmail:mail /var/vmailchmod 770 /var/vmail
Une explication des commandes ci-dessus :
- Nous avons créé le compte utilisateur système
vmail
, attribué le répertoire personnel comme/var/vmail
, et restreint la possibilité pour ce compte de se connecter via le shell ou la console. - Nous avons ensuite créé manuellement le répertoire personnel
/var/vmail
pour le nouveau compte d'utilisateur système. - Nous définissons ensuite le propriétaire et le groupe pour le
/var/vmail
répertoire. - Nous avons ensuite accordé toutes les autorisations à l'utilisateur système
vmail
et le groupe de sécuritémail
affecté au répertoire/var/vmail
.
[Retour en haut]
11 – Configurer le pigeonnier
Dovecot est un serveur de messagerie IMAP et POP3 open source écrit dans un souci de sécurité. Dovecot possède de nombreuses fonctionnalités intégrées, que vous pouvez consulter sur son site Web public, http://www.dovecot.org.
Dovecot sera responsable de la gestion des connexions IMAP et POP3, de la gestion des répertoires de messagerie locaux et de la réception du courrier entrant transmis par le processus de serveur de messagerie SMTP de Postfix. Dovecot gérera également l'authentification pour les connexions SMTP. De nombreux fichiers différents dans le /etc/dovecot
poignée de répertoire configuration Dovecot.
Tout d'abord, configurons Dovecot pour utiliser la base de données configurée par Postfix Admin. Nous allons d'abord éditer le fichier de configuration /etc/dovecot/conf.d/auth-sql.conf.ext
nano /etc/dovecot/conf.d/auth-sql.conf.ext
Modifiez ou mettez à jour le contenu pour avoir la configuration suivante.
# Rechercher les mots de passe utilisateur à partir d'une base de données SQL comme # défini dans /etc/dovecot/dovecot-sql.conf.extpassdb { driver =sql args =/etc/dovecot/dovecot-sql.conf.ext}# Rechercher informations utilisateur d'une base de données SQL comme # défini dans /etc/dovecot/dovecot-sql.conf.extuserdb { driver =sql args =/etc/dovecot/dovecot-sql.conf.ext}
Une fois cela fait, enregistrez et quittez le fichier de configuration.
Fichier de configuration SQL
Nous allons maintenant sauvegarder le fichier de configuration SQL d'origine /etc/dovecot/dovecot-sql.conf.ext
et créez un nouveau fichier de configuration que Dovecot utilisera.
mv /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.originalnano /etc/dovecot/dovecot-sql.conf.ext
Copiez maintenant le contenu ci-dessous dans le fichier de configuration et mettez à jour les valeurs de la base de données de messagerie que vous avez configurée à l'étape 7.
# Pilote de base de données :mysql, pgsql, sqlitedriver =mysql# Connexion à la base de données :# connect =host=192.168.1.1 dbname=users# connect =host=sql.example.com dbname=virtual user=virtual password=blarg# connect =/etc/dovecot/authdb.sqlite#connect =host=localhost dbname=mail user=mail password=# Schéma de mot de passe par défaut. ## La liste des schémas pris en charge se trouve dans # http://wiki2.dovecot. org/Authentication/PasswordSchemes## Schéma de chiffrement faible mais courant :default_pass_scheme =MD5-CRYPT# # Commentez ce qui précède et décommentez ci-dessous # pour un chiffrement plus fort :#default_pass_scheme - SHA256-CRYPT# Définissez la requête pour obtenir un mot de passe utilisateur.password_query =\ SELECT username as user, password, '/var/vmail/%d/%n' as userdb_home, \ 'maildir:/var/vmail/%d/%n' as userdb_mail, 150 as userdb_uid, 8 as userdb_gid \ FROM boîte aux lettres WHERE username ='%u' AND active ='1'# Définir la requête pour obtenir des informations sur l'utilisateur.user_query =\ SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/ %ré /%n' as mail, \ 150 AS uid, 8 AS gid, concat('dirsize:storage=', quota) AS quota \ FROM boîte aux lettres WHERE username ='%u' AND active ='1'
Une fois cela fait, enregistrez et quittez ce fichier de configuration.
Fichier de définition d'authentification
Nous allons maintenant sauvegarder le fichier de définition d'authentification /etc/dovecot/conf.d/10-auth.conf
et créez-en un nouveau.
mv /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.originalnano /etc/dovecot/conf.d/10-auth.confCopiez maintenant le contenu ci-dessous dans le fichier de définition.
# Désactiver la commande LOGIN et toutes les autres authentifications en clair à moins que# SSL/TLS ne soit utilisé (capacité LOGINDISABLED). Notez que si l'adresse IP distante correspond à l'adresse IP locale (c'est-à-dire que vous vous connectez à partir du même ordinateur), la connexion est considérée comme sécurisée et l'authentification en clair est autorisée. login digest-md5 cram-md5 ntlm rpa apop anonyme gssapi otp skey# gss-spnego# REMARQUE :Voir également le paramètre disable_plaintext_auth.auth_mechanisms =plain login#### Bases de données de mots de passe et d'utilisateurs## ## La base de données de mots de passe est utilisée pour vérifier le mot de passe de l'utilisateur (et rien de plus). # Vous pouvez avoir plusieurs passdbs et userdbs. Ceci est utile si vous voulez # autoriser les utilisateurs système (/etc/passwd) et les utilisateurs virtuels à se connecter sans # dupliquer les utilisateurs système dans la base de données virtuelle.#### La base de données utilisateur spécifie où les e-mails sont localisés et quels ID d'utilisateur/groupe # les possèdent. Pour une configuration à un seul UID, utilisez "static" userdb.## # Utilisez la configuration de la base de données SQL plutôt que les autres.!include auth-sql.conf.ext Une fois terminé, enregistrez et quittez le fichier.
Fichier de définition de messagerie
Ensuite, nous allons dire à Dovecot où stocker le courrier des utilisateurs virtuels. Nous allons sauvegarder le fichier de définition de courrier
/etc/dovecot/conf.d/10-mail.conf
et en créer un nouveau.mv /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.originalnano /etc/dovecot/conf.d/10-mail.confCopiez maintenant le contenu ci-dessous dans le fichier de définition.
# Emplacement des boîtes aux lettres des utilisateurs. La valeur par défaut est vide, ce qui signifie que Dovecot# essaie de trouver automatiquement les boîtes aux lettres. Cela ne fonctionnera pas si l'utilisateur # n'a pas encore de courrier, vous devez donc indiquer explicitement à Dovecot l'emplacement complet #. ## Si vous utilisez mbox, donnez un chemin vers le fichier INBOX (par exemple /var/ mail/%u)# n'est pas suffisant. Vous devrez également indiquer à Dovecot où sont conservées les autres boîtes aux lettres. C'est ce qu'on appelle le "répertoire de messagerie racine", et il doit s'agir du premier # chemin donné dans le paramètre mail_location.## Il existe quelques variables spéciales que vous pouvez utiliser, par exemple :## %u - nom d'utilisateur# %n - utilisateur partie dans [email protected], identique à %u s'il n'y a pas de domaine# %d - partie de domaine dans [email protected], vide s'il n'y a pas de domaine# %h - répertoire personnel## Voir doc/wiki/Variables.txt pour la liste complète. Quelques exemples :## mail_location =maildir:~/Maildir# mail_location =mbox:~/mail:INBOX=/var/mail/%u# mail_location =mbox:/var/mail/%d/%1n/%n:INDEX =/var/indexes/%d/%1n/%n###mail_location =maildir:/var/vmail/%d/%n# Utilisateur système et groupe utilisé pour accéder aux mails. Si vous en utilisez plusieurs, userdb# peut les remplacer en renvoyant des champs uid ou gid. Vous pouvez utiliser des nombres # ou des noms. mail_uid =vmailmail_gid =mail# Plage UID valide pour les utilisateurs, par défaut à 500 et plus. C'est principalement # pour s'assurer que les utilisateurs ne peuvent pas se connecter en tant que démons ou autres utilisateurs du système. l'uid de l'utilisateur vmail ici.first_valid_uid =150last_valid_uid =150# Si vous devez définir plusieurs emplacements de boîte aux lettres ou si vous souhaitez modifier les paramètres d'espace de noms par défaut, vous pouvez le faire en définissant des sections d'espace de noms.## Vous pouvez avoir des espaces de noms privés, partagés et publics. Les espaces de noms privés # sont destinés aux e-mails personnels de l'utilisateur. Les espaces de noms partagés permettent d'accéder aux boîtes aux lettres d'autres utilisateurs qui ont été partagées. Les espaces de noms publics sont destinés aux boîtes aux lettres partagées# qui sont gérées par sysadmin. Si vous créez des espaces de noms partagés ou publics#, vous souhaiterez généralement également activer le plug-in ACL, sinon tous# les utilisateurs peuvent accéder à toutes les boîtes aux lettres partagées, en supposant qu'ils disposent des autorisations# au niveau du système de fichiers pour le faire.namespace inbox { # Type d'espace de noms :privé, partagé ou public #type =privé # Séparateur hiérarchique à utiliser. Vous devez utiliser le même séparateur pour tous les espaces de noms # ou certains clients deviennent confus. '/' est généralement bon. # La valeur par défaut dépend cependant du format de stockage de courrier sous-jacent. #separator =# Préfixe requis pour accéder à cet espace de noms. Cela doit être différent pour # tous les espaces de noms. Par exemple "Public/". #prefix =# Emplacement physique de la boîte aux lettres. This is in same format as # mail_location, which is also the default for it. #location =# There can be only one INBOX, and this setting defines which namespace # has it. inbox =yes # If namespace is hidden, it's not advertised to clients via NAMESPACE # extension. You'll most likely also want to set list=no. This is mostly # useful when converting from another server with different namespaces which # you want to deprecate but still keep working. For example you can create # hidden namespaces with prefixes "~/mail/", "~%u/mail/" and "mail/". #hidden =no # Show the mailboxes under this namespace with LIST command. This makes the # namespace visible for clients that don't support NAMESPACE extension. # "children" value lists child mailboxes, but hides the namespace prefix. #list =yes # Namespace handles its own subscriptions. If set to "no", the parent # namespace handles them (empty prefix should always have this as "yes") #subscriptions =yes} Once done, save and exit the file.
SSL Definition File
If you have an SSL certificate that you would like to install, you will need to modify the Dovecot SSL definition file
/etc/dovecot/conf.d/10-ssl.conf
with your valid certificate. Remember, you will have to also include your CA certificate bundle if one has been provided by the certificate issuer.Dovecot Master Definition File
We are now going to update the Dovecot master definition file
/etc/dovecot/10-master.conf
to include the system user account and the postfix settings.nano /etc/dovecot/conf.d/10-master.confSearch for the config definition
service auth
and replace the definition block with the following.service auth { # auth_socket_path points to this userdb socket by default. It's typically # used by dovecot-lda, doveadm, possibly imap process, etc. Users that have # full permissions to this socket are able to get a list of all usernames and # get the results of everyone's userdb lookups. # # The default 0666 mode allows anyone to connect to the socket, but the # userdb lookups will succeed only if the userdb returns an "uid" field that # matches the caller process's UID. Also if caller's uid or gid matches the # socket's uid or gid the lookup succeeds. Anything else causes a failure. # # To give the caller full permissions to lookup all users, set the mode to # something else than 0666 and Dovecot lets the kernel enforce the # permissions (e.g. 0777 allows everyone full permissions). unix_listener auth-userdb { mode =0600 user =vmail group =mail } # Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode =0660 # Assuming the default Postfix userid and groupid user =postfix group =postfix } }Once done, save and exit the file.
LDA Definition File
In some cases, you may have to explicitly define the postmaster email address for your server. To do this, you will need to edit the LDA definition file
/etc/dovecot/conf.d/15-lda.conf
. If you see errors messages likeInvalid settings: postmaster_address setting not given
showing up in the mail server logs, then this configuration change is the likely fix for that error.nano /etc/dovecot/conf.d/15-lda.confSearch for the definition
postmaster_address
and update the value to include your domain’s postmaster account.# Address to use when sending rejection mails.# Default is [email protected]. %d expands to recipient domain.#postmaster_address =postmaster_address [email protected] Once done, save and exit the file.
We now need to update the Dovecot configuration directory to be accessible to the Dovecot service account as well as the vmail system account.
chown -R vmail:dovecot /etc/dovecotchmod -R o-rwx /etc/dovecotYou have now completed the configuration of the Dovecot service and we can now move on to the antivirus and anti-spam services.
[Back to top]12 – Configuring Amavis, ClamAV, and SpamAssassin
What are these packages ?
– Amavis is an interface between Postfix and content filtering packages such as SpamAssassin and ClamAV.
– ClamAV is a high-performance antivirus engine for detecting trojans, viruses, malware &other malicious threats.
– SpamAssassin is a high-performance anti-spam platform famous for its Bayesian spam filtering capabilities. It gives system administrators a filter to classify messages and block unsolicited bulk email.
We will now walk you through the process of installing some protection for your mail server. For the most part, the default configurations are sufficient for a good line of defense against spam and viruses getting through your mail server. If you have special requirements, you can, of course, spend a good amount of time crafting intricate processing rules.
Let’s first create the two system user accounts, amavis and clamav, and allow them to collaborate together.
adduser clamav amavisadduser amavis clamavWe are now going to enable the Amavis daemon by editing the
/etc/amavis/conf.d/15-content_filter_mode
configuration file.nano /etc/amavis/conf.d/15-content_filter_modeuse strict; # You can modify this file to re-enable SPAM checking through spamassassin# and to re-enable antivirus checking. ## Default antivirus checking mode# Please note, that anti-virus checking is DISABLED by# default.# If You wish to enable it, please uncomment the following lines:@bypass_virus_checks_maps =( %bypass_virus_checks, @bypass_virus_checks_acl, $bypass_virus_checks_re); ## Default SPAM checking mode# Please note, that anti-spam checking is DISABLED by# default.# If You wish to enable it, please uncomment the following lines:@bypass_spam_checks_maps =( %bypass_spam_checks, @bypass_spam_checks_acl, $bypass_spam_checks_re); 1; # ensure a defined returnOnce done, you can save and exit the file.
We are now going to enable the SpamAssassin software by editing the
/etc/default/spamassassin
configuration file.nano /etc/default/spamassassinFirst, locate the variable
ENABLED=0
in the configuration file and change the value to 1.# Change to one to enable spamdENABLED=1Now search for the variable
CRON=0
in the configuration file and change the value to 1.# Cronjob# Set to anything but 0 to enable the cron job to automatically update# spamassassin's rules on a nightly basisCRON=1We are now going to set up Amavis to use the database from Postfix Admin to identify mail that is arriving for local delivery. By default, SpamAssassin and Amavis will only check mail that is determined to be arriving for local delivery. Because we are set up to use virtual user mailboxes, we have to tell the services where to locate the user accounts.
To do this, we need to update the configuration file
/etc/amavis/conf.d/50-user
.nano /etc/amavis/conf.d/50-userReplace the contents of this configuration file with the below. Be sure to update the MySQL database password to use the password for the database user “mail” that you entered in Step #7.
use strict; ## Place your configuration directives here. They will override those in# earlier files.## See /usr/share/doc/amavisd-new/ for documentation and examples of# the directives you can use in this file# # Three concurrent processes. This should fit into the RAM available on an# AWS micro instance. This has to match the number of processes specified# for Amavis in /etc/postfix/master.cf.$max_servers =3; # Add spam info headers if at or above that level - this ensures they# are always added.$sa_tag_level_deflt =-9999; # Check the database to see if mail is for local delivery, and thus# should be spam checked.@lookup_sql_dsn =( ['DBI:mysql:database=mail;host=127.0.0.1;port=3306', 'mail', '']);$sql_select_policy ='SELECT domain from domain WHERE CONCAT("@",domain) IN (%k)'; # Uncomment to bump up the log level when testing.# $log_level =2; #------------ Do not modify anything below this line -------------1; # ensure a defined return Once done, save and exit the configuration file.
We will now need to restart the Amavis and SpamAssassin services so that they see the new configuration settings.
service amavis restartservices spamassassin restart[Back to top]
13 – Configuring Postfix
We are now ready to configure the Postfix mail server. Postfix handles all of the incoming and outgoing mail via the SMTP protocol, and we are going to configure it to integrate will all of the other software packages that we have just configured.
From a high level view, we are needing Postfix to hand off incoming mail to the SpamAssassin and ClamAV scanners for filtering, and then to pass unblocked mail messages on to the Dovecot services for final mailbox delivery. Postfix will also authenticate the virtual users who connect via SMTP in order to send email messages.
We are going to create a definition file for Postfix to identify users and mailboxes. Please note that the “hosts” directive in these configuration files must be exactly the same as the “bind-address” in the
/etc/mysql/my.cnf
configuration files.First, let’s look up the value of the bind-address in the MySQL configuration files.
cat /etc/mysql/my.cnf | grep bind-address<Now that we have the configuration value, we are going to create the required Postfix definition files.
Copy and paste the content for each file. Make sure to update the password value with the password for the database user “mail” that you entered in Step #7.
/etc/postfix/mysql_virtual_alias_domainaliases_maps.cf
nano /etc/postfix/mysql_virtual_alias_domainaliases_maps.cfuser =mail password =hosts =127.0.0.1 dbname =mail 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 Once done, save and exit the configuration file.
/etc/postfix/mysql_virtual_alias_maps.cf
nano /etc/postfix/mysql_virtual_alias_maps.cfuser =mailpassword =hosts =127.0.0.1dbname =mailtable =aliasselect_field =gotowhere_field =addressadditional_conditions =and active ='1' Once done, save and exit the configuration file.
/etc/postfix/mysql_virtual_domains_maps.cf
nano /etc/postfix/mysql_virtual_domains_maps.cfuser =mailpassword =hosts =127.0.0.1dbname =mailtable =domainselect_field =domainwhere_field =domainadditional_conditions =and backupmx ='0' and active ='1' Once done, save and exit the configuration file.
/etc/postfix/mysql_virtual_mailbox_domainaliases_maps.cf
nano /etc/postfix/mysql_virtual_mailbox_domainaliases_maps.cfuser =mailpassword =hosts =127.0.0.1dbname =mailquery =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 Once done, save and exit the configuration file.
/etc/postfix/mysql_virtual_mailbox_maps.cf
nano /etc/postfix/mysql_virtual_mailbox_maps.cfuser =mailpassword =hosts =127.0.0.1dbname =mailtable =mailboxselect_field =CONCAT(domain, '/', local_part)where_field =usernameadditional_conditions =and active ='1' Once done, save and exit the configuration file.
We are now going to create the Postfix header-checking directives. These directives remove certain headers when relaying mail through the system. This helps improve privacy for sending users by removing specific headers like origin IP Address and the mail software identifiers. Copy and paste the below content into the file.
nano /etc/postfix/header_checks/^Received:/ IGNORE/^User-Agent:/ IGNORE/^X-Mailer:/ IGNORE/^X-Originating-IP:/ IGNORE/^x-cr-[a-z]*:/ IGNORE/^Thread-Index:/ IGNOREOnce done, save and exit.
We are now ready to make some changes to the system default Postfix
/etc/postfix/main.cf
configuration file.This file contains a large amount of complex choices and options for a Postfix server installation. It is far beyond the scope of this article to explain every option or best practice available, so we strongly suggest that you read through the Postfix configuration options
/usr/share/postfix/main.cf.dist
or the software vendor online manual. O’Reilly has also published a very good book named Postfix:The Definitive Guide .First, we are going to create a backup of the original
main.cf
configuration file and then create a new copy of the file.mv /etc/postfix/main.cf /etc/postfix/main.cf.originalnano /etc/postfix/main.cfNow, copy the below content into the
/etc/postfix/main.cf
configuration file.# See /usr/share/postfix/main.cf.dist for a commented, more complete version # The first text sent to a connecting process.smtpd_banner =$myhostname ESMTP $mail_namebiff =no# appending .domain is the MUA's job.append_dot_mydomain =noreadme_directory =no # SASL parameters# ---------------------------------# Use Dovecot to authenticate.smtpd_sasl_type =dovecot# Referring to /var/spool/postfix/private/authsmtpd_sasl_path =private/authsmtpd_sasl_auth_enable =yesbroken_sasl_auth_clients =yessmtpd_sasl_security_options =noanonymoussmtpd_sasl_local_domain =smtpd_sasl_authenticated_header =yes # TLS parameters# --------------------------------- # Replace this with your SSL certificate path if you are using one.smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pemsmtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key# The snakeoil self-signed certificate has no need for a CA file. But# if you are using your own SSL certificate, then you probably have# a CA certificate bundle from your provider. The path to that goes# here.#smtpd_tls_CAfile=/path/to/ca/file smtp_tls_note_starttls_offer =yessmtpd_tls_loglevel =1smtpd_tls_received_header =yessmtpd_tls_session_cache_timeout =3600stls_random_source =dev:/dev/urandom#smtpd_tls_session_cache_database =btree:${data_directory}/smtpd_scache#smtp_tls_session_cache_database =btree:${data_directory}/smtp_scache # Note that forcing use of TLS is going to cause breakage - most mail servers# don't offer it and so delivery will fail, both incoming and outgoing. This is# unfortunate given what various governmental agencies are up to these days. # These are Postfix 2.2 only.## Enable (but don't force) use of TLS on incoming smtp connections.smtpd_use_tls =yessmtpd_enforce_tls =no# Enable (but don't force) use of TLS on outgoing smtp connections.smtp_use_tls =yessmtp_enforce_tls =no # These are Postfix 2.3 and later.## Enable (but don't force) all incoming smtp connections to use TLS.smtpd_tls_security_level =may# Enable (but don't force) all outgoing smtp connections to use TLS.smtp_tls_security_level =may # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for# information on enabling SSL in the smtp client. # SMTPD parameters# --------------------------------- # Uncomment the next line to generate "delayed mail" warnings#delay_warning_time =4h# will it be a permanent error or temporaryunknown_local_recipient_reject_code =450# how long to keep message on queue before return as failed.# some have 3 days, I have 16 days as I am backup server for some people# whom go on holiday with their server switched off.maximal_queue_lifetime =7d# max and min time in seconds between retries if connection failedminimal_backoff_time =1000smaximal_backoff_time =8000s# how long to wait when servers connect before receiving rest of datasmtp_helo_timeout =60s# how many address can be used in one message.# effective stopper to mass spammers, accidental copy in whole address list# but may restrict intentional mail shots.smtpd_recipient_limit =16# how many error before back off.smtpd_soft_error_limit =3# how many max errors before blocking it.smtpd_hard_error_limit =12 # This next set are important for determining who can send mail and relay mail# to other servers. It is very important to get this right - accidentally producing# an open relay that allows unauthenticated sending of mail is a Very Bad Thing.## You are encouraged to read up on what exactly each of these options accomplish. # Requirements for the HELO statementsmtpd_helo_restrictions =permit_mynetworks, warn_if_reject reject_non_fqdn_hostname, reject_invalid_hostname, permit# Requirements for the sender detailssmtpd_sender_restrictions =permit_sasl_authenticated, permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit# Requirements for the connecting server# This is primarily the RBL (Realtime Blacklist) Filteringsmtpd_client_restrictions =reject_rbl_client b.barracudacentral.org, reject_rbl_client zen.spamhaus.org, reject_rbl_client spam.dnsbl.sorbs.net# Requirement for the recipient address. Note that the entry for# "check_policy_service inet:127.0.0.1:10023" enables Postgrey.smtpd_recipient_restrictions =reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permitsmtpd_data_restrictions =reject_unauth_pipelining# This is a new option as of Postfix 2.10+, and is required in addition to# smtpd_recipient_restrictions for things to work properly in this setup.smtpd_relay_restrictions =reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permit # require proper helo at connectionssmtpd_helo_required =yes# waste spammers time before rejecting themsmtpd_delay_reject =yesdisable_vrfy_command =yes # General host and delivery info# ---------------------------------- myhostname =mail.example.commyorigin =/etc/hostname# Some people see issues when setting mydestination explicitly to the server# subdomain, while leaving it empty generally doesn't hurt. So it is left empty here.# mydestination =mail.example.com, localhostmydestination =# If you have a separate web server that sends outgoing mail through this# mailserver, you may want to add its IP address to the space-delimited list in# mynetworks, e.g. as 111.222.333.444/32.mynetworks =127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128mailbox_size_limit =0recipient_delimiter =+inet_interfaces =allmynetworks_style =host # This specifies where the virtual mailbox folders will be located.virtual_mailbox_base =/var/vmail# This is for the mailbox location for each user. The domainaliases# map allows us to make use of Postfix Admin's domain alias feature.virtual_mailbox_maps =mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf, mysql:/etc/postfix/mysql_virtual_mailbox_domainaliases_maps.cf# and their user idvirtual_uid_maps =static:150# and group idvirtual_gid_maps =static:8# This is for aliases. The domainaliases map allows us to make# use of Postfix Admin's domain alias feature.virtual_alias_maps =mysql:/etc/postfix/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/mysql_virtual_alias_domainaliases_maps.cf# This is for domain lookups.virtual_mailbox_domains =mysql:/etc/postfix/mysql_virtual_domains_maps.cf # Integration with other packages# --------------------------------------- # Tell postfix to hand off mail to the definition for dovecot in master.cfvirtual_transport =dovecotdovecot_destination_recipient_limit =1 # Use amavis for virus and spam scanningcontent_filter =amavis:[127.0.0.1]:10024 # Header manipulation# -------------------------------------- # Getting rid of unwanted headers. See:https://posluns.com/guides/header-removal/header_checks =regexp:/etc/postfix/header_checks# getting rid of x-original-toenable_original_recipient =noOnce done, save and exit.
We are now ready to move on to the Postfix
/etc/postfix/master.cf
configuration file. This configuration file also contains a large amount of complex choices and options for a Postfix server installation that is far beyond the scope of this article to explain.We are going to create a backup of the original
master.cf
configuration file and then create a new file.mv /etc/postfix/master.cf /etc/postfix/master.cf.originalnano /etc/postfix/master.cfNow, copy the below content into the
/etc/postfix/master.cf
configuration file.## Postfix master process configuration file. For details on the format# of the file, see the master(5) manual page (command:"man 5 master").## Do not forget to execute "postfix reload" after editing this file.## ==========================================================================# service type private unpriv chroot wakeup maxproc command + args# (yes) (yes) (yes) (never) (100)# ==========================================================================# SMTP on port 25, unencrypted.smtp inet n - - - - smtpd#smtp inet n - - - 1 postscreen#smtpd pass - - - - - smtpd#dnsblog unix - - - - 0 dnsblog#tlsproxy unix - - - - 0 tlsproxy # SMTP with TLS on port 587.submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_enforce_tls=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject -o smtpd_sasl_tls_security_options=noanonymous # SMTP over SSL on port 465.smtps inet n - - - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_tls_auth_only=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject -o smtpd_sasl_security_options=noanonymous,noplaintext -o smtpd_sasl_tls_security_options=noanonymous #628 inet n - - - - qmqpdpickup fifo n - - 60 1 pickup -o content_filter=-o receive_override_options=no_header_body_checkscleanup unix n - - - 0 cleanupqmgr fifo n - n 300 1 qmgr#qmgr fifo n - n 300 1 oqmgrtlsmgr unix - - - 1000? 1 tlsmgrrewrite unix - - - - - trivial-rewritebounce unix - - - - 0 bouncedefer unix - - - - 0 bouncetrace unix - - - - 0 bounceverify unix - - - - 1 verifyflush unix n - - 1000? 0 flushproxymap unix - - n - - proxymapproxywrite unix - - n - 1 proxymapsmtp unix - - - - - smtprelay unix - - - - - smtp# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5showq unix n - - - - showqerror unix - - - - - errorretry unix - - - - - errordiscard unix - - - - - discardlocal unix - n n - - localvirtual unix - n n - - virtuallmtp unix - - - - - lmtpanvil unix - - - - 1 anvilscache unix - - - - 1 scache## ====================================================================# Interfaces to non-Postfix software. Be sure to examine the manual# pages of the non-Postfix software to find out what options it wants.## Many of the following services use the Postfix pipe(8) delivery# agent. See the pipe(8) man page for information about ${recipient}# and other message envelope options.# ====================================================================## maildrop. See the Postfix MAILDROP_README file for details.# Also specify in main.cf:maildrop_destination_recipient_limit=1#maildrop unix - n n - - pipe flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}## ====================================================================## Recent Cyrus versions can use the existing "lmtp" master.cf entry.## Specify in cyrus.conf:# lmtp cmd="lmtpd -a" listen="localhost:lmtp" proto=tcp4## Specify in main.cf one or more of the following:# mailbox_transport =lmtp:inet:localhost# virtual_transport =lmtp:inet:localhost## ====================================================================## Cyrus 2.1.5 (Amos Gouaux)# Also specify in main.cf:cyrus_destination_recipient_limit=1##cyrus unix - n n - - pipe# user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}## ====================================================================# Old example of delivery via Cyrus.##old-cyrus unix - n n - - pipe# flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}## ====================================================================## See the Postfix UUCP_README file for configuration details.#uucp unix - n n - - pipe flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)## Other external delivery methods.#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/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipientscalemail-backend unix - n n - 2 pipe flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}mailman unix - n n - - pipe flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user} # The next two entries integrate with Amavis for anti-virus/spam checks.amavis unix - - - - 3 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes -o max_use=20127.0.0.1:10025 inet n - - - - smtpd -o content_filter=-o local_recipient_maps=-o relay_recipient_maps=-o smtpd_restriction_classes=-o smtpd_delay_reject=no -o smtpd_client_restrictions=permit_mynetworks,reject -o smtpd_helo_restrictions=-o smtpd_sender_restrictions=-o smtpd_recipient_restrictions=permit_mynetworks,reject -o smtpd_data_restrictions=reject_unauth_pipelining -o smtpd_end_of_data_restrictions=-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 smtpd_client_connection_count_limit=0 -o smtpd_client_connection_rate_limit=0 -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks # Integration with Dovecot - hand mail over to it for local delivery, and# run the process under the vmail user and mail group.dovecot unix - n n - - pipe flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/dovecot-lda -d $(recipient)Once done, save and exit.
We are now ready to restart all of the mail services and test the server.
service postfix restartservice spamassassin restartservice clamav-daemon restartservice amavis restartservice dovecot restartWhile testing your new mail server, make sure to watch the log files closely for any errors or unusual responses.
The mail server log files are located here:
- General Logging:
/var/log/mail.log
- Error Logging:
/var/log/mail.err
[Back to top]
14 – Reverse DNS Lookup
You will now need to set up reverse DNS lookup for your mail server.
Reverse DNS is IP-address-to-domain-name mapping – the opposite of forward (normal) DNS which maps domain names to IP addresses. Reverse DNS is mostly used by people for such things as tracking where a website visitor came from or where an email message originated, for example. Reverse DNS is also important for mail server applications. Many email servers on the Internet are configured to reject incoming emails from any IP address which does not have reverse DNS record configured.
Unless you also administer your own DNS server, you can update reverse DNS with your ISP (Internet Service Provider) or via the hosting provider of your server.
[Back to top]
15 – Install RoundCube Webmail
Now we are going to install the RoundCube Webmail application. This application will allow your remote users to connect to their mailbox through a web browser.
apt-get install roundcube roundcube-mysql roundcube-plugins roundcube-plugins-extra
During the installation process, the system will ask you the prerequisite install questions. Note:you will need the password for the MySQL root user you set up in Step 2.
Configure database for roundcube with dbconfig-common?>> Select 'YES'Database type to be used by roundcube:>> Select 'mysql'Password of the database's administrative user:>> Enter the 'root' MySQL password that you created.MySQL application password for roundcube:>> Enter a new secure password for the RoundCube application to use.
Once you are finished with the pre-installation questions, you should see the following output. Double check the output to make sure there are not errors posted during the installation process.
dbconfig-common:writing config to /etc/dbconfig-common/roundcube.conf Creating config file /etc/dbconfig-common/roundcube.conf with new versionCreating config file /etc/roundcube/debian-db.php with new versiongranting access to database roundcube for [email protected]:success.verifying access for [email protected]:success.creating database roundcube:success.verifying database roundcube exists:success.populating database via sql... done.dbconfig-common:flushing administrative passwordCreating config file /etc/roundcube/main.inc.php with new versionapache2_invoke:Enable configuration roundcube.conf * Reloading web server apache2 * * Reloading web server apache2 * Setting up roundcube (0.9.5-4) ...Setting up roundcube-plugins (0.9.5-4) ...Setting up roundcube-plugins-extra (0.9.2-20130819) ...Processing triggers for dictionaries-common (1.20.5) ...aspell-autobuildhash:processing:en [en-common]aspell-autobuildhash:processing:en [en-variant_0]aspell-autobuildhash:processing:en [en-variant_1]aspell-autobuildhash:processing:en [en-variant_2]aspell-autobuildhash:processing:en [en-w_accents-only]aspell-autobuildhash:processing:en [en-wo_accents-only]aspell-autobuildhash:processing:en [en_CA-variant_0]aspell-autobuildhash:processing:en [en_CA-variant_1]aspell-autobuildhash:processing:en [en_CA-w_accents-only]aspell-autobuildhash:processing:en [en_CA-wo_accents-only]aspell-autobuildhash:processing:en [en_GB-ise-w_accents-only]aspell-autobuildhash:processing:en [en_GB-ise-wo_accents-only]aspell-autobuildhash:processing:en [en_GB-ize-w_accents-only]aspell-autobuildhash:processing:en [en_GB-ize-wo_accents-only]aspell-autobuildhash:processing:en [en_GB-variant_0]aspell-autobuildhash:processing:en [en_GB-variant_1]aspell-autobuildhash:processing:en [en_US-w_accents-only]aspell-autobuildhash:processing:en [en_US-wo_accents-only]Setting up aspell (0.60.7~20110707-1ubuntu1) ...Processing triggers for dictionaries-common (1.20.5) ...Setting up aspell-en (7.1-0-1) ...Processing triggers for libc-bin (2.19-0ubuntu6.6) ...Processing triggers for dictionaries-common (1.20.5) [email protected]#
Next, we need to customize some of the RoundCube configuration files. First, we are going to add the RoundCube application into our current Apache configuration files using path alias directives. The default configuration file is installed at /etc/apache2/conf-available/roundcube.conf
nano /etc/apache2/conf-available/roundcube.conf
We now need to remove the two comment flags in front of the alias directives. If you would like to use a different alias name, you can change that here as well. The default alias will use the URL http://<your-server-url>/roundcube/
Alias /roundcube/program/js/tiny_mce/ /usr/share/tinymce/www/ Alias /roundcube /var/lib/roundcube
Once done, save and exit the file.
Now we are going to modify the /etc/roundcube/main.inc.php
configuration file. This file is where you can customize the RoundCube advanced settings.
nano /etc/roundcube/main.inc.php
Locate the following directives and update the values to match the following.
$rcmail_config['default_host'] ='localhost';$rcmail_config['default_port'] =143;$rcmail_config['smtp_server'] ='localhost';$rcmail_config['smtp_port'] =25;$rcmail_config['smtp_user'] ='%u';$rcmail_config['smtp_pass'] ='%p';$rcmail_config['force_https'] =true;$rcmail_config['use_https'] =true;
Once done, save and exit the configuration file.
We are now going to enable the php5-mcrypt
module in Apache. This will allow for the RoundCube webmail session to use encrypted login sessions. You will also need to restart the Apache service.
php5enmod mcryptservice apache2 restart
You should now be able to use your new RoundCube webmail application for sending and receiving message.
[Back to top]
Congratulations!
You have now setup a fully functional and secure mail server.