commit 7fb8a4bed146fae484fdb7b9f8872e7fb5140078
parent 99d1733845307e3437b0f8f529a91125d09c3ed3
Author: Matsuda Kenji <info@mtkn.jp>
Date: Tue, 16 Jan 2024 10:04:40 +0900
update draft
Diffstat:
3 files changed, 329 insertions(+), 6 deletions(-)
diff --git a/man/draft/mailserver.html b/man/draft/mailserver.html
@@ -231,7 +231,7 @@ OS再インストールの画面からそれを選べばすぐにインストー
でもなんとなく気持悪いのでopenbsd.orgから本家をダウンロードした。\
</p>
<p>
-インストールのこまかい手順は省略するが、\
+インストールのこまかい手順は割愛するが、\
ひとつだけひっかかった点があるので書いておく。\
インストール先のディスクをセットアップし、OSに必要なファイルを\
インストールメディアからディスクにコピーすると以下のエラーがでて\
@@ -251,10 +251,190 @@ syncing disks...18 18 18 18 18 18 18 18
を選択すると問題なくインストールできた。
</p>
+<h2>ファイアーフォールの設定</h2>
+<p>
+メールの送受信等に必要なポートを開ける:\
+</p>
+<ul>
+<li>TCP 22: ssh接続用</li>
+<li>UDP 53: DNSとの通信用</li>
+<li>TCP 25: SMTPの通信用</li>
+<li>TCP 587: メールクライアントからMTAへの通信用(メール送信時)</li>
+<li>TCP 993: メールクライアントからMDAへの通信用(メール受信時)</li>
+<li>TCP 80, 443: <code>acme-client(1)</code>によるサーバー証明書の取得用</li>
+</ul>
+<p>
+以上の設定を<code>/etc/pf.conf</code>に設定する:
+</p>
+<pre><code>\
+set skip on lo
+
+block return # block stateless traffic
+pass in log proto tcp from any to any port 22 #ssh
+
+pass out proto udp from any to <i>DNSのIPアドレス</i> port 53 #DNS
+pass out proto udp from any to any port 123 #ntp
+
+pass proto icmp
+pass proto tcp from any to any port { 80, 443 } #www
+pass proto tcp from any to any port { 25, 587, 993 } #mail
+</code></pre>
+<p>
+<code>pf(4)</code>の設定を反映:
+</p>
+<pre><code>\
+# pfctl -f /etc/pf.conf
+</code></pre>
+
+<h2>DNSのAレコード、MXレコード、PTRレコードの設定</h2>
+<p>
+DNSのレコードを設定する。\
+ムームーDNSの場合、コントロールパネルにログインし、サイドバーから\
+ドメイン管理>ドメイン操作>ムームーDNSと進み、設定するドメインの変更ボタン\
+をクリックすると設定画面がでるので、以下のように設定する:\
+</p>
+<table>
+<thead>
+<tr>
+<th>サブドメイン</th>
+<th>種別</th>
+<th>内容</th>
+<th>優先度</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td></td>
+<td>A</td>
+<td>sss.sss.sss.sss</td>
+<td></td>
+</tr>
+<tr>
+<td>mail</td>
+<td>A</td>
+<td>sss.sss.sss.sss</td>
+<td></td>
+</tr>
+<tr>
+<td></td>
+<td>MX</td>
+<td>mail.mtkn.jp</td>
+<td>10</td>
+</tr>
+</tbody>
+</table>
+
+<p>\
+PTRレコードを設定する。\
+さくらのVPSの場合、VPS管理画面にログインし、ネットワーク>\
+ホスト名逆引き登録と進み、カスタムホスト名に自分のドメイン名\
+(mtkn.jp)を入力する。TODO: mail sub domain??
+</p>
+
<h2>OpenSMTPDの設定<h2>
+<h3>ユーザーの作成<h3>
+<p>
+メールの送受信を担当するユーザーを作成する:\
+</p>
+<pre><code>\
+# useradd -m -c "Virtual Mail" -d /var/vmail -s /sbin/nologin vmail
+</code></pre>
+
+<h3>サーバー証明書の取得</h3>
+<p>
+<code>httpd(8)</code>の設定ファイルを作成する。\
+<code>/etc/examples</code>からサンプルの設定ファイルをコピーして編集する。\
+変更箇所はドメイン名だけでいい。\
+編集後、httpdを起動する。\
+</p>
+<pre><code>\
+# cp /etc/examples/httpd.conf /etc/
+# vi /etc/httpd.conf
+# echo httpd_flags= >> /etc/rc.conf.local
+# rcctl start httpd
+# rcctl enable httpd
+</code></pre>
+
+<p>
+続いて<code>acme-client(1)</code>を使ってLet's Encryptでサーバー証明書を発行する。\
+まずはこちらもサンプルの設定ファイルをコピーしてドメイン名を変更する。\
+その後、<code>acme-client(1)</code>を実行し、さらに<code>cron(8)</code>に\
+登録することで、証明書が自動で更新されるようにする。\
+</p>
+<pre><code>\
+# cp /etc/examples/acme-client.conf /etc/
+# vi /etc/acme-client.conf
+# acme-client -v mail.mtkn.jp
+# crontab -e
+</code></pre>
+
+<pre><code>\
+#minute hour mday month wday [flags] command
+~ 2 * * * acme-client mail.mtkn.xyz && rcctl restart smtpd
+</code></pre>
+
+<h3>/etc/mail/smtpd.confの設定</h3>
+<p>
+/etc/mail/smtpd.confを以下の通り変更:(TODO: 説明)\
+</p>
+<pre><code>\
+pki mtkn.jp cert "/etc/ssl/mail.mtkn.jp.fullchain.pem"
+pki mtkn.jp key "/etc/ssl/private/mail.mtkn.jp.key"
+
+table aliases file:/etc/mail/aliases
+table passwd file:/etc/mail/passwd
+table virtuals file:/etc/mail/virtuals
+
+filter check_rdns phase connect match !rdns disconnect "550 no rDNS."
+filter check_fcrdns phase connect match !fcrdns disconnect "550 no FCrDNS."
+
+smtp max-message-size 25M
+
+listen on socket
+listen on lo0
+listen on vio0 port 25 tls pki mtkn.jp hostname "mail.mtkn.jp"\
+ filter { check_rdns, check_fcrdns }
+listen on vio0 mask-src port submission smtps pki mtkn.jp\
+ hostname "mail.mtkn.jp" auth <passwd>
+
+action "local_mail" mbox alias <aliases>
+action "domain" maildir "/var/vmail/%{dest.domain:lowercase}/%{dest.user:lowercase}"\
+ virtual <virtuals>
+action "outbound" relay
+
+match from any for domain mtkn.jp action "domain"
+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>table</code>で指定したテーブルを作成する。\
+<code>/etc/mail/aliases</code>は特に変更しなくてもいい。\
+<code>/etc/mail/passwd</code>にはメールアカウントと暗号化されたパスワードを\
+保存する。パスワードの暗号化には<code>smtpctl(8)</code>を使う:\
+</p>
+<pre><code>\
+# echo info@mtkn.jp:$(smtpctl encrypt) >> /etc/mail/passwd
+<i>パスワードを入力し、エンター、Ctrl-D</i>
+</code></pre>
+
<h2>SSLの設定</h2>
<h2>Dovecotの設定</h2>
-<h2>ドメインの設定</h2>
+
+<p>
+サーバーの証明書が更新される際に<code>dovecot(1)</code>も再読み込みされるように\
+<code>cron(8)</code>に追加しておく:
+</p>
+<pre><code>\
+crontab -e
+</code></pre>
+
+<pre><code>\
+#minute hour mday month wday [flags] command
+~ 2 * * * acme-client mail.mtkn.xyz && rcctl restart smtpd && rcctl reload dovecot
+</code></pre>
<h2>参考文献</h2>
<ul>
diff --git a/pub/draft/mailserver.html b/pub/draft/mailserver.html
@@ -180,7 +180,7 @@ VPSとドメインを契約する。今回はVPSをさくらインターネッ
<p>
さくらのVPSにOpenBSDをインストールする。さくらインターネットが用意したISOがあるので、OS再インストールの画面からそれを選べばすぐにインストールが開始できる。でもなんとなく気持悪いのでopenbsd.orgから本家をダウンロードした。</p>
<p>
-インストールのこまかい手順は省略するが、ひとつだけひっかかった点があるので書いておく。インストール先のディスクをセットアップし、OSに必要なファイルをインストールメディアからディスクにコピーすると以下のエラーがでてカーネルパニックになった:
+インストールのこまかい手順は割愛するが、ひとつだけひっかかった点があるので書いておく。インストール先のディスクをセットアップし、OSに必要なファイルをインストールメディアからディスクにコピーすると以下のエラーがでてカーネルパニックになった:
</p>
<pre><code>wdc_atapi_start: not ready, st = 50
fatal protection fault in supervisor mode
@@ -193,10 +193,153 @@ syncing disks...18 18 18 18 18 18 18 18
原因はあまり調べていないが、どうもインストールメディアの読み込みに失敗しているようで、インストールに必要なファイルをウェブ上からダウンロードする方法を選択すると問題なくインストールできた。
</p>
+<h2>ファイアーフォールの設定</h2>
+<p>
+メールの送受信等に必要なポートを開ける:</p>
+<ul>
+<li>TCP 22: ssh接続用</li>
+<li>UDP 53: DNSとの通信用</li>
+<li>TCP 25: SMTPの通信用</li>
+<li>TCP 587: メールクライアントからMTAへの通信用(メール送信時)</li>
+<li>TCP 993: メールクライアントからMDAへの通信用(メール受信時)</li>
+<li>TCP 80, 443: <code>acme-client(1)</code>によるサーバー証明書の取得用</li>
+</ul>
+<p>
+以上の設定を<code>/etc/pf.conf</code>に設定する:
+</p>
+<pre><code>set skip on lo
+
+block return # block stateless traffic
+pass in log proto tcp from any to any port 22 #ssh
+
+pass out proto udp from any to <i>DNSのIPアドレス</i> port 53 #DNS
+pass out proto udp from any to any port 123 #ntp
+
+pass proto icmp
+pass proto tcp from any to any port { 80, 443 } #www
+pass proto tcp from any to any port { 25, 587, 993 } #mail
+</code></pre>
+<p>
+<code>pf(4)</code>の設定を反映:
+</p>
+<pre><code># pfctl -f /etc/pf.conf
+</code></pre>
+
+<h2>DNSのAレコード、MXレコード、PTRレコードの設定</h2>
+<p>
+DNSのレコードを設定する。ムームーDNSの場合、コントロールパネルにログインし、サイドバーからドメイン管理>ドメイン操作>ムームーDNSと進み、設定するドメインの変更ボタンをクリックすると設定画面がでるので、以下のように設定する:</p>
+<table>
+<thead>
+<tr>
+<th>サブドメイン</th>
+<th>種別</th>
+<th>内容</th>
+<th>優先度</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td></td>
+<td>A</td>
+<td>sss.sss.sss.sss</td>
+<td></td>
+</tr>
+<tr>
+<td>mail</td>
+<td>A</td>
+<td>sss.sss.sss.sss</td>
+<td></td>
+</tr>
+<tr>
+<td></td>
+<td>MX</td>
+<td>mail.mtkn.jp</td>
+<td>10</td>
+</tr>
+</tbody>
+</table>
+
+<p>PTRレコードを設定する。さくらのVPSの場合、VPS管理画面にログインし、ネットワーク>ホスト名逆引き登録と進み、カスタムホスト名に自分のドメイン名(mtkn.jp)を入力する。TODO: mail sub domain??
+</p>
+
<h2>OpenSMTPDの設定<h2>
+<h3>ユーザーの作成<h3>
+<p>
+メールの送受信を担当するユーザーを作成する:</p>
+<pre><code># useradd -m -c "Virtual Mail" -d /var/vmail -s /sbin/nologin vmail
+</code></pre>
+
+<h3>サーバー証明書の取得</h3>
+<p>
+<code>httpd(8)</code>の設定ファイルを作成する。<code>/etc/examples</code>からサンプルの設定ファイルをコピーして編集する。変更箇所はドメイン名だけでいい。編集後、httpdを起動する。</p>
+<pre><code># cp /etc/examples/httpd.conf /etc/
+# vi /etc/httpd.conf
+# echo httpd_flags= >> /etc/rc.conf.local
+# rcctl start httpd
+# rcctl enable httpd
+</code></pre>
+
+<p>
+続いて<code>acme-client(1)</code>を使ってLet's Encryptでサーバー証明書を発行する。まずはこちらもサンプルの設定ファイルをコピーしてドメイン名を変更する。その後、<code>acme-client(1)</code>を実行し、さらに<code>cron(8)</code>に登録することで、証明書が自動で更新されるようにする。</p>
+<pre><code># cp /etc/examples/acme-client.conf /etc/
+# vi /etc/acme-client.conf
+# acme-client -v mail.mtkn.jp
+# crontab -e
+</code></pre>
+
+<pre><code>#minute hour mday month wday [flags] command
+~ 2 * * * acme-client mail.mtkn.xyz && rcctl restart smtpd
+</code></pre>
+
+<h3>/etc/mail/smtpd.confの設定</h3>
+<p>
+/etc/mail/smtpd.confを以下の通り変更:(TODO: 説明)</p>
+<pre><code>pki mtkn.jp cert "/etc/ssl/mail.mtkn.jp.fullchain.pem"
+pki mtkn.jp key "/etc/ssl/private/mail.mtkn.jp.key"
+
+table aliases file:/etc/mail/aliases
+table passwd file:/etc/mail/passwd
+table virtuals file:/etc/mail/virtuals
+
+filter check_rdns phase connect match !rdns disconnect "550 no rDNS."
+filter check_fcrdns phase connect match !fcrdns disconnect "550 no FCrDNS."
+
+smtp max-message-size 25M
+
+listen on socket
+listen on lo0
+listen on vio0 port 25 tls pki mtkn.jp hostname "mail.mtkn.jp" filter { check_rdns, check_fcrdns }
+listen on vio0 mask-src port submission smtps pki mtkn.jp hostname "mail.mtkn.jp" auth <passwd>
+
+action "local_mail" mbox alias <aliases>
+action "domain" maildir "/var/vmail/%{dest.domain:lowercase}/%{dest.user:lowercase}" virtual <virtuals>
+action "outbound" relay
+
+match from any for domain mtkn.jp action "domain"
+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>table</code>で指定したテーブルを作成する。<code>/etc/mail/aliases</code>は特に変更しなくてもいい。<code>/etc/mail/passwd</code>にはメールアカウントと暗号化されたパスワードを保存する。パスワードの暗号化には<code>smtpctl(8)</code>を使う:</p>
+<pre><code># echo info@mtkn.jp:$(smtpctl encrypt) >> /etc/mail/passwd
+<i>パスワードを入力し、エンター、Ctrl-D</i>
+</code></pre>
+
<h2>SSLの設定</h2>
<h2>Dovecotの設定</h2>
-<h2>ドメインの設定</h2>
+
+<p>
+サーバーの証明書が更新される際に<code>dovecot(1)</code>も再読み込みされるように<code>cron(8)</code>に追加しておく:
+</p>
+<pre><code>crontab -e
+</code></pre>
+
+<pre><code>#minute hour mday month wday [flags] command
+~ 2 * * * acme-client mail.mtkn.xyz && rcctl restart smtpd && rcctl reload dovecot
+</code></pre>
<h2>参考文献</h2>
<ul>
diff --git a/pub/rss.xml b/pub/rss.xml
@@ -5,8 +5,8 @@
<description>ウェブページの更新履歴</description>
<language>ja-jp</language>
<link>https://www.mtkn.jp</link>
-<lastBuildDate>Mon, 15 Jan 2024 15:47:30 +0900</lastBuildDate>
-<pubDate>Mon, 15 Jan 2024 15:47:30 +0900</pubDate>
+<lastBuildDate>Tue, 16 Jan 2024 10:00:09 +0900</lastBuildDate>
+<pubDate>Tue, 16 Jan 2024 10:00:09 +0900</pubDate>
<docs>https://www.rssboard.org/rss-specification</docs>
<item>
<title>使用しているハードウェア、ソフトウェア</title>