[LINUX] Je voulais créer rapidement un serveur de messagerie utilisable librement avec postfix + dovecot sur EC2

introduction

Je voulais un serveur de messagerie que je pourrais utiliser librement C'était tout ce que je voulais Ce serait comme ça ...

On me dit quel numéro est la décoction, J'ai essayé de créer un serveur de messagerie sur EC2

Il existe de nombreux articles similaires, Comme enregistrement de ce que j'ai fait Je vais également créer un nouvel article similaire

J'espère qu'une partie sera utile quelque part

Préparation 1

Lancer une instance sur EC2 d'AWS Cette fois, je l'ai construit avec t2.micro de cadre libre OS utilise AMAZON LINUX

Ouvrez le port qui a besoin d'entrée dans le groupe de sécurité de l'instance construite

POP3	TCP 110	0.0.0.0/0	-
POP3S	TCP 995	0.0.0.0/0	-
IMAPS	TCP 993	0.0.0.0/0	-
SSH     TCP 22  0.0.0.0/0	-
SMTP	TCP 25	0.0.0.0/0	-
IMAP	TCP 143	0.0.0.0/0	-
SMTPS	TCP 465	0.0.0.0/0	-
TCP personnalisé 587 0.0.0.0/0	-

Préparation 2

Cette fois, j'ai essayé de nommer le serveur de messagerie en utilisant le domaine obtenu par nom

DNS de gestion de domaine Name.com, Ajouter un enregistrement A et un enregistrement MX de l'instance créée cette fois

Un enregistrement Exemple) Un smtp.example.com 11.22.33.44

Enregistrement MX Exemple) MX example.com 10 smtp.example.com

AWS route 53 est également possible sans le faire par nom

Si vous envoyez simplement un e-mail, vous pouvez l'envoyer sans avoir à acquérir un domaine

Je ne connais pas les détails car je ne l'ai pas encore confirmé.

installation de postfix

Connectez-vous à l'instance créée ci-dessus avec SSH Mise à jour pour le moment

yum -y update

Et installation de postfix

yum -y install postfix

Modifiez le fichier de configuration après une installation réussie

# vi /etc/postfix/main.cf
Rechercher et modifier la partie suivante

myhostname = smtp.example.com

mydomain = exapmle.com

myorigin = $mydomain

inet_interfaces = all

inet_protocols = ipv4

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

smtpd_banner = $myhostname ESMTP unknown

home_mailbox = Maildir/

#Ajouté à la fin
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

message_size_limit = 10485760

# vi /etc/postfix/master.cf
submission inet n       -       n       -       -       smtpd #Décommenter
-o smtpd_sasl_auth_enable=yes #Décommenter

Créer automatiquement un répertoire de stockage de courrier lorsqu'un nouvel utilisateur d'envoi de courrier est créé
# mkdir -p /etc/skel/Maildir/{new,cur,tmp}

# chmod -R 700 /etc/skel/Maildir/

paramètres d'authentification smtp

# yum -y install cyrus-sasl

# chkconfig saslauthd on

# service saslauthd start

Contre-mesures pour les e-mails adressés à des utilisateurs inconnus

# vi /etc/postfix/main.cf

#Ajouté à la fin
local_recipient_maps =
luser_relay = unknown_user@localhost

# echo unknown_user: /dev/null >> /etc/aliases
# newaliases 

Démarrage SMTP

Arrêtez s'il y a sendmail
# chkconfig sendmail off

# service sendmail stop


# chkconfig postfix on

# service postfix start

installation de pigeonnier

# yum -y install dovecot
# vi /etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:~/Maildir #Changer la partie de commentaire

# vi /etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth = no #Changer en non
auth_mechanisms = plain login #Ajouter à l'existant

# vi /etc/dovecot/conf.d/10-master.conf

#Modifier l'existant
  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }

# vi /etc/dovecot/conf.d/10-ssl.conf

ssl = no #Changer en non

# chkconfig dovecot on

# service dovecot start

Ajouter un utilisateur de messagerie

# useradd user
# passwd user
Définissez un nouveau mot de passe utilisateur, mais définissez-le sur "utilisateur" pour le moment

