Table des matières
Configuration de TLS pour Mailcow : dockerized
générer le fichier de configuration
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 /mailcow
ci-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/8
ClamAV
Solr
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 :
- Microsoft Outlook (S/MIME)
- Apple Mail (S/MIME)
- Mozilla Thunderbird (OpenPGP et S/MIME)
- KDE Kontact KMail (OpenPGP et S/MIME)
- Évolution de GNOME (OpenPGP et S/MIME)
- Mutt (OpenPGP et S/MIME)
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
- Guide de la politique anti-spam d'Outlook
- Enregistrements SPF : introduction aux principes, à la syntaxe et aux méthodes de configuration
- Que sont les DMARC ?
- Comprendre S/MIME
- Consignes de chiffrement des e-mails
- Utilisation d'OpenPGP avec Thunderbird - Comment faire et réponses aux questions
- Mailcow : documentation officielle dockerisée
- Utiliser mailcow:dockerized pour créer un serveur de messagerie
- Documentation officielle Mailu.io