commit 86654568904ecff8b81ec222330e7a40e5df4cc4
parent 3e61f1595166b11e51f22932768369108359e6bd
Author: Matsuda Kenji <contact2655@matsudakenji.xyz>
Date: Tue, 28 Jun 2022 13:52:42 +0900
update draft
Diffstat:
4 files changed, 96 insertions(+), 44 deletions(-)
diff --git a/man/draft/setting_up_mail_server.html b/man/draft/setting_up_mail_server.html
@@ -7,38 +7,64 @@
<li>OpenBSD 7.1</li>
<li>OpenSMTPD 7.0.0</li>
<li>Dovecot 2.3.19</li>
- <li>さくらのVPS</li>
- <li>ムームードメイン</li>
+ <li>さくらのVPS: IPアドレスは<code><server_ip></code>とする。</li>
+ <li>さくらのドメイン: ドメイン名は<code><server_domain></code>とする。</li>
</ul>
+<h2>概要</h2>
+<h3>メール送受信の流れ</h3>
+<p>メールの送受信に関わるものには主に以下のようなものがある。</p>
+<dl>
+ <dt>メールソフト</dt>
+ <dd>ユーザーがメールを読み書きし、送受信するためのソフトウェア。Mail Submission Agent(MSA)とも。メールクライアントと呼んだ方が正確な気がする。メールソフトでは後述のメールサーバー用のソフトウェアも含まれるように聞こえる。</dd>
+ <dt>SMTPサーバー</dt>
+ <dd>ユーザーから送られてきたメールを宛先に転送するサーバー。Simple Mail Transfer Protocol(SMTP)を用いて他のSMTPサーバーとメールのデータをやり取りする。Mail Transfer Agent(MTA)とも。</dd>
+ <dt>POPサーバー</dt>
+ <dt>IMAPサーバー</dt>
+ <dd>SMTPサーバーに届いたメールを宛先のユーザーに届けるサーバー。メール配信に利用するプロトコルに応じてそれぞれPOPサーバー、IMAPサーバーと言う。Mail Delivery Agent(MDA)とも。</dd>
+</dl>
+
+<p>メールが送信されてから宛先に届くまでのおおまかな流れは以下のようなものである。</p>
+<ol>
+ <li>メールソフトから送信側のメールサーバーにメールを送信(SMTP)。</li>
+ <li>送信側のドメインから送信されたメールであることを保証するためにDKIMの秘密鍵でメールに署名する。</li>
+ <li>送信側のメールサーバーがメールの宛先のドメインをDNSサーバーに問い合わせて受信側のメールサーバーのIPアドレスを取得</li>
+ <li>取得したIPアドレスを用いて受信側のメールサーバーにメールを送信(SMTP)</li>
+ <li>受信側のメールサーバーがDNSサーバーから送信元のドメインに紐付いたDKIMの公開鍵を取得し、届いたメールの署名を確認。その他いくつかの方法でメールの有効性を確認。</li>
+ <li>迷惑メール用のフィルターにかける。</li>
+ <li>受信側のメールサーバーが届いたメールの宛先を確認して宛先のユーザーのフォルダにメールを保存。</li>
+ <li>受信者がメールソフトから受信側のメールサーバーから新着メールをダウンロード(IMAP、POP)</li>
+</ol>
+<p>
+
<h2>手順</h2>
<h3>vmailユーザーを追加</h3>
<pre><code># useradd -m -c "Virtual Mail" -d /var/vmail -s /sbin/nologin vmail</code></pre>
<h3>サーバー証明書の発行と設定</h3>
<p>メールサーバーの他にウェブサーバーも設定するので、<code>httpd</code>と共にLet's Encryptを設定。</p>
-<p><code>/etc/acme-client.conf</code>の<code>domain</code>を以下のように変更:</p>
-<pre><code>domain mail.example.com {
- domain key "/etc/ssl/private/mail.example.com.key"
- domain full chain certificate "/etc/ssl/mail.example.com.fullchain.pem"
+<p><code>/etc/acme-client.conf</code>に<code>domain mail.<server_ip></code>を追加:</p>
+<pre><code>domain mail.<server_domain> {
+ domain key "/etc/ssl/private/mail.<server_domain>.key"
+ domain full chain certificate "/etc/ssl/mail.<server_domain>.fullchain.pem"
sign with letsencrypt
}</pre></code>
-<pre><code># acme-client -v example.com && rcctl start httpd
+<pre><code># acme-client -v <server_domain> && rcctl start httpd
# crontab -e
-43 1 * * * acme-client -v mail.example.com && rcctl restart smtpd && rcctl reload dovcot
+43 1 * * * acme-client -v mail.<server_domain> && rcctl restart smtpd && rcctl reload dovcot
<Esc>:wq</code></pre>
<h3>smtpdの設定</h3>
-<pre><code>pki "mail" cert "/etc/ssl/mail.example.com.fullchain.pem"
-pki "mail" key "/etc/ssl/private/mail.example.com.key"
+<pre><code>pki "mail" cert "/etc/ssl/mail.<server_domain>.fullchain.pem"
+pki "mail" key "/etc/ssl/private/mail.<server_domain>.key"
table aliases file:/etc/mail/aliases
table passwd file:/etc/mail/passwd
table virtuals file:/etc/mail/virtuals
filter dkimsign_rsa proc-exec\
- "filter-dkimsign -d mail.example.com -s selector1\
+ "filter-dkimsign -d mail.<server_domain> -s selector1\
-k /etc/mail/dkim/private.rsa.key" user _dkimsign group _dkimsign
filter check_rdns phase connect match !rdns disconnect "550 no rDNS."
@@ -46,32 +72,32 @@ filter check_fcrdns phase connect match !fcrdns disconnect "550 no FCrDNS."
listen on socket
listen on lo0
-listen on vio0 port 25 tls pki "mail" hostname "mail.example.com"\
+listen on vio0 port 25 tls pki "mail" hostname "mail.<server_domain>"\
filter { check_rdns, check_fcrdns }
listen on vio0 mask-src port submission smtps pki "mail"\
hostname "mail.matsudakenji.xyz" auth <passwd> filter dkimsign_rsa
action "local_mail" mbox alias <aliases>
-action "domain_mail" maildir "/var/vmail/example.com/%{dest.user:lowercase}"\
+action "domain_mail" maildir "/var/vmail/<server_domain>/%{dest.user:lowercase}"\
virtual <virtuals>
action "outbound" relay
-match from any for domain "example.com" action "domain_mail"
+match from any for domain "<server_domain>" action "domain_mail"
match from local for local action "local_mail"
match from local for any action "outbound"
match auth from any for any action "outbound"</code></pre>
<h3>メールユーザの設定</h3>
<p><code>/etc/mail/virtuals</code>:</p>
-<pre><code>abuse@example.com admin@example.com
-postmaster@example.com admin@example.com
-webmaster@example.com admin@example.com
-admin@example.com vmail
-contact@example.com vmail</pre></code>
+<pre><code>abuse@<server_domain> admin@<server_domain>
+postmaster@<server_domain> admin@<server_domain>
+webmaster@<server_domain> admin@<server_domain>
+admin@<server_domain> vmail
+contact@<server_domain> vmail</pre></code>
<p><code>/etc/mail/passwd</code>:</p>
-<pre><code>admin@example.com:$2b$10$.....
-contact@example.com:$2b$10$.....</code></pre>
+<pre><code>admin@<server_domain>:$2b$10$.....
+contact@<server_domain>:$2b$10$.....</code></pre>
<pre><code># rcctl restart smtpd</code></pre>
diff --git a/pub/.files b/pub/.files
@@ -1 +1 @@
-./computer/index.html
+./draft/setting_up_mail_server.html
diff --git a/pub/draft/setting_up_mail_server.html b/pub/draft/setting_up_mail_server.html
@@ -21,38 +21,64 @@
<li>OpenBSD 7.1</li>
<li>OpenSMTPD 7.0.0</li>
<li>Dovecot 2.3.19</li>
- <li>さくらのVPS</li>
- <li>ムームードメイン</li>
+ <li>さくらのVPS: IPアドレスは<code><server_ip></code>とする。</li>
+ <li>さくらのドメイン: ドメイン名は<code><server_domain></code>とする。</li>
</ul>
+<h2>概要</h2>
+<h3>メール送受信の流れ</h3>
+<p>メールの送受信に関わるものには主に以下のようなものがある。</p>
+<dl>
+ <dt>メールソフト</dt>
+ <dd>ユーザーがメールを読み書きし、送受信するためのソフトウェア。Mail Submission Agent(MSA)とも。メールクライアントと呼んだ方が正確な気がする。メールソフトでは後述のメールサーバー用のソフトウェアも含まれるように聞こえる。</dd>
+ <dt>SMTPサーバー</dt>
+ <dd>ユーザーから送られてきたメールを宛先に転送するサーバー。Simple Mail Transfer Protocol(SMTP)を用いて他のSMTPサーバーとメールのデータをやり取りする。Mail Transfer Agent(MTA)とも。</dd>
+ <dt>POPサーバー</dt>
+ <dt>IMAPサーバー</dt>
+ <dd>SMTPサーバーに届いたメールを宛先のユーザーに届けるサーバー。メール配信に利用するプロトコルに応じてそれぞれPOPサーバー、IMAPサーバーと言う。Mail Delivery Agent(MDA)とも。</dd>
+</dl>
+
+<p>メールが送信されてから宛先に届くまでのおおまかな流れは以下のようなものである。</p>
+<ol>
+ <li>メールソフトから送信側のメールサーバーにメールを送信(SMTP)。</li>
+ <li>送信側のドメインから送信されたメールであることを保証するためにDKIMの秘密鍵でメールに署名する。</li>
+ <li>送信側のメールサーバーがメールの宛先のドメインをDNSサーバーに問い合わせて受信側のメールサーバーのIPアドレスを取得</li>
+ <li>取得したIPアドレスを用いて受信側のメールサーバーにメールを送信(SMTP)</li>
+ <li>受信側のメールサーバーがDNSサーバーから送信元のドメインに紐付いたDKIMの公開鍵を取得し、届いたメールの署名を確認。その他いくつかの方法でメールの有効性を確認。</li>
+ <li>迷惑メール用のフィルターにかける。</li>
+ <li>受信側のメールサーバーが届いたメールの宛先を確認して宛先のユーザーのフォルダにメールを保存。</li>
+ <li>受信者がメールソフトから受信側のメールサーバーから新着メールをダウンロード(IMAP、POP)</li>
+</ol>
+<p>
+
<h2>手順</h2>
<h3>vmailユーザーを追加</h3>
<pre><code># useradd -m -c "Virtual Mail" -d /var/vmail -s /sbin/nologin vmail</code></pre>
<h3>サーバー証明書の発行と設定</h3>
<p>メールサーバーの他にウェブサーバーも設定するので、<code>httpd</code>と共にLet's Encryptを設定。</p>
-<p><code>/etc/acme-client.conf</code>の<code>domain</code>を以下のように変更:</p>
-<pre><code>domain mail.example.com {
- domain key "/etc/ssl/private/mail.example.com.key"
- domain full chain certificate "/etc/ssl/mail.example.com.fullchain.pem"
+<p><code>/etc/acme-client.conf</code>に<code>domain mail.<server_ip></code>を追加:</p>
+<pre><code>domain mail.<server_domain> {
+ domain key "/etc/ssl/private/mail.<server_domain>.key"
+ domain full chain certificate "/etc/ssl/mail.<server_domain>.fullchain.pem"
sign with letsencrypt
}</pre></code>
-<pre><code># acme-client -v example.com && rcctl start httpd
+<pre><code># acme-client -v <server_domain> && rcctl start httpd
# crontab -e
-43 1 * * * acme-client -v mail.example.com && rcctl restart smtpd && rcctl reload dovcot
+43 1 * * * acme-client -v mail.<server_domain> && rcctl restart smtpd && rcctl reload dovcot
<Esc>:wq</code></pre>
<h3>smtpdの設定</h3>
-<pre><code>pki "mail" cert "/etc/ssl/mail.example.com.fullchain.pem"
-pki "mail" key "/etc/ssl/private/mail.example.com.key"
+<pre><code>pki "mail" cert "/etc/ssl/mail.<server_domain>.fullchain.pem"
+pki "mail" key "/etc/ssl/private/mail.<server_domain>.key"
table aliases file:/etc/mail/aliases
table passwd file:/etc/mail/passwd
table virtuals file:/etc/mail/virtuals
filter dkimsign_rsa proc-exec\
- "filter-dkimsign -d mail.example.com -s selector1\
+ "filter-dkimsign -d mail.<server_domain> -s selector1\
-k /etc/mail/dkim/private.rsa.key" user _dkimsign group _dkimsign
filter check_rdns phase connect match !rdns disconnect "550 no rDNS."
@@ -60,32 +86,32 @@ filter check_fcrdns phase connect match !fcrdns disconnect "550 no FCrDNS."
listen on socket
listen on lo0
-listen on vio0 port 25 tls pki "mail" hostname "mail.example.com"\
+listen on vio0 port 25 tls pki "mail" hostname "mail.<server_domain>"\
filter { check_rdns, check_fcrdns }
listen on vio0 mask-src port submission smtps pki "mail"\
hostname "mail.matsudakenji.xyz" auth <passwd> filter dkimsign_rsa
action "local_mail" mbox alias <aliases>
-action "domain_mail" maildir "/var/vmail/example.com/%{dest.user:lowercase}"\
+action "domain_mail" maildir "/var/vmail/<server_domain>/%{dest.user:lowercase}"\
virtual <virtuals>
action "outbound" relay
-match from any for domain "example.com" action "domain_mail"
+match from any for domain "<server_domain>" action "domain_mail"
match from local for local action "local_mail"
match from local for any action "outbound"
match auth from any for any action "outbound"</code></pre>
<h3>メールユーザの設定</h3>
<p><code>/etc/mail/virtuals</code>:</p>
-<pre><code>abuse@example.com admin@example.com
-postmaster@example.com admin@example.com
-webmaster@example.com admin@example.com
-admin@example.com vmail
-contact@example.com vmail</pre></code>
+<pre><code>abuse@<server_domain> admin@<server_domain>
+postmaster@<server_domain> admin@<server_domain>
+webmaster@<server_domain> admin@<server_domain>
+admin@<server_domain> vmail
+contact@<server_domain> vmail</pre></code>
<p><code>/etc/mail/passwd</code>:</p>
-<pre><code>admin@example.com:$2b$10$.....
-contact@example.com:$2b$10$.....</code></pre>
+<pre><code>admin@<server_domain>:$2b$10$.....
+contact@<server_domain>:$2b$10$.....</code></pre>
<pre><code># rcctl restart smtpd</code></pre>
diff --git a/pub/sitemap.xml b/pub/sitemap.xml
@@ -10,7 +10,7 @@
<url><loc>https://www.matsudakenji.xyz/draft/keitai.html</loc><lastmod>2022-06-6</lastmod></url>
<url><loc>https://www.matsudakenji.xyz/draft/medical_care.html</loc><lastmod>2022-01-24</lastmod></url>
<url><loc>https://www.matsudakenji.xyz/draft/openbsd_installation.html</loc><lastmod>2022-06-25</lastmod></url>
-<url><loc>https://www.matsudakenji.xyz/draft/setting_up_mail_server.html</loc><lastmod>2022-06-23</lastmod></url>
+<url><loc>https://www.matsudakenji.xyz/draft/setting_up_mail_server.html</loc><lastmod>2022-06-28</lastmod></url>
<url><loc>https://www.matsudakenji.xyz/error/404.html</loc><lastmod>2021-06-18</lastmod></url>
<url><loc>https://www.matsudakenji.xyz/error/moved.html</loc><lastmod>2022-01-14</lastmod></url>
<url><loc>https://www.matsudakenji.xyz/farm/</loc><lastmod>2022-06-8</lastmod></url>