# ls /home/user/Maildir/ #Assurez-vous que le répertoire est créé


Essayez de vous l'envoyer dans le test d'envoi de courrier
# sendmail [email protected]
To:[email protected]
From:[email protected]
Subject:test

myself test.

.

Assurez-vous d'avoir un e-mail
#ls /home/user/Maildir/new/

Assurez-vous que vous écoutez sur le port requis à ce stade.

# netstat -nl | grep tcp
tcp        0      0 0.0.0.0:587                 0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:110                 0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:143                 0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN

Essayez de recevoir avec le logiciel client de messagerie

Essayez de recevoir le courrier avec un logiciel de messagerie approprié tel que Thunderbird

Utilisateur: utilisateur Adresse e-mail: [email protected] Mot de passe: utilisateur

serveur pop: port 110 smtp.example.com serveur smtp: port 587 smtp.example.com

"Authentification par mot de passe normale" avec "sans protection SSL"

Rendre possible d'envoyer des e-mails à Gmail, etc.

À ce stade, vous pouvez vous envoyer du courrier, mais vous ne devriez pas pouvoir l'envoyer vers l'extérieur.

Ainsi, vous pouvez relayer le serveur smtp de Google pour envoyer des e-mails

# vi /etc/postfix/main.cf

relayhost = [smtp.gmail.com]:587 #Modifier la pièce existante

#Ajoutez plus à la fin
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_use_tls = yes

Utilisez votre propre compte Gmail pour authentifier Gmail

# vi /etc/postfix/sasl_passwd
[smtp.gmail.com]:587 [email protected]:password

Créer un fichier de hachage
# postmap /etc/postfix/sasl_passwd

Configurer pour autoriser les applications moins sécurisées dans votre compte Google

https://myaccount.google.com/lesssecureapps

Essayez d'envoyer un e-mail de test

# sendmail [email protected]
To:[email protected]
From:[email protected]
Subject:test

myself test.

.

Terminé si la transmission est réussie

Où je suis resté coincé

Le compte ne peut pas être synchronisé

Cause 1 Il a été arrêté par le FW du routeur

Une politique a été écrite pour arrêter la communication externe (25,110,143, etc.) sur le routeur de l'entreprise Il m'a fallu plusieurs heures pour le remarquer, et j'ai juste fait des ajustements inutiles.

Cause 2 arrêté par le groupe de sécurité

Le groupe de sécurité d'instance EC2 ne disposait pas de suffisamment de ports ouverts

Encore une fois, j'ai perdu quelques heures

Cause 2 Compatibilité du logiciel client?

J'essayais d'utiliser Outlook comme logiciel de synchronisation des comptes cette fois, mais il semble que l'authentification soit possible, mais je ne peux pas créer de compte. Le message sur Outlook est que le compte n'a pas pu être créé en raison d'un problème avec le serveur smtp. Le journal du serveur à ce moment-là est le suivant

