Comment créer un serveur de boîtes aux lettres

Table des matières

déployer

DNS

liste noire

Mailcow : dockerisé

Déployer Mailcow : dockerisé

Configuration de TLS pour Mailcow : dockerized

Mailu.io

générer le fichier de configuration

Déployer Mailu

Sécurité

S/MIME

OpenPGP

lecture recommandée


L'idée de construire un serveur de bureau de poste a toujours existé auparavant, mais je ne l'ai jamais essayée. Lorsque je suis passé d'Alibaba Cloud à Tencent Cloud lors de la fête nationale, j'ai essayé de l'utiliser  postfix et  dovecot de le construire directement. Après avoir essayé pendant environ 3 jours, j'ai été persuadé de le rejeter. J'ai également utilisé à nouveau la solution toute faite. Elle est enfin configurée et vous pouvez utiliser avec plaisir la boîte aux lettres auto-construite (vous pouvez faire semblant avec plaisir )

Mise à jour de la configuration de mailu. Comparé à mailcow, mailu peut utiliser la base de données de la machine hôte, mais la configuration de SMTPS / IMAPS / POP3S dans mailu n'est pas aussi simple et pratique que mailcow, et il n'y a aucune recherche à ce sujet. Actuellement, il n'est pas prévu de passer à mailu

Je prévois de ne plus maintenir le service de messagerie après avoir changé de serveur, en faisant comme si celui-ci n'existait pas

déployer

Commencez à créer le serveur. Le nom de domaine ( example.com) et l'adresse IP ( 1.1.1.1) sont  utilisés /mailcowci-dessous et le proxy inverse nginx de l'hôte est utilisé pour l'installation. Avant le déploiement, nous définissons d'abord certaines variables Shell pour une utilisation ultérieure. Veuillez modifier en fonction de votre besoins

path_to="/path/to"
mailcow_path="${path_to}/mailcow" # mailcow 所在目录
mailu_path="${path_to}/mailu"
mail_host="mail.example.com"
mail_ip="1.1.1.1"
db_user="example_user" # 数据库用户 (Mailu使用宿主机PostgreSQL时使用)
db_passwd="example_password" # 数据库密码 (Mailu使用宿主机PostgreSQL时使用)
db_name="example_db" # 数据库名称  (Mailu使用宿主机PostgreSQL时使用)
http_port="8080"
https_port="8443"
cert_path="/ssl/path/to/cert/" # 证书存放目录
cert_file="${cert_path}/cert.pem" # 域名证书
key_file="${cert_path}/key.pem" # 域名证书密钥
ca_file="${cert_path}/intermediate_CA.pem" # 域名证书颁发者证书

 De plus, étant donné que la messagerie Web  ne prend pas S/MIME bien  PGP/MIME en charge la messagerie Web , nous désactiverons la messagerie Web sur le serveur et utiliserons un client de messagerie local pour envoyer et recevoir des e-mails afin de mieux utiliser les fonctions de cryptage et de signature. Si nécessaire, veuillez activer vous-même la messagerie Web.

 

DNS

Les paramètres DNS sont la chose la plus importante pour un serveur de messagerie. Afin de nous permettre d'envoyer et de recevoir des e-mails, d'éviter que les e-mails soient rejetés ou qu'ils entrent dans la corbeille, qu'ils soient identifiés comme spam, etc., bien sûr, il n'entrera pas la boîte aux lettres spam si elle est configurée. , il y aura certainement des problèmes si elle n'est pas configurée.

