目次
ポスト オフィス サーバーを構築するというアイデアは以前からありましたが、試したことはありませんでした。建国記念日に Alibaba Cloud から Tencent Cloud に切り替えたときに、直接使用して構築してみまし postfix
た dovecot
。 3 日後、説得されて却下されました。また、既製のソリューションを再度使用しました。最終的にセットアップされ、自作のメールボックスを喜んで使用できるようになりました (喜んでふりをすることができます)
mailu の設定を更新しました mailcow と比較して、mailu はホストマシンのデータベースを利用できますが、mailu の SMTPS / IMAPS / POP3S の設定は mailcow ほど簡単ではなく、また研究もされていません。 mailuに切り替える予定はありません
サーバー変更後はメールサービスを存在しないものとして維持しない予定です
展開する
サーバーの構築を開始します。ドメイン名 ( example.com
) と IP ( 1.1.1.1
) は /mailcow
以下で使用され、ホストの nginx リバース プロキシはインストールに使用されます。デプロイメントの前に、最初に後で使用するためにいくつかのシェル変数を定義します。ご使用の環境に応じて変更してください。ニーズ
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" # 域名证书颁发者证书
また、Webメールが S/MIME
うまく PGP/MIME
サポートされていないため、暗号化や署名機能を有効に活用するため、サーバー側でWebメールを無効にし、ローカルのメールクライアントを使用してメールの送受信を行いますので、必要に応じてご自身でWebメールを有効にしてください。
DNS
DNS設定はメールサーバーにとって最も重要で、メールの送受信を可能にするため、メールが拒否されたり、迷惑メールと判断されてゴミ箱に入るなどのことを防ぐため、もちろんメールは入りません。スパムメールボックスが構成されている場合は、構成されていない場合は間違いなく問題が発生します。
上記の DNS 解決に加えて、 DKIM と PTR も構成する必要があります。DKIM はサービスの構築後に構成されます。PTR は作業指示書をオペレーターに送信する必要があります (これは Alibaba Cloud と Tencent Cloud の場合です)。 PTR 解決を設定していない場合は、ブラックリストに登録されている可能性があります。
DKIM も TXT タイプの DNS 解決であり、デプロイ完了後、指定されたセレクターによって DKIM が生成され、DNS 解決が設定されます
ブラックリスト
インターネット上での電子メールの送信は無料ではありません。郵便局サービスには一連のスパム対策メカニズムがあります。あなたの IP がブラックリストに載っていると、この IP から送信された電子メールは簡単にスパム メールボックスに入るか、拒否されます。IP を大切にしてください。ただし、どのサービス プロバイダーがブラックリストに載っているかを検出して、ブラックリストを削除してみることはできます。スパム対策 URL を削除するためのいくつかの検出またはアプリケーションを次に示します。
Mailcow:Dockerized
Mailcow . などの機能を統合しています 対策 スパム標準的なれ: dockerizedCentOS 7/8
Docker パッケージを使用することはできません, あまりにも要求しすぎです. 。。リソースを消費する主な理由は 、ウイルス対策機能と検索機能でClamAV
あり Solr
、必要がなければ無効にすることができます。
Mailcow:dockerized で使用されるポートは以下のとおりです (HTTP と HTTPS はカスタム ポートです)。
Mailcow のデプロイ:dockerized
ここで、メールボックス サーバーの正式な構築を開始します。
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
Nginx 設定ファイルを以下に示します。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;
}
}
上記がすべて完了すると、mailcow の基本設定が完了します。サービスを開始するだけで、デフォルトのユーザー パスワード admin
/ moohoo
cd ${mailcow_path}
docker-compose pull
docker-compose up -d
Mailcow の TLS の構成:dockerized
SMTP および IMAP サービスに TLS を追加できるようになりました。 mail.example.com
ドメイン名の証明書を申請したとします。Postfix および Dovecot の証明書を設定する前に、独自の証明書とプロバイダーの証明書を同じファイルに順番に保存する必要があります。接尾辞ドキュメントに. 、ファイルの拡張子は .pemで、mailcow の ssl フォルダーに保存されます。
cat ${cert_file} ${ca_file} > ${mailcow_path}/data/assets/ssl/cert.pem
cp ${key_file} ${mailcow_path}/data/assets/ssl/key.pem
証明書を保存した後、postfix と dovecot を構成し、構成が完了したらサービスを再起動します。
# 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 は、poste.io から継承された docker で構築された軽量の標準メール サーバーで、x86 アーキテクチャをサポートし、ポスト オフィス、Web メール、管理、およびスパム対策機能を統合します。Web メールは、roundcube、rainloop、または Web メールの無効化を選択できます。データベースは sqlite、MySQL、PostgreSQL をサポートしています。最も重要なことは、MySQL と PostgreSQL がミラーまたはホストの使用を選択できることです (Docker ミラーは 1.9 から削除されます)。
構成ファイルを生成する
Mailu 公式には、 必要に応じて生成できる構成ファイルのオンライン生成が提供されており、Docker-Compose を使用してマスター バージョンを構築し、生成された構成ファイルをサーバーにダウンロードします。
初期設定
パス、メインドメイン名、TLS、管理インターフェイスなどの初期設定、私は個人的に TLS 証明書を自分で生成するのが好きなので、mailu による証明書の生成を禁止するために mail を選択しますが、メールは TLS で暗号化します。 mailu は TLS 証明書を生成する必要があります。 letsencrypt
オプションで選択してください
いくつかの機能を選択する
機能設定上、Webメールを無効化しておりますので、お好みに合わせてご自身に合ったWebメールをお選びいただけます。残りの 3 つのオプションは、ウイルス対策 (メモリ キラー)、WebDAV、メール収集です。必要に応じて選択してください。
マイユを世界に公開する
IP とホスト名を設定し、リスニング アドレスに独自のサーバー IP を入力し、ホスト名にサーバーの長いホスト名を入力します。
データベース設定
データベース設定。ここではホストの PostgreSQL を使用することを選択し、URL には Docker がホスト上でデフォルトで開くサブネットが入力されます。
Mailuを導入する
ここで、メールボックス サーバーの正式な構築を開始します。構成ファイルを にダウンロードしたと仮定して mailu_path
、構成ファイルを変更しましょう。
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端口
mailu によって設定された TLS オプションは mail であるため、mailu-front によってリッスンされる HTTP に対するホストの Nginx リバース プロキシを作成できます。
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/;
# }
}
ホストの PostgreSQL も少し設定する必要があります
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
以上で mailu の基本設定は完了ですので、サービスの起動と最後の手順に従って管理者パスワードを設定するだけです。
cd ${mailu_path}
docker-compose -p mailu up -d
docker-compose -p mailu exec admin flask mailu admin admin ${mail_host#*.} PASSWORD
安全性
当社はTLSを設定しています。当社のメールはメール送信プロセスにおいて安全ですが、サービスプロバイダーにとっては、当社のメールの内容を自由に閲覧できます。重要なコンテンツをサービスプロバイダーに閲覧されたくない場合は、お試しください。電子メールを暗号化します。メールの暗号化は、メールをパスワード付きファイルに変換するのではなく、MUA で非対称暗号化スイートを使用して暗号化、署名などを行うもので、MTA はメールの送信のみを担当し、メールの内容を検出することはできません。暗号化された電子メールを送信したい場合は、次の公開キーを保存してください。
電子メールの暗号化は MUA の動作であるため、通常、サービス プロバイダーの Web メールは暗号化された電子メールをサポートしていません。暗号化機能を提供するプロバイダーによっては、秘密キーをサーバーにアップロードする必要がある場合、秘密キーによって電子メールが復号化される可能性があるため、注意してください。暗号化をサポートする一般的な MUA を以下に示します。
- Microsoft Outlook (S/MIME)
- Apple メール (S/MIME)
- Mozilla Thunderbird (OpenPGP および S/MIME)
- KDE Kontact KMail (OpenPGP および S/MIME)
- GNOME Evolution (OpenPGP および S/MIME)
- Mutt (OpenPGP および S/MIME)
S/MIME
Secure Multifunction Internet Mail Extensions (S/MIME) は、 X.509形式 に準拠した PKIベースの 非対称キー プロトコルであり、デジタル署名および暗号化機能を提供します。メール送信時にデジタル署名が 添付されて送信されますが、例えばGMailのWebページでは署名検証に対応しており、暗号化メールの場合はメール全体が暗号化されて添付送信されます 。双方が相互に情報を送信する前に、相手の公開キーがなければ電子メールを暗号化できません。署名された電子メールを相互に送信して公開キーを交換する必要があります。公開キーをインポートした後、開始できます。暗号化されたメールを送信する。Actalis では、電子メール暗号化の最初のステップとして、1 年間無料の S/MIME 証明書を申請できます 。申請した証明書 (.pfx ファイル)、パスワード、および CRP を保存してください。smime.p7s
smime.p7m
Actalis から要求された S/MIME 証明書は PKCS #12 形式であり、この形式は と呼ばれます 安全包裹
。通常、このファイルは秘密キーと関連する X.509 証明書をパックするために使用されます。openssl の pkcs12 を使用して、作成、解析、読み取りを行うことができます。
セキュリティ パッケージ情報を表示する必要がある場合は、次のコマンドを使用できます。これにより、すべての証明書と秘密キーが出力されます。
openssl pkcs12 -in file -info -nodes
秘密キーを暗号化して出力する場合は、 -nodes
パラメータを削除できます。次の表は、PKCS12 ファイル情報を出力するときのいくつかの制御パラメータを示しています
ファイルにエクスポートする場合、 -out
パラメータを追加してエクスポートするファイルを指定できます。引き続き と を使用して、証明書またはキーをエクスポートするかどうかを決定できます -nokeys
。 -nocerts
キーをエクスポートするときにキーを暗号化しないように注意してください。
OpenPGP
OpenPGP 標準は、暗号化、署名、その他のプロジェクトを提供する非対称非対称鍵協定であり、OpenGPG は信頼ネットワーク メカニズムを通じてそれらの間の鍵認証を保証します。S/MIME と比較すると、OpenGPG はメールではサポートされていません。たとえば、Gmail は Web メールで S/MIME 署名を検証できますが、PGP/MIME はサポートしていません。
推奨読書
- Outlook スパム対策ポリシー ガイド
- SPF レコード: 原則、構文、構成方法の概要
- DMARC とは何ですか?
- S/MIME を理解する
- 電子メール暗号化ガイドライン
- Thunderbird で OpenPGP を使用する - その方法と質問への回答
- Mailcow: Docker化された公式ドキュメント
- mailcow:dockerized を使用してメールサーバーを構築する
- Mailu.io 公式ドキュメント