Postal est un serveur de messagerie complet gratuit et open source pour l'envoi et la réception d'e-mails. Il est écrit en Ruby et JavaScript. Vous pouvez facilement installer Postal sur votre propre serveur. Il vous aide également à fournir les informations DNS correctes nécessaires pour réduire les spams. La poste est utilisée par de nombreuses organisations pour envoyer et recevoir des e-mails au quotidien.
Dans ce tutoriel, nous allons installer Postal Mail Server sur Ubuntu 17.04.
Prérequis
- Serveur Ubuntu 17.04 minimal. 8 Go de RAM recommandés.
- Privilèges root. Ce guide est écrit en tant qu'utilisateur root, si vous êtes connecté en tant qu'utilisateur sudo, exécutez sudo -i.
- un nom de domaine pointant vers votre serveur.
Mettre à jour le système de base
Avant d'installer un package, il est recommandé de mettre à jour les packages et le référentiel à l'aide de la commande suivante.
apt update && apt -y upgrade
shutdown -r now
Une fois votre système mis à jour, poursuivez l'installation de Ruby.
Installer Ruby
Postal est écrit en Ruby, il est donc nécessaire d'installer Ruby 2.3 ou supérieur sur votre système. Dans ce tutoriel, nous allons installer la dernière version de Ruby en utilisant RVM. Exécutez la commande suivante pour ajouter la clé GPG de RVM sur votre serveur.
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
Installez maintenant RVM en utilisant la commande suivante.
curl -sSL https://get.rvm.io | bash -s stable
Pour utiliser RVM immédiatement, vous devrez exécuter la commande suivante.
source /etc/profile.d/rvm.sh
Récupérez maintenant la liste de Ruby en utilisant la commande suivante.
rvm list known
Vous verrez la sortie suivante :
# MRI Rubies [ruby-]1.8.6[-p420] [ruby-]1.8.7[-head] # security released on head [ruby-]1.9.1[-p431] [ruby-]1.9.2[-p330] [ruby-]1.9.3[-p551] [ruby-]2.0.0[-p648] [ruby-]2.1[.10] [ruby-]2.2[.6] [ruby-]2.3[.3] [ruby-]2.4[.0] ruby-head
Installez maintenant la dernière version de Ruby dans la liste à l'aide de la commande suivante.
rvm install 2.4
Utilisez la version Ruby à l'aide de la commande suivante.
rvm use 2.4
Vous pouvez vérifier la version de Ruby en utilisant la commande suivante.
ruby -v
Vous devriez voir la sortie suivante si Ruby est installé avec succès.
[email protected]:~# ruby -v ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]
Installer Ruby Gems
Pour exécuter Postel sur votre serveur, vous devrez installer bundler et procodile sur votre serveur. bundler est un gestionnaire de dépendances pour les applications ruby gem. procodile est un outil de gestion de processus pour les applications Ruby. Installez les deux applications à l'aide des commandes suivantes.
gem install bundler
gem install procodile
Installer le serveur de base de données MariaDB
MariaDB est un fork du serveur de base de données MySQL. MySQL est un logiciel de système de gestion de base de données relationnelle utilisé pour stocker des données sous forme de tableau. Pour installer MariaDB sur votre serveur, exécutez :
apt -y install mariadb-client mariadb-server libmysqlclient-dev
Exécutez les commandes suivantes pour démarrer MariaDB et lui permettre de démarrer au démarrage.
systemctl start mariadb
systemctl enable mariadb
Exécutez maintenant les commandes suivantes pour sécuriser votre installation MariaDB.
mysql_secure_installation
La commande ci-dessus exécutera un script pour sécuriser la nouvelle installation de MariaDB. Le script demandera le mot de passe de l'utilisateur root existant, nous venons d'installer MariaDB, le mot de passe root n'est pas défini, appuyez simplement sur Entrée pour continuer.
Le script vous demandera si vous souhaitez définir un mot de passe root pour votre installation MariaDB, choisissez y et définissez un mot de passe fort pour l'installation. La plupart des questions sont explicites et vous devez répondre oui ou y à toutes les questions.
Configurer la base de données pour la poste
Pour créer une base de données pour Postal, nous devrons d'abord nous connecter à la ligne de commande MySQL. Exécutez la commande suivante pour le même.
mysql -u root -p
La commande ci-dessus se connectera au shell MySQL de l'utilisateur root, il demandera le mot de passe de l'utilisateur root. Fournissez le mot de passe pour vous connecter. Exécutez maintenant la requête suivante pour créer une nouvelle base de données pour votre installation Postal.
CREATE DATABASE postal CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
La requête ci-dessus créera une nouvelle base de données nommée postal. Assurez-vous d'utiliser un point-virgule à la fin de chaque requête car la requête se termine toujours par un point-virgule.
Fournissez maintenant tous les privilèges à votre utilisateur de base de données sur la base de données que vous avez créée. Exécutez la commande suivante.
GRANT ALL ON `postal`.* TO `postal`@`127.0.0.1` IDENTIFIED BY "StrongPassword";
Remplacez StrongPassword par un mot de passe très fort et sécurisé.
La base de données sera automatiquement écrite par Postal, mais pour cela, nous devrons fournir les autorisations appropriées aux utilisateurs de Postal. Exécutez la commande suivante pour accorder des privilèges à tous les utilisateurs qui commencent par postal-.
GRANT ALL PRIVILEGES ON `postal-%` . * to `postal`@`127.0.0.1` IDENTIFIED BY "StrongPassword";
Exécutez maintenant la commande suivante pour appliquer immédiatement les modifications sur les privilèges de la base de données.
FLUSH PRIVILEGES;
Quittez l'invite MySQL à l'aide de la commande suivante.
EXIT;
Installer RabbitMQ
RabbitMQ est écrit en langage Erlang, dans ce tutoriel, nous allons installer la dernière version d'Erlang sur le serveur. Installez Erlang en utilisant la commande suivante.
apt -y install erlang
Importez la clé GPG en exécutant :
curl -sL https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -
Ajoutez maintenant le référentiel RabbitMQ en exécutant la commande suivante :
add-apt-repository 'deb http://www.rabbitmq.com/debian/ testing main'
Mettez à jour l'index du référentiel en exécutant la commande suivante.
apt update
Vous pouvez maintenant installer RabbitMQ en exécutant la commande suivante.
apt -y install rabbitmq-server
RabbitMQ est maintenant installé sur votre système.
Configurer RabbitMQ
Vous pouvez démarrer le processus du serveur RabbitMQ en exécutant la commande suivante.
systemctl start rabbitmq-server
Pour démarrer automatiquement RabbitMQ au démarrage, exécutez la commande suivante.
systemctl enable rabbitmq-server
Exécutez maintenant la commande suivante pour créer un hôte virtuel pour Postal dans le serveur RabbitMQ.
rabbitmqctl add_vhost /postal
Ajoutez maintenant un utilisateur RabbitMQ pour Postal en exécutant la commande suivante.
rabbitmqctl add_user postal StrongPassword
Remplacer StrongPassword est un mot de passe très fort.
Définissez maintenant l'autorisation appropriée sur l'hôte virtuel RabbitMQ pour l'utilisateur RabbitMQ.
rabbitmqctl set_permissions -p /postal postal ".*" ".*" ".*"
Installer Git et Node.js
Git sera utilisé pour récupérer le package d'installation et quelques dépendances. Exécutez la commande suivante pour installer Git sur votre système.
apt -y install git
Vous pouvez vérifier si Git est installé avec succès en vérifiant la version à l'aide de la commande suivante.
git --version
Vous devriez obtenir la sortie suivante.
[email protected]:~# git --version git version 2.11.0
Node.js sera utilisé pour compiler la bibliothèque JavaScript. Installez le logiciel à l'aide de la commande suivante.
apt -y install nodejs
Vous pouvez vérifier si Node.js est installé avec succès en exécutant la commande suivante.
nodejs -v
Vous devriez obtenir la sortie suivante.
[email protected]:~# nodejs -v v4.7.2
Maintenant que toutes les dépendances sont prêtes, vous pouvez installer Postal.
Installer Postal
Postal doit fonctionner comme son propre utilisateur isolé. Exécutez la commande suivante pour créer un nouvel utilisateur.
useradd -r -m -d /opt/postal -s /bin/bash postal
La commande ci-dessus créera un nouvel utilisateur avec le nom d'utilisateur postal et le répertoire personnel est défini sur /opt/postal.
Autorisez Ruby à écouter les ports privilégiés en exécutant la commande suivante.
setcap 'cap_net_bind_service=+ep' /usr/local/rvm/rubies/ruby-2.4.0/bin/ruby
Maintenant que tout est prêt, téléchargez la dernière archive postale et extrayez-la en tant qu'utilisateur postal à l'aide de la commande suivante.
wget https://postal.atech.media/packages/stable/latest.tgz -O - | sudo -u postal tar zxpv -C /opt/postal
Créez maintenant un lien symbolique vers le fichier binaire Postal en exécutant la commande suivante.
ln -s /opt/postal/bin/postal /usr/bin/postal
Vous pouvez maintenant interagir avec votre serveur postal à partir de n'importe quel répertoire. Pour exécuter les commandes suivantes, vous devrez vous connecter au shell en tant qu'utilisateur postal.
su - postal
Vous devrez maintenant installer toutes les dépendances ruby nécessaires pour exécuter l'application.
postal bundle /opt/postal/vendor/bundle
Une fois les dépendances installées, vous devrez générer les fichiers de configuration par défaut.
postal initialize-config
La commande ci-dessus générera la configuration requise pour votre installation Postal, y compris diverses clés et certificats. Cela générera également le fichier de configuration postal.yml par défaut. Vous devriez obtenir la sortie suivante.
[email protected]:~$ postal initialize-config Created example config file at /opt/postal/config/postal.yml Created new private key for Let's Encrypt Created new signing key for DKIM & HTTP requests Created new private key for default fast server TLS connections Created new self signed certificate for default fast server TLS connections
Vous devrez maintenant configurer quelques options dans la configuration de postal.yml.
nano /opt/postal/config/postal.yml
Recherchez la ligne suivante :
web: # The host that the management interface will be available on host: postal.example.com
Remplacez le nom d'hôte par votre nom de domaine réel. Plus loin, trouvez les lignes suivantes.
main_db: # Specify the connection details for your MySQL database host: 127.0.0.1 username: postal password: p0stalpassw0rd database: postal message_db: # Specify the connection details for your MySQL server that will be house the # message databases for mail servers. host: 127.0.0.1 username: postal password: p0stalpassw0rd prefix: postal
Modifiez le nom d'utilisateur, le mot de passe et le nom de la base de données en fonction de la base de données que vous avez créée. Plus loin, trouvez ces lignes :
rabbitmq: # Specify the connection details for your RabbitMQ server. host: 127.0.0.1 username: postal password: StrongPassword vhost: /postal
Modifiez la configuration ci-dessus en fonction du vhost et de l'utilisateur créés pour RabbitMQ. Ensuite, recherchez les configurations DNS.
dns: # Specifies the DNS record that you have configured. Refer to the documentation at # https://github.com/atech/postal/wiki/Domains-&-DNS-Configuration for further # information about these. mx_records: - mx.postal.example.com smtp_server_hostname: postal.example.com spf_include: spf.postal.example.com return_path: rp.postal.example.com route_domain: routes.postal.example.com track_domain: track.postal.example.com
Remplacez les domaines ci-dessus par les domaines réels que vous souhaitez utiliser avec le serveur de messagerie.
Enregistrez le fichier et quittez l'éditeur. Maintenant, initialisez la base de données et les autres ressources en exécutant :
postal initialize
Créez l'utilisateur Postal Administrator en exécutant la commande suivante.
postal make-user
La commande ci-dessus vous demandera l'adresse e-mail, le nom d'utilisateur et le mot de passe. La commande ci-dessus générera la sortie suivante.
[email protected]:~$ postal make-user Postal User Creator Enter the information required to create a new Postal user. This tool is usually only used to create your initial admin user. E-Mail Address : [email protected] First Name : Liptan Last Name : Biswas Initial Password: : ************** User has been created with e-mail address [email protected]
La configuration de la ligne de commande de Postal est maintenant terminée, vous pouvez démarrer le serveur à l'aide de la commande suivante.
postal start
Pour vérifier si les services sont démarrés correctement, exécutez la commande suivante.
postal status
Vous devriez obtenir la sortie suivante.
[email protected]:~$ postal status Procodile Version 1.0.17 Application Root /opt/postal Supervisor PID 5319 Started 2017-07-21 07:26:19 +0000 || web || Quantity 1 || Command bundle exec puma -C config/puma.rb || Respawning 5 every 3600 seconds || Restart mode usr1 || Log path none specified || Address/Port none || => web.1 Running 07:26 pid:5325 respawns:0 port:- tag:- || worker || Quantity 1 || Command bundle exec ruby script/worker.rb || Respawning 5 every 3600 seconds || Restart mode start-term || Log path none specified || Address/Port none || => worker.1 Running 07:26 pid:5327 respawns:0 port:- tag:- || cron || Quantity 1 || Command bundle exec rake postal:cron || Respawning 5 every 3600 seconds || Restart mode term-start || Log path none specified || Address/Port none || => cron.1 Running 07:26 pid:5329 respawns:0 port:- tag:- || smtp || Quantity 1 || Command bundle exec rake postal:smtp_server || Respawning 5 every 3600 seconds || Restart mode usr1 || Log path none specified || Address/Port none || => smtp.1 Running 07:26 pid:5332 respawns:0 port:- tag:- || requeuer || Quantity 1 || Command bundle exec rake postal:requeuer || Respawning 5 every 3600 seconds || Restart mode term-start || Log path none specified || Address/Port none || => requeuer.1 Running 07:26 pid:5334 respawns:0 port:- tag:-
Pour arrêter Postal, vous pouvez toujours exécuter la commande suivante.
postal stop
Configuration de Nginx en tant que proxy inverse
Pour des raisons de sécurité, l'interface Web et l'API Postal doivent être derrière tout serveur Web de production tel qu'Apache ou Nginx. Dans ce tutoriel, nous allons installer et configurer Nginx en tant que proxy inverse.
Installez le serveur Web Nginx en exécutant la commande suivante.
apt -y install nginx
Il est recommandé d'utiliser SSL pour accéder à Nginx. Vous pouvez soit utiliser un certificat auto-signé, soit un certificat SSL gratuit Let's Encrypt, soit un certificat commercial. Dans ce didacticiel, nous utiliserons le SSL gratuit de Let's Encrypt.
Installez le client Let's Encrypt, également connu sous le nom de certbot, en exécutant la commande suivante.
apt -y install certbot
Une fois l'installation terminée, exécutez la commande suivante pour obtenir des certificats de l'autorité de certification Let's Encrypt. Assurez-vous que le nom de domaine pointe vers votre serveur car certbot vérifiera l'autorité de domaine avant de fournir les certificats. Remplacez mail.example.com par votre nom de domaine réel.
certbot certonly --standalone -d mail.example.com
Une fois les certificats générés, ils seront stockés dans /etc/letsencrypt/live/mail.example.com.
Let's Encrypt SSL expire dans 90 jours, il est donc recommandé de définir un renouvellement automatique pour vos certificats. Exécutez la commande suivante pour ouvrir votre fichier crontab.
crontab -e
Entrez la ligne suivante dans le fichier crontab.
30 1 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log
La tâche cron ci-dessus s'exécutera automatiquement tous les lundis à 1h30 et si vos certificats arrivent à expiration, elle les renouvellera automatiquement.
Créez maintenant un nouveau bloc de serveur pour votre site Web en exécutant la commande suivante.
nano /etc/nginx/conf.d/mail.example.com.conf
Remplissez le fichier avec le contenu suivant.
server { listen [::]:80; listen 0.0.0.0:80; server_name mail.example.com; return 301 https://$host$request_uri; } server { listen [::]:443 ssl; listen 0.0.0.0:443 ssl; root /opt/postal/public; server_name mail.example.com; ssl_certificate /etc/letsencrypt/live/mail.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mail.example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.1 TLSv1; ssl_prefer_server_ciphers on; ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA512:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:ECDH+AESGCM:ECDH+AES256:DH+AESGCM:DH+AES256:RSA+AESGCM:!aNULL:!eNULL:!LOW:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS; location / { client_max_body_size 50M; try_files $uri $uri/index.html $uri.html @puma; } location /assets { add_header Cache-Control max-age=3600; } location @puma { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_pass http://127.0.0.1:5000; } }
Enregistrez le fichier et quittez l'éditeur. Maintenant, redémarrez le serveur Web nginx en exécutant.
systemctl restart nginx
Pour permettre à nginx de démarrer automatiquement au démarrage, exécutez la commande suivante.
systemctl enable nginx
Vous pouvez maintenant accéder à Postal sur en naviguant sur le site Web suivant via votre navigateur Web préféré.
https://mail.example.com
Configuration de la poste
Une fois que vous aurez parcouru le site ci-dessus, vous verrez l'interface suivante.
Entrez l'adresse e-mail et le mot de passe de l'utilisateur que vous avez créé précédemment. Une fois connecté, il vous sera demandé de créer une nouvelle organisation.
Indiquez le nom de l'organisation. Vous pouvez choisir d'utiliser le nom abrégé généré automatiquement ou vous pouvez en spécifier un vous-même. Les noms courts sont utilisés comme nom d'utilisateur lors de l'authentification avec le serveur SMTP. Il ne doit contenir que des lettres, des chiffres et un trait d'union.
Une fois l'organisation créée, il vous sera demandé de créer un nouveau serveur de messagerie.
Fournissez le nom, le nom abrégé et le mode du serveur de messagerie. En mode Live, tous les e-mails sont acheminés et livrés normalement mais en mode développement, ils ne sont visibles que dans l'interface Web.
Une fois que vous avez ajouté le serveur de messagerie, vous devrez ajouter un nouveau domaine dans le serveur de messagerie. Cliquez sur Domaines et créez un nouveau nom de domaine.
Une fois que vous avez ajouté le nom de domaine, vous devrez configurer le DNS pour le domaine. Vous devrez ajouter deux enregistrements TXT pour SPF et DKIM. Vous devrez également ajouter un enregistrement CNAME et un enregistrement MX pour le chemin de retour et la livraison du courrier. Une fois que vous avez configuré le DNS, cliquez sur Vérifier que mes enregistrements sont corrects bouton pour vérifier la configuration DNS.
Vous devez maintenant créer des informations d'identification SMTP pour envoyer et recevoir des e-mails.
Choisissez le type SMTP ou API. Indiquez le nom des informations d'identification SMTP, choisissez comment vous souhaitez gérer l'adresse e-mail.
Une fois terminé, vous pouvez revenir à Aperçu et vous verrez les informations nécessaires pour envoyer ou recevoir l'adresse e-mail.
Conclusion
Dans ce didacticiel, nous avons configuré avec succès un serveur de messagerie complet à l'aide de Postal sur Ubuntu 17.04. Vous pouvez utiliser le serveur de messagerie pour envoyer et recevoir les e-mails de votre organisation.