En plus de la résolution DNS ci-dessus, vous devez également configurer  DKIM  et  PTR . DKIM est configuré après la création du service. PTR doit soumettre une demande d'ordre de travail à l'opérateur (c'est le cas pour Alibaba Cloud et Tencent Cloud). Si vous n'avez pas configuré la résolution ptr, vous figurez peut-être sur certaines listes noires.

DKIM est également la résolution DNS de type TXT. Une fois le déploiement terminé, DKIM est généré par le sélecteur spécifié, puis la résolution DNS est définie.

 

liste noire

L'envoi d'e-mails sur Internet n'est pas gratuit. Le service postal dispose d'un ensemble de mécanismes anti-spam. Lorsque votre adresse IP est sur liste noire, les e-mails envoyés à partir de cette adresse IP entreront facilement dans la boîte aux lettres de spam ou seront rejetés. Veuillez chérir votre adresse IP, mais vous peut essayer de détecter quels fournisseurs de services sont sur la liste noire et essayer de supprimer la liste noire. Voici quelques détections ou applications pour supprimer les URL anti-spam

 

Mailcow : dockerisé

 Mailcow .spam- anti  construit avec docker. Il intègre des fonctions telles que la poste, le webmail, la gestion et l' standard: dockerized  le package Docker dans les sources, ce qui est trop demander. . . La principale raison de la consommation de ressources est   et  , c'est-à-dire la fonction antivirus et la fonction de recherche, qui peuvent être désactivées si elles ne sont pas nécessaires.CentOS 7/8ClamAVSolr

 Les ports utilisés par Mailcow:dockerized sont listés ci-dessous (HTTP et HTTPS sont nos ports personnalisés)

 

Déployer Mailcow : dockerisé

Commencez maintenant à créer formellement le serveur de boîtes aux lettres

cd ${path_to}
git clone https://github.com/mailcow/mailcow-dockerized mailcow && cd mailcow
echo ${email_host} | ./generate_config.sh
sed -ie "s/HTTP_PORT=.*/HTTP_PORT=${http_port}/" mailcow.conf # HTTP端口
sed -ie "s/HTTPS_PORT=.*/HTTPS_PORT=${https_port}/" mailcow.conf # HTTPS端口
sed -i "s/TZ=.*/TZ=Asia\/Shanghai/" mailcow.conf # 时区
sed -i "s/SKIP_LETS_ENCRYPT=.*/SKIP_LETS_ENCRYPT=y/" mailcow.conf # 证书申请 (不需要)
sed -i "s/SKIP_SOGO=.*/SKIP_SOGO=y/" mailcow.conf # webmail (不需要)
sed -i "s/SKIP_SOLR=.*/SKIP_SOLR=n/" mailcow.conf # 搜索 (不需要)
sed -i "s/enable_ipv6: true/enable_ipv6: false/" docker-compose.yml # 关闭ipv6

 Le fichier de configuration Nginx est donné ci-dessous, veuillez vous référer à  la documentation officielle du fichier de configuration Apache

server {
  listen 80;
  listen [::]:80;
  server_name mail.example.com;
  return 301 https://$host$request_uri;
}
server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name mail.example.com;

  ssl_certificate /ssl/domain/cert.pem;
  ssl_certificate_key /ssl/domain/key.pem;
  ssl_session_timeout 2h;
  ssl_session_cache shared:mailcow:16m;
  ssl_session_tickets off;

  # See https://ssl-config.mozilla.org/#server=nginx for the latest ssl settings recommendations
  # An example config is given below
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ciphers HIGH:!aNULL:!MD5:!SHA1:!kRSA;
  ssl_prefer_server_ciphers off;

  location /Microsoft-Server-ActiveSync {
    proxy_pass http://127.0.0.1:8080/Microsoft-Server-ActiveSync;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_connect_timeout 75;
    proxy_send_timeout 3650;
    proxy_read_timeout 3650;
    proxy_buffers 24 256k;
    client_body_buffer_size 512k;
    client_max_body_size 0;
  }

  location / {
    proxy_pass http://127.0.0.1:8080/;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    client_max_body_size 0;
  }
}

Une fois tout ce qui précède terminé, la configuration de base de mailcow est terminée, il suffit de démarrer le service, le mot de passe utilisateur par défaut  admin / moohoo

cd ${mailcow_path}
docker-compose pull
docker-compose up -d

 

Configuration de TLS pour Mailcow : dockerized

Nous pouvons maintenant ajouter TLS pour les services SMTP et IMAP. Supposons que nous ayons  mail.example.com demandé un certificat pour le nom de domaine. Avant de configurer le certificat pour postfix et dovecot, nous devons stocker notre propre certificat et le certificat du fournisseur dans le même fichier dans l'ordre selon au document suffixe. , et le suffixe de fichier est  .pem , et stocké dans le dossier ssl de mailcow

cat ${cert_file} ${ca_file} > ${mailcow_path}/data/assets/ssl/cert.pem
cp ${key_file} ${mailcow_path}/data/assets/ssl/key.pem

 Une fois le certificat enregistré, configurez postfix et dovecot, puis redémarrez le service une fois la configuration terminée

# postfix
sed -i "s/smtp_tls_security_level.*/smtp_tls_security_level = dane/" data/conf/postfix/main.cf
sed -i "s/smtp_tls_CAfile.*/smtp_tls_CAfile = \/etc\/ssl\/mail\/cert.pem/" data/conf/postfix/main.cf
sed -i "s/smtp_tls_cert_file.*/smtp_tls_cert_file = \/etc\/ssl\/mail\/cert.pem/" data/conf/postfix/main.cf
sed -i "s/smtp_tls_key_file.*/smtp_tls_key_file = \/etc\/ssl\/mail\/key.pem/" data/conf/postfix/main.cf
sed -i "s/smtpd_tls_security_level.*/smtpd_tls_security_level = may/" data/conf/postfix/main.cf
sed -i "s/smtpd_tls_CAfile.*/smtpd_tls_CAfile = \/etc\/ssl\/mail\/cert.pem/" data/conf/postfix/main.cf
sed -i "s/smtpd_tls_cert_file.*/smtpd_tls_cert_file = \/etc\/ssl\/mail\/cert.pem/" data/conf/postfix/main.cf
sed -i "s/smtpd_tls_key_file.*/smtpd_tls_key_file = \/etc\/ssl\/mail\/key.pem/" data/conf/postfix/main.cf
# dovecot
sed -i "s/ssl_cert.*/ssl_cert = <\/etc\/ssl\/mail\/cert.pem/" data/conf/dovecot/dovecot.conf
sed -i "s/ssl_key.*/ssl_key = <\/etc\/ssl\/mail\/key.pem/" data/conf/dovecot/dovecot.conf
# restart
docker-compose restart postfix-mailcow dovecot-mailcow

 