Aug 14 14:54:03 ip-172-31-43-165 dovecot: auth: Debug: auth client connected (pid=22036)
Aug 14 14:54:03 ip-172-31-43-165 dovecot: auth: Debug: client in:AUTH#0111#011PLAIN#011service=pop3#011session=OZ2Cl9esN+lqmoDo#011lip=172.31.43.165#011rip=106.154.128.232#011lport=110#011rport=59703
Aug 14 14:54:03 ip-172-31-43-165 dovecot: auth: Debug: client passdb out: CONT#0111#011
Aug 14 14:54:03 ip-172-31-43-165 dovecot: auth: Debug: client in: CONT<hidden>
Aug 14 14:54:03 ip-172-31-43-165 dovecot: auth-worker(22037): Debug: Loading modules from directory: /usr/lib64/dovecot/auth
Aug 14 14:54:03 ip-172-31-43-165 dovecot: auth-worker(22037): Debug: Module loaded: /usr/lib64/dovecot/auth/lib20_auth_var_expand_crypt.so
Aug 14 14:54:03 ip-172-31-43-165 dovecot: auth-worker(22037): Debug: Module loaded: /usr/lib64/dovecot/auth/libdriver_sqlite.so
Aug 14 14:54:03 ip-172-31-43-165 dovecot: auth-worker(22037): Debug: pam(user,106.154.128.232,<OZ2Cl9esN+lqmoDo>): lookup service=dovecot
Aug 14 14:54:03 ip-172-31-43-165 dovecot: auth-worker(22037): Debug: pam(user,106.154.128.232,<OZ2Cl9esN+lqmoDo>): #1/1 style=1 msg=Password:
Aug 14 14:54:03 ip-172-31-43-165 dovecot: auth: Debug: client passdb out: OK#0111#011user=user#011
Aug 14 14:54:03 ip-172-31-43-165 dovecot: auth: Debug: master in: REQUEST#0111203240961#01122036#0111#011f2ecb8ac5535457503d22d0e493b0733#011session_pid=22038
Aug 14 14:54:03 ip-172-31-43-165 dovecot: auth-worker(22037): Debug: passwd(user,106.154.128.232,<OZ2Cl9esN+lqmoDo>): lookup
Aug 14 14:54:03 ip-172-31-43-165 dovecot: auth: Debug: master userdb out: USER#0111203240961#011user#011system_groups_user=user#011uid=502#011gid=502#011home=/home/user
Aug 14 14:54:03 ip-172-31-43-165 dovecot: pop3-login: Login: user=<user>, method=PLAIN, rip=106.154.128.232, lip=172.31.43.165, mpid=22038, session=<OZ2Cl9esN+lqmoDo>
Aug 14 14:54:03 ip-172-31-43-165 dovecot: pop3(user): Debug: Effective uid=502, gid=502, home=/home/user
Aug 14 14:54:03 ip-172-31-43-165 dovecot: pop3(user): Debug: Namespace inbox: type=private, prefix=, sep=, inbox=yes, hidden=no, list=yes, subscriptions=yes location=maildir:~/Maildir
Aug 14 14:54:03 ip-172-31-43-165 dovecot: pop3(user): Debug: maildir++: root=/home/user/Maildir, index=, indexpvt=, control=, inbox=/home/user/Maildir, alt=
Aug 14 14:54:03 ip-172-31-43-165 dovecot: pop3(user): Debug: INBOX: Mailbox opened because: POP3 INBOX
Aug 14 14:54:03 ip-172-31-43-165 dovecot: pop3(user): Disconnected: Logged out top=0/0, retr=0/0, del=0/13, size=15260

Je me suis demandé pourquoi cela semblait fonctionner et j'ai cherché sur Google Certaines personnes disent que les perspectives ne fonctionnent pas, mais que Thunderbird fonctionne. Quand j'ai mis Thunderbird dans mon PC et l'ai essayé, Ça a marché

Les paramètres des perspectives semblent être différents

Encore une fois (omis)

Page de référence

[EC2] Construction du serveur de messagerie (Postfix + Dovecot) Construction du serveur de messagerie (Postfix + Dovecot) Explication détaillée avec des expériences sur le serveur SMTP et le serveur POP Envoyer un e-mail à gmail avec Postfix

Recommended Posts