Mailu.io

Mailu  est un serveur de messagerie standard léger construit avec docker, hérité de poste.io, prend en charge l'architecture x86 et intègre des fonctions de bureau de poste, de messagerie Web, de gestion et d'anti-spam. Webmail peut choisir roundcube, rainloop ou désactiver le webmail, tandis que la base de données prend en charge sqlite, MySQL et PostgreSQL, le plus important est que MySQL et PostgreSQL peuvent choisir d'utiliser un miroir ou un hôte (le miroir docker sera supprimé à partir de 1.9).

 

générer le fichier de configuration

Mailu fournit officiellement  la génération en ligne de fichiers de configuration , qui peuvent être générés selon nos besoins. Nous utiliserons Docker-Compose pour construire la version maître et télécharger les fichiers de configuration générés sur le serveur.

configuration initiale

Configuration initiale, comme le chemin, le nom de domaine principal, TLS, l'interface de gestion, etc., car j'aime personnellement générer des certificats TLS par moi-même, donc je choisis mail pour interdire à mailu de générer des certificats pour moi, mais crypte les e-mails avec TLS. mailu doit générer des certificats TLS, sélectionnez avec  letsencrypt des options

 

choisissez quelques fonctionnalités

        Pour la configuration des fonctions, nous avons désactivé le webmail, et vous pouvez choisir le webmail qui vous convient selon vos préférences personnelles. Les trois options restantes sont antivirus (tueur de mémoire), WebDAV et collecte de courrier, choisissez en fonction de vos propres besoins

 

exposer Mailu au monde

        Configurez l'adresse IP et le nom d'hôte, indiquez l'adresse IP de votre propre serveur dans l'adresse d'écoute et indiquez le nom d'hôte long du serveur dans le nom d'hôte

 

préférences de la base de données

        Paramètres de la base de données, ici nous choisissons d'utiliser le PostgreSQL de l'hôte, et l'URL est renseignée avec le sous-réseau que Docker ouvre par défaut sur l'hôte

 

Déployer Mailu

Maintenant, commencez à créer formellement le serveur de boîtes aux lettres, en supposant que vous avez téléchargé le fichier de configuration sur  mailu_path , modifions le fichier de configuration

sed -ie "s/MESSAGE_SIZE_LIMIT=.*/MESSAGE_SIZE_LIMIT=100000000/" mailu.env
sed -i "/::1/d" docker-compose.yml
sed -ie "s/${mail_ip}://g" docker-compose.yml
sed -ie "s/80:80/${http_port}:80/" docker-compose.yml # HTTP端口
sed -ie "s/443:443/${https_port}:443/" docker-compose.yml # HTTPS端口

Parce que l'option TLS configurée par mailu est mail, nous pouvons faire en sorte que le proxy inverse Nginx de l'hôte soit écouté par mailu-front

server {
  listen 80;
  listen [::]:80;
  server_name mail.example.com;
  return 301 https://$host$request_uri;
}
server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name mail.example.com;

  ssl_certificate /ssl/domain/cert.pem;
  ssl_certificate_key /ssl/domain/key.pem;
  # See https://ssl-config.mozilla.org/#server=nginx for the latest ssl settings recommendations
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ciphers HIGH:!aNULL:!MD5:!SHA1:!kRSA;
  ssl_prefer_server_ciphers off;
  ssl_session_timeout 2h;
  ssl_session_cache shared:mailu:8m;
  ssl_session_tickets off;

  proxy_set_header Host $http_host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto $scheme;

  location / {
    proxy_pass http://127.0.0.1:8080/;
  }
  location /admin {
    proxy_pass http://127.0.0.1:8080/admin/;
  }
  # location /webmail {
  #   proxy_pass http://127.0.0.1:8080/webmail/;
  # }
}

Le PostgreSQL de l'hôte doit également être configuré un peu