Je voulais créer rapidement un serveur de messagerie utilisable librement avec postfix + dovecot sur EC2
J'ai essayé de créer un environnement serveur qui fonctionne sous Windows 10
Je souhaite créer une file d'attente prioritaire pouvant être mise à jour avec Python (2.7)
Convertir des images du SDK FlyCapture en un formulaire pouvant être utilisé avec openCV
Je voulais créer une présentation intelligente avec Jupyter Notebook + nb present
J'ai fait un shuffle qui peut être réinitialisé (inversé) avec Python
J'ai essayé de l'étendre pour que la base de données puisse être utilisée avec le logiciel d'analyse de Wiire
J'ai créé un modèle de projet Python générique
Créez une application Web qui peut être facilement visualisée avec Plotly Dash
[Peut être fait en 10 minutes] Créez rapidement un site Web local avec Django
Je voulais faire un programme de notation polonaise inversée en Python (détermination de savoir si une chaîne de caractères peut être convertie en valeur numérique)
Notes pour créer des figures pouvant être publiées dans des revues avec matplotlib
J'ai essayé de créer une classe qui peut facilement sérialiser Json en Python
J'ai essayé de résumer les opérations susceptibles d'être utilisées avec numpy-stl
Comment installer la bibliothèque Python qui peut être utilisée par les sociétés pharmaceutiques
Types de fichiers pouvant être utilisés avec Go
Serveur de jeu avec deux PC
J'ai essayé de l'activer / de le désactiver en définissant "Créer un plug-in qui met en évidence les espaces pleine largeur avec Sublime Text 2".
J'ai essayé de créer facilement une image 3D de haute précision avec une seule photo [1]. (La profondeur peut maintenant être modifiée en PNG.)
[Mac] Je souhaite créer un serveur HTTP simple qui exécute CGI avec Python
[Python] J'ai essayé de créer automatiquement un rapport quotidien de YWT avec la messagerie Outlook
[Python] Introduction au scraping WEB | Résumé des méthodes pouvant être utilisées avec webdriver
J'ai essayé de faire une application mémo qui peut être pomodoro, mais un enregistrement de réflexion
Étapes pour créer rapidement un environnement d'apprentissage en profondeur sur Mac avec TensorFlow et OpenCV
Comment créer une propriété de relations qui peuvent être prefetch_related par des conditions spécifiques
Serveur de partage de fichiers réalisé avec Raspberry Pi pouvant être utilisé pour le travail à distance
Notes sur les connaissances Python utilisables avec AtCoder
Je souhaite créer manuellement une légende avec matplotlib
[Django] À propos des utilisateurs pouvant être utilisés sur un modèle
Statistiques simples qui peuvent être utilisées pour analyser l'effet des mesures sur les sites EC et les codes qui peuvent être utilisés dans le notebook jupyter
J'ai créé un outil pour générer automatiquement un diagramme de transition d'état pouvant être utilisé à la fois pour le développement Web et le développement d'applications
Une histoire que je voulais faire une fonction comme before_action utilisée dans les rails avec django [Débutant apprend python avec un livre de référence]
Comment configurer un serveur SMTP simple qui peut être testé localement en Python
J'ai écrit un module Ansible brut qui vous permet d'utiliser Virtualenv en installant Pythonz.
[Atcoder] [C ++] J'ai fait un outil d'automatisation de test qui peut être utilisé pendant le concours
J'ai écrit un script pour créer rapidement un environnement de développement pour Twitter Bot avec AWS Lambda + Python 2.7
Connexion SSH à un serveur privé à l'aide d'un serveur de plateforme dans EC2
J'ai essayé de créer automatiquement un rapport avec la chaîne de Markov
J'ai écrit rapidement un programme pour étudier la DI avec Python ①
Écoutez un roman qui sera sur Amazon Polly
Créez une API Web capable de fournir des images avec Django
J'ai étudié le prétraitement qui peut être fait avec PyCaret
J'ai créé un plug-in qui peut faire "Daruma-san tombé" avec Minecraft
Faisons un diagramme sur lequel on peut cliquer avec IPython
[Flask] J'ai essayé de résumer la "configuration docker-compose" qui peut être créée rapidement pour les applications Web
[Python] Dessinez des données d'altitude sur une surface sphérique avec Plotly et dessinez un globe qui peut être tourné en rond et en rond
Je l'ai fait parce que je veux des données JSON qui peuvent être utilisées librement dans les démos et les prototypes
Comprendre les probabilités et les statistiques qui peuvent être utilisées pour la gestion des progrès avec un programme python
À propos du fait que le résumé de la torche peut être vraiment utilisé lors de la construction d'un modèle avec Pytorch
Étapes rapides pour créer un environnement d'apprentissage automatique à l'aide de Jupyter Notebook sur macOS Sierra avec anaconda
J'ai essayé de créer une configuration RAID logicielle SATA qui démarre le système d'exploitation sur Ubuntu Server
Créez un programme qui peut générer votre image préférée avec Selenium
[Python] Créez un graphique qui peut être déplacé avec Plotly
J'ai fait un package qui peut comparer des analyseurs morphologiques avec Python
Je souhaite utiliser un caractère générique que je souhaite décortiquer avec Python remove
J'ai créé un serveur Web avec Razpai pour regarder des anime
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
Qiskit: Je veux créer un circuit qui crée des états arbitraires! !!