sudo adduser --disabled-login --gecos 'Mailu' ${db_user}
sudo -u postgres -H psql -d template1 -c "CREATE USER ${db_user} WITH PASSWORD '${db_passwd}' CREATEDB;"
sudo -u postgres -H psql -d template1 -c "CREATE DATABASE ${db_name} OWNER ${db_user};"
sudo -u postgres -H psql -h localhost -d ${db_name} -c "create extension citext;"
echo "host    ${db_name}    ${db_user}    192.168.203.0/24    md5" >> /etc/postgresql/12/main/pg_hba.conf
sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '0.0.0.0'/" /etc/postgresql/12/main/postgresql.conf
systemctl restart postgresql

 Une fois tout ce qui précède terminé, la configuration de base de mailu est terminée. Il vous suffit de démarrer le service et de définir le mot de passe administrateur en fonction de la dernière étape.

cd ${mailu_path}
docker-compose -p mailu up -d
docker-compose -p mailu exec admin flask mailu admin admin ${mail_host#*.} PASSWORD

 

Sécurité

Nous avons configuré TLS, notre messagerie est sécurisée pour le processus de transmission du courrier, mais pour le fournisseur de services, vous pouvez toujours parcourir le contenu de notre courrier à volonté, si vous souhaitez que le contenu important ne soit pas parcouru par le fournisseur de services, vous pouvez essayer pour chiffrer l'e-mail. Le cryptage des e-mails ne convertit pas les e-mails en un fichier avec un mot de passe, mais utilise une suite de cryptage asymétrique pour crypter, signer, etc. dans MUA. MTA est uniquement responsable de la transmission des e-mails et ne peut pas détecter le contenu des e-mails. Si vous souhaitez m'envoyer un e-mail crypté, veuillez enregistrer la clé publique suivante :

Étant donné que le cryptage des e-mails est un comportement MUA, généralement le Webmail du fournisseur de services ne prend pas en charge les e-mails cryptés. Si certains fournisseurs qui fournissent la fonction de cryptage vous demandent de télécharger la clé privée sur leur serveur, soyez vigilant, la clé privée peut décrypter votre e-mail. Les MUA courants prenant en charge le chiffrement sont répertoriés ci-dessous :

S/MIME

Secure Multifunctional Internet Mail Extensions (S/MIME) est un   protocole à clé asymétrique basé sur PKI  conforme au  format X.509 , fournissant des fonctions de signature numérique et de cryptage. Lors de l'envoi d'un e-mail, la signature numérique sera  smime.p7s envoyée en pièce jointe. Par exemple, la page Web de GMail prend en charge la vérification de la signature. S'il s'agit d'un e-mail crypté, l'intégralité de l'e-mail sera cryptée et  smime.p7m envoyée en pièce jointe. Avant que les deux parties ne s'envoient des informations, s'il n'y a pas de clé publique de l'autre partie, l'e-mail ne peut pas être chiffré. Elles doivent s'envoyer des e-mails signés pour échanger des clés publiques. Après avoir importé la clé publique, elles peuvent commencer envoyer des e-mails cryptés. Vous pouvez   demander un certificat S/MIME gratuit d'un an sur Actalis , qui est la première étape pour le cryptage de votre courrier électronique. Veuillez enregistrer le certificat appliqué (fichier .pfx), le mot de passe et le CRP.

Le certificat S/MIME demandé à Actalis est au  format PKCS  #12  , ce format est appelé  安全包裹 , généralement ce fichier est utilisé pour compresser la clé privée et le certificat X.509 associé. Nous pouvons utiliser pkcs12 d'openssl pour créer, analyser et lire.

Si vous avez besoin d'afficher les informations du package de sécurité, vous pouvez utiliser la commande suivante, qui affichera tous les certificats et clés privées

openssl pkcs12 -in file -info -nodes

 Si vous souhaitez chiffrer et sortir la clé privée, vous pouvez supprimer  -nodes les paramètres. Le tableau suivant montre certains paramètres de contrôle lors de la sortie des informations de fichier PKCS12

 

Pour l'exportation vers un fichier, vous pouvez ajouter  -out des paramètres pour spécifier le fichier exporté. Vous pouvez toujours utiliser  -nokeys et  -nocerts pour décider d'exporter un certificat ou une clé. N'oubliez pas de ne pas chiffrer la clé lors de l'exportation de la clé

OpenPGP

La norme OpenPGP est un accord de clé asymétrique asymétrique, qui fournit le chiffrement, la signature et d'autres projets. OpenGPG assure l'authentification de la clé entre eux via le mécanisme de réseau de confiance. Par rapport à S/MIME, OpenGPG est moins pris en charge dans la messagerie. Par exemple, Gmail peut vérifier la signature S/MIME dans la messagerie Web, mais il ne prend pas en charge PGP/MIME.

lecture recommandée

 

 

Je suppose que tu aimes

Origine blog.csdn.net/qq_62464995/article/details/128557728
conseillé
Classement