commit c0463924baa0997542f357c95f101ea807098cb1
parent 6fac11f282972230d3aa13379166f0736bacb371
Author: Matsuda Kenji <info@mtkn.jp>
Date: Sat, 24 Feb 2024 08:33:38 +0900
fix html bug
Diffstat:
5 files changed, 549 insertions(+), 548 deletions(-)
diff --git a/data/weblog b/data/weblog
@@ -151,3 +151,7 @@
1708700400 /computer/rp2040_1.html
1708700400 /computer/rp2040_1.html
1708700400 /computer/rp2040_2.html
+1708700400 /computer/mailserver.html
+1708700400 /computer/mailserver.html
+1708700400 /computer/mailserver.html
+1708700400 /computer/mailserver.html
diff --git a/man/computer/mailserver.html b/man/computer/mailserver.html
@@ -46,7 +46,7 @@ IMAPによるこの通信を担うのがIMAPサーバーで、メールを配達
</p>
<pre>
+------------+ +----------------+
-|MTA(mtkn.jp)|--SMTP->| MTA |
+|MTA(mtkn.jp)|--SMTP->| MTA |
+------------+ +--example.com---+
^ | MDA |
| +----------------+
@@ -104,16 +104,16 @@ MTA (mtkn.jp <i>sss.sss.sss.sss</i>) DNS
example.com宛のメールって
誰に送ったらええん?
- ---------------------------------------->
+ ---------------------------------------->
mai.example.comやで(MXレコード)
- <----------------------------------------
+ <----------------------------------------
mail.example.comってどこや?
- ---------------------------------------->
+ ---------------------------------------->
<i>ddd.ddd.ddd.ddd</i>やで(Aレコード)
- <----------------------------------------
+ <----------------------------------------
</pre>
<p>
次にこの宛先のMTAとの通信を開始する。\
@@ -123,7 +123,7 @@ mtkn.jpを名乗るサーバーが本当にmtkn.jpかどうか確認する必要
<pre>
MTA (mtkn.jp <i>sss.sss.sss.sss</i>) MTA (example.com <i>ddd.ddd.ddd.ddd</i>)
こんちは。mtkn.jpです。
- ---------------------------------------->
+ ---------------------------------------->
なりすましちゃうか確認したろ
</pre>
@@ -142,11 +142,11 @@ IPアドレスを指定する。\
DNS MTA (example.com <i>ddd.ddd.ddd.ddd</i>)
mtkn.jpを名乗るやつから連絡
来てるんやけどこいつ本物?
- <----------------------------------------
+ <----------------------------------------
IPアドレスが<i>sss.sss.sss.sss</i>
やったら多分本物やわ。(SPFレコード)
- ---------------------------------------->
+ ---------------------------------------->
よっしゃ
</pre>
@@ -165,10 +165,10 @@ DNS MTA (example.com <i>ddd.ddd.ddd.ddd
DNS MTA (example.com <i>ddd.ddd.ddd.ddd</i>)
<i>sss.sss.sss.sss</i>ってIPアドレスで
mtkn.jpってドメイン登録されてる?
- <----------------------------------------
+ <----------------------------------------
されてるで。(PTRレコード)
- ---------------------------------------->
+ ---------------------------------------->
よっしゃ
</pre>
@@ -186,11 +186,11 @@ MTA (mtkn.jp <i>sss.sss.sss.sss</i>) MTA (example.com <i>ddd.ddd
本人確認できたわ
おまたせ。
- <----------------------------------------
+ <----------------------------------------
userさんにメール送るで。
署名も付けるで。
- ---------------------------------------->
+ ---------------------------------------->
</pre>
<p>
受信側はDNSから送信側のドメイン鍵の公開鍵をダウンロードし、署名を確認する:\
@@ -199,10 +199,10 @@ MTA (mtkn.jp <i>sss.sss.sss.sss</i>) MTA (example.com <i>ddd.ddd
DNS MTA (example.com <i>ddd.ddd.ddd.ddd</i>)
mtkn.jpが署名付きでメール
くれたんやけどこの署名本物?
- <----------------------------------------
+ <----------------------------------------
これで確認してみて(DKIM公開鍵)
- ---------------------------------------->
+ ---------------------------------------->
よっしゃ
</pre>
@@ -220,11 +220,11 @@ DNS MTA (example.com <i>ddd.ddd.ddd.ddd
DNS MTA (example.com <i>ddd.ddd.ddd.ddd</i>)
mtkn.jpを名乗る詐欺師から
メールきたんやけどどないしょ?
- <----------------------------------------
+ <----------------------------------------
ここ(postmaster@mtkn.jp)に通報や。
(DMARCレコード)
- ---------------------------------------->
+ ---------------------------------------->
よっしゃ
</pre>
@@ -310,7 +310,7 @@ pass proto tcp from any to any port { 25, 587, 993 } #mail
<p>
DNSのレコードを設定する。\
ムームーDNSの場合、コントロールパネルにログインし、サイドバーから\
-ドメイン管理>ドメイン操作>ムームーDNSと進み、設定するドメインの変更ボタン\
+ドメイン管理>ドメイン操作>ムームーDNSと進み、設定するドメインの変更ボタン\
をクリックすると設定画面がでるので、以下のように設定する:\
</p>
<table>
@@ -408,7 +408,7 @@ PTRレコードを設定する。\
<pre><code>\
# cp /etc/examples/httpd.conf /etc/
# vi /etc/httpd.conf
-# echo httpd_flags= >> /etc/rc.conf.local
+# echo httpd_flags= >> /etc/rc.conf.local
# rcctl start httpd
# rcctl enable httpd
</code></pre>
@@ -428,7 +428,7 @@ PTRレコードを設定する。\
<pre><code>\
#minute hour mday month wday [flags] command
-~ 2 * * * acme-client mail.mtkn.jp && rcctl restart smtpd
+~ 2 * * * acme-client mail.mtkn.jp && rcctl restart smtpd
</code></pre>
<h4>ドメインキーの作成とDNSへの登録</h4>
@@ -469,7 +469,6 @@ DNSのTXTレコードの制約により、鍵の長さは1024ビットにする
<td>v=DKIM1;k=rsa;p=<i>公開鍵</i></td>
<td></td>
</tr>
-</tr>
</tbody>
</table>
@@ -484,10 +483,10 @@ DNSのTXTレコードの制約により、鍵の長さは1024ビットにする
/etc/mail/smtpd.confを以下の通り変更:\
</p>
<pre><code>\
-# 認証に使用するサーバー証明書と秘密鍵を"mtkn.jp"という名前で登録。
+# 認証に使用するサーバー証明書と秘密鍵を"mtkn.jp"という名前で登録。
# 証明書のファイルは先程acme-client(1)で取得したもの。
-pki mtkn.jp cert "/etc/ssl/mail.mtkn.jp.fullchain.pem"
-pki mtkn.jp key "/etc/ssl/private/mail.mtkn.jp.key"
+pki mtkn.jp cert "/etc/ssl/mail.mtkn.jp.fullchain.pem"
+pki mtkn.jp key "/etc/ssl/private/mail.mtkn.jp.key"
# テーブルの登録
# ローカルに届いたメールの転送を設定するテーブル
@@ -500,13 +499,13 @@ table virtuals file:/etc/mail/virtuals
# フィルターの登録
# ドメインキーによる署名を付加するフィルター
filter dkim_sign proc-exec\\
- "filter-dkimsign -d mail.mtkn.jp -s selector1\\
- -k /etc/mail/dkim/private.key" user _dkimsign group _dkimsign
+ "filter-dkimsign -d mail.mtkn.jp -s selector1\\
+ -k /etc/mail/dkim/private.key" user _dkimsign group _dkimsign
# DNSの逆引き(PTRレコード)ができなかった場合に受信を拒否するフィルター
-filter check_rdns phase connect match !rdns disconnect "550 no rDNS."
+filter check_rdns phase connect match !rdns disconnect "550 no rDNS."
# 正引き(Aレコード)と逆引き(PTRレコード)でDNSのレコードが一致しなかった
# 場合に受信を拒否するフィルター
-filter check_fcrdns phase connect match !fcrdns disconnect "550 no FCrDNS."
+filter check_fcrdns phase connect match !fcrdns disconnect "550 no FCrDNS."
# 各ネットワークインターフェース毎の処理を設定。
listen on socket
@@ -515,38 +514,38 @@ listen on lo0
# 外部からmtkn.jp宛に届いたものの処理である。
# 最初に登録した証明書と秘密鍵を使ってMTAの本人確認をし、
# 上で設定したDNSに関するフィルターを適応。
-listen on vio0 port 25 tls pki mtkn.jp hostname "mail.mtkn.jp"\\
+listen on vio0 port 25 tls pki mtkn.jp hostname "mail.mtkn.jp"\\
filter { check_rdns, check_fcrdns }
# vio0というインターフェースのsubmission(587番)ポートに関する設定。
# mtkn.jpのユーザー(e.g. user@mtkn.jp)から任意の人宛に送信される
# メールに関する設定。
-# 上と同様に"mtkn.jp”という名前で登録されたpkiを使ってMTAの本人確認をし、
-# "passwd"という名前で登録したパスワードで認証し、
+# 上と同様に"mtkn.jp”という名前で登録されたpkiを使ってMTAの本人確認をし、
+# "passwd"という名前で登録したパスワードで認証し、
# さらにドメインキーでメールに署名する。
listen on vio0 mask-src port submission smtps pki mtkn.jp\\
- hostname "mail.mtkn.jp" auth <passwd> filter dkim_sign
+ hostname "mail.mtkn.jp" auth <passwd> filter dkim_sign
# 各種メールの処理を定義する。
# 各処理が実行される条件はこの後定義する。
# ローカルメールはデフォルトのまま
-action "local_mail" mbox alias <aliases>
+action "local_mail" mbox alias <aliases>
# 自分のドメイン宛のメールは/var/vmail/以下に振り分けてmaildir形式で保存。
-action "domain" maildir "/var/vmail/%{dest.domain:lowercase}/%{dest.user:lowercase}"\\
- virtual <virtuals>
+action "domain" maildir "/var/vmail/%{dest.domain:lowercase}/%{dest.user:lowercase}"\\
+ virtual <virtuals>
# 他のドメイン宛ては宛先へ転送。
-action "outbound" relay
+action "outbound" relay
# どういう条件でどういう処理をするかを定義する。
# 任意の送信元から自分のドメイン宛ては上で定義したdomainという処理をする。
# ここでは/var/vmail/以下に振り分けて保存する。
-match from any for domain mtkn.jp action "domain"
+match from any for domain mtkn.jp action "domain"
# このサーバー内でのメールはlocal_mailとして処理。
-match from local for local action "local_mail"
+match from local for local action "local_mail"
# このサーバー内から他所へのメールは宛先に転送
-match from local for any action "outbound"
+match from local for any action "outbound"
# 外部から来た他所宛てのメールは認証されているものに限り転送。
# authを忘れると多分このサーバー経由で迷惑メールが送られる危険がある。
-match auth from any for any action "outbound"
+match auth from any for any action "outbound"
</code></pre>
<h4>各テーブルの作成</h4>
@@ -557,7 +556,7 @@ match auth from any for any action "outbound"
保存する。パスワードの暗号化には<code>smtpctl(8)</code>を使う:\
</p>
<pre><code>\
-# echo user@mtkn.jp:$(smtpctl encrypt) >> /etc/mail/passwd
+# echo user@mtkn.jp:$(smtpctl encrypt) >> /etc/mail/passwd
<i>パスワードを入力し、エンター、Ctrl-D</i>
</code></pre>
@@ -666,7 +665,7 @@ crontab -e
<pre><code>\
#minute hour mday month wday [flags] command
-~ 2 * * * acme-client mail.mtkn.jp && rcctl restart smtpd && rcctl reload dovecot
+~ 2 * * * acme-client mail.mtkn.jp && rcctl restart smtpd && rcctl reload dovecot
</code></pre>
<h3>テスト</h3>
diff --git a/pub/computer/mailserver.html b/pub/computer/mailserver.html
@@ -48,7 +48,7 @@
</p>
<pre>
+------------+ +----------------+
-|MTA(mtkn.jp)|--SMTP->| MTA |
+|MTA(mtkn.jp)|--SMTP->| MTA |
+------------+ +--example.com---+
^ | MDA |
| +----------------+
@@ -87,23 +87,23 @@ MTA (mtkn.jp <i>sss.sss.sss.sss</i>) DNS
example.com宛のメールって
誰に送ったらええん?
- ---------------------------------------->
+ ---------------------------------------->
mai.example.comやで(MXレコード)
- <----------------------------------------
+ <----------------------------------------
mail.example.comってどこや?
- ---------------------------------------->
+ ---------------------------------------->
<i>ddd.ddd.ddd.ddd</i>やで(Aレコード)
- <----------------------------------------
+ <----------------------------------------
</pre>
<p>
次にこの宛先のMTAとの通信を開始する。しかし受信側のMTA(example.com)は、mtkn.jpを名乗るサーバーが本当にmtkn.jpかどうか確認する必要がある:</p>
<pre>
MTA (mtkn.jp <i>sss.sss.sss.sss</i>) MTA (example.com <i>ddd.ddd.ddd.ddd</i>)
こんちは。mtkn.jpです。
- ---------------------------------------->
+ ---------------------------------------->
なりすましちゃうか確認したろ
</pre>
@@ -115,11 +115,11 @@ MTA (mtkn.jp <i>sss.sss.sss.sss</i>) MTA (example.com <i>ddd.ddd
DNS MTA (example.com <i>ddd.ddd.ddd.ddd</i>)
mtkn.jpを名乗るやつから連絡
来てるんやけどこいつ本物?
- <----------------------------------------
+ <----------------------------------------
IPアドレスが<i>sss.sss.sss.sss</i>
やったら多分本物やわ。(SPFレコード)
- ---------------------------------------->
+ ---------------------------------------->
よっしゃ
</pre>
@@ -131,10 +131,10 @@ DNS MTA (example.com <i>ddd.ddd.ddd.ddd
DNS MTA (example.com <i>ddd.ddd.ddd.ddd</i>)
<i>sss.sss.sss.sss</i>ってIPアドレスで
mtkn.jpってドメイン登録されてる?
- <----------------------------------------
+ <----------------------------------------
されてるで。(PTRレコード)
- ---------------------------------------->
+ ---------------------------------------->
よっしゃ
</pre>
@@ -147,11 +147,11 @@ MTA (mtkn.jp <i>sss.sss.sss.sss</i>) MTA (example.com <i>ddd.ddd
本人確認できたわ
おまたせ。
- <----------------------------------------
+ <----------------------------------------
userさんにメール送るで。
署名も付けるで。
- ---------------------------------------->
+ ---------------------------------------->
</pre>
<p>
受信側はDNSから送信側のドメイン鍵の公開鍵をダウンロードし、署名を確認する:</p>
@@ -159,10 +159,10 @@ MTA (mtkn.jp <i>sss.sss.sss.sss</i>) MTA (example.com <i>ddd.ddd
DNS MTA (example.com <i>ddd.ddd.ddd.ddd</i>)
mtkn.jpが署名付きでメール
くれたんやけどこの署名本物?
- <----------------------------------------
+ <----------------------------------------
これで確認してみて(DKIM公開鍵)
- ---------------------------------------->
+ ---------------------------------------->
よっしゃ
</pre>
@@ -175,11 +175,11 @@ DNS MTA (example.com <i>ddd.ddd.ddd.ddd
DNS MTA (example.com <i>ddd.ddd.ddd.ddd</i>)
mtkn.jpを名乗る詐欺師から
メールきたんやけどどないしょ?
- <----------------------------------------
+ <----------------------------------------
ここ(postmaster@mtkn.jp)に通報や。
(DMARCレコード)
- ---------------------------------------->
+ ---------------------------------------->
よっしゃ
</pre>
@@ -241,7 +241,7 @@ pass proto tcp from any to any port { 25, 587, 993 } #mail
<h3>DNSの設定</h3>
<h4>A, MX, SPF, DMARC</h4>
<p>
-DNSのレコードを設定する。ムームーDNSの場合、コントロールパネルにログインし、サイドバーからドメイン管理>ドメイン操作>ムームーDNSと進み、設定するドメインの変更ボタンをクリックすると設定画面がでるので、以下のように設定する:</p>
+DNSのレコードを設定する。ムームーDNSの場合、コントロールパネルにログインし、サイドバーからドメイン管理>ドメイン操作>ムームーDNSと進み、設定するドメインの変更ボタンをクリックすると設定画面がでるので、以下のように設定する:</p>
<table>
<thead>
<tr>
@@ -310,7 +310,7 @@ DNSのレコードを設定する。ムームーDNSの場合、コントロー
<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
+# echo httpd_flags= >> /etc/rc.conf.local
# rcctl start httpd
# rcctl enable httpd
</code></pre>
@@ -324,7 +324,7 @@ DNSのレコードを設定する。ムームーDNSの場合、コントロー
</code></pre>
<pre><code>#minute hour mday month wday [flags] command
-~ 2 * * * acme-client mail.mtkn.jp && rcctl restart smtpd
+~ 2 * * * acme-client mail.mtkn.jp && rcctl restart smtpd
</code></pre>
<h4>ドメインキーの作成とDNSへの登録</h4>
@@ -360,7 +360,6 @@ OpenSMTPD用のDKIMフィルターをインストールする。
<td>v=DKIM1;k=rsa;p=<i>公開鍵</i></td>
<td></td>
</tr>
-</tr>
</tbody>
</table>
@@ -371,10 +370,10 @@ OpenSMTPD用のDKIMフィルターをインストールする。
<h4>smtpd.confの設定</h4>
<p>
/etc/mail/smtpd.confを以下の通り変更:</p>
-<pre><code># 認証に使用するサーバー証明書と秘密鍵を"mtkn.jp"という名前で登録。
+<pre><code># 認証に使用するサーバー証明書と秘密鍵を"mtkn.jp"という名前で登録。
# 証明書のファイルは先程acme-client(1)で取得したもの。
-pki mtkn.jp cert "/etc/ssl/mail.mtkn.jp.fullchain.pem"
-pki mtkn.jp key "/etc/ssl/private/mail.mtkn.jp.key"
+pki mtkn.jp cert "/etc/ssl/mail.mtkn.jp.fullchain.pem"
+pki mtkn.jp key "/etc/ssl/private/mail.mtkn.jp.key"
# テーブルの登録
# ローカルに届いたメールの転送を設定するテーブル
@@ -387,13 +386,13 @@ table virtuals file:/etc/mail/virtuals
# フィルターの登録
# ドメインキーによる署名を付加するフィルター
filter dkim_sign proc-exec\
- "filter-dkimsign -d mail.mtkn.jp -s selector1\
- -k /etc/mail/dkim/private.key" user _dkimsign group _dkimsign
+ "filter-dkimsign -d mail.mtkn.jp -s selector1\
+ -k /etc/mail/dkim/private.key" user _dkimsign group _dkimsign
# DNSの逆引き(PTRレコード)ができなかった場合に受信を拒否するフィルター
-filter check_rdns phase connect match !rdns disconnect "550 no rDNS."
+filter check_rdns phase connect match !rdns disconnect "550 no rDNS."
# 正引き(Aレコード)と逆引き(PTRレコード)でDNSのレコードが一致しなかった
# 場合に受信を拒否するフィルター
-filter check_fcrdns phase connect match !fcrdns disconnect "550 no FCrDNS."
+filter check_fcrdns phase connect match !fcrdns disconnect "550 no FCrDNS."
# 各ネットワークインターフェース毎の処理を設定。
listen on socket
@@ -402,44 +401,44 @@ listen on lo0
# 外部からmtkn.jp宛に届いたものの処理である。
# 最初に登録した証明書と秘密鍵を使ってMTAの本人確認をし、
# 上で設定したDNSに関するフィルターを適応。
-listen on vio0 port 25 tls pki mtkn.jp hostname "mail.mtkn.jp"\
+listen on vio0 port 25 tls pki mtkn.jp hostname "mail.mtkn.jp"\
filter { check_rdns, check_fcrdns }
# vio0というインターフェースのsubmission(587番)ポートに関する設定。
# mtkn.jpのユーザー(e.g. user@mtkn.jp)から任意の人宛に送信される
# メールに関する設定。
-# 上と同様に"mtkn.jp”という名前で登録されたpkiを使ってMTAの本人確認をし、
-# "passwd"という名前で登録したパスワードで認証し、
+# 上と同様に"mtkn.jp”という名前で登録されたpkiを使ってMTAの本人確認をし、
+# "passwd"という名前で登録したパスワードで認証し、
# さらにドメインキーでメールに署名する。
listen on vio0 mask-src port submission smtps pki mtkn.jp\
- hostname "mail.mtkn.jp" auth <passwd> filter dkim_sign
+ hostname "mail.mtkn.jp" auth <passwd> filter dkim_sign
# 各種メールの処理を定義する。
# 各処理が実行される条件はこの後定義する。
# ローカルメールはデフォルトのまま
-action "local_mail" mbox alias <aliases>
+action "local_mail" mbox alias <aliases>
# 自分のドメイン宛のメールは/var/vmail/以下に振り分けてmaildir形式で保存。
-action "domain" maildir "/var/vmail/%{dest.domain:lowercase}/%{dest.user:lowercase}"\
- virtual <virtuals>
+action "domain" maildir "/var/vmail/%{dest.domain:lowercase}/%{dest.user:lowercase}"\
+ virtual <virtuals>
# 他のドメイン宛ては宛先へ転送。
-action "outbound" relay
+action "outbound" relay
# どういう条件でどういう処理をするかを定義する。
# 任意の送信元から自分のドメイン宛ては上で定義したdomainという処理をする。
# ここでは/var/vmail/以下に振り分けて保存する。
-match from any for domain mtkn.jp action "domain"
+match from any for domain mtkn.jp action "domain"
# このサーバー内でのメールはlocal_mailとして処理。
-match from local for local action "local_mail"
+match from local for local action "local_mail"
# このサーバー内から他所へのメールは宛先に転送
-match from local for any action "outbound"
+match from local for any action "outbound"
# 外部から来た他所宛てのメールは認証されているものに限り転送。
# authを忘れると多分このサーバー経由で迷惑メールが送られる危険がある。
-match auth from any for any action "outbound"
+match auth from any for any action "outbound"
</code></pre>
<h4>各テーブルの作成</h4>
<p>
上記の設定ファイルの<code>table</code>で指定したテーブルを作成する。<code>/etc/mail/aliases</code>は特に変更しなくてもいい。<code>/etc/mail/passwd</code>にはメールアカウントと暗号化されたパスワードを保存する。パスワードの暗号化には<code>smtpctl(8)</code>を使う:</p>
-<pre><code># echo user@mtkn.jp:$(smtpctl encrypt) >> /etc/mail/passwd
+<pre><code># echo user@mtkn.jp:$(smtpctl encrypt) >> /etc/mail/passwd
<i>パスワードを入力し、エンター、Ctrl-D</i>
</code></pre>
@@ -528,7 +527,7 @@ service imap-login {
</code></pre>
<pre><code>#minute hour mday month wday [flags] command
-~ 2 * * * acme-client mail.mtkn.jp && rcctl restart smtpd && rcctl reload dovecot
+~ 2 * * * acme-client mail.mtkn.jp && rcctl restart smtpd && rcctl reload dovecot
</code></pre>
<h3>テスト</h3>
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>Sat, 24 Feb 2024 08:20:49 +0900</lastBuildDate>
-<pubDate>Sat, 24 Feb 2024 08:20:49 +0900</pubDate>
+<lastBuildDate>Sat, 24 Feb 2024 08:32:41 +0900</lastBuildDate>
+<pubDate>Sat, 24 Feb 2024 08:32:41 +0900</pubDate>
<docs>https://www.rssboard.org/rss-specification</docs>
<item>
<title>RP2040 SDKなし2 Clock、UART</title>
@@ -1126,356 +1126,10 @@ RP2040のボードをUSBデバイスモードでLinuxのパソコンに接続し
]]></description>
</item>
<item>
-<title>Gitサーバーの設定 on OpenBSD</title>
-<link>https://www.mtkn.jp/computer/git_server.html</link>
-<guid>https://www.mtkn.jp/computer/git_server.html</guid>
-<pubDate>Thu, 15 Feb 2024 00:00:00 +0900</pubDate>
-<description><![CDATA[<h1>Gitサーバーの設定 on OpenBSD</h1>
-<time>2024-02-15</time>
-
-<h2>はじめに</h2>
-<p>
-GitHubがMicrosoft傘下になり久しい。MincraftがMicrosoftアカウントなしでは遊べなくなった。このままではGitHubもそのうちMicrosoftアカウントを要求するようになるかもしれない。ということでGitサーバーを自前で持つことにした。</p>
-<p>
-ところでOpenBSDの開発者がGotという別のgit実装を作成しているので、この記事は近いうちにいらなくなりそう。
-</p>
-
-<h2>手順</h2>
-<p>
-以下ではssh接続によるpull/push及び、httpsによるpullを設定の上、stagitというウェブフロントエンドを導入する。
-</p>
-
-<h3>概要</h3>
-<ol>
-<li>ドメインの設定(任意)</li>
-<li><code>httpd(8)</code>の設定</li>
-<li>gitパッケージのインストールとchroot環境の整備</li>
-<li>stagitの導入</li>
-</ol>
-
-<h3>ドメインの設定(任意)</h3>
-<p>
-ドメインを設定する。IPアドレスでアクセスできればいいならこの設定はいらない。</p>
-<p>
-今回はgitというサブドメインを登録した:
-</p>
-<table>
-<thead>
-<tr>
-<th>サブドメイン</th>
-<th>種別</th>
-<th>内容</th>
-<th>優先度</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>git</td>
-<td>A</td>
-<td><i>サーバーのIPアドレス</i></td>
-<td></td>
-</tr>
-</tbody>
-</table>
-
-<h3><code>httpd(8)</code>の設定</h3>
-<p>
-httpsで接続する場合、<code>acme-client(8)</code>を設定する(IPアドレスで接続するなら自己証明書を発行することになる)。まず<code>/etc/acme-client.conf</code>にドメインを追加する:
-</p>
-<pre><code>domain git.mtkn.jp {
- domain key "/etc/ssl/private/git.mtkn.jp.key"
- domain full chain certificate "/etc/ssl/git.mtkn.jp.fullchain.pem"
- sign with letsencrypt
-}
-</code></pre>
-
-<p>
-続いて<code>/etc/httpd.conf</code>を設定する。</p>
-<pre><code>server "git.mtkn.jp" {
- listen on * port 80
- location "/.well-known/acme-challenge/*" {
- root "/acme"
- request strip 2
- }
- location "*" {
- block return 302 "https://$HTTP_HOST$REQUEST_URI"
- }
-}
-
-server "git.mtkn.jp" {
- listen on * tls port 443
- tls {
- certificate "/etc/ssl/git.mtkn.jp.fullchain.pem"
- key "/etc/ssl/private/git.mtkn.jp.key"
- }
- location "/.well-known/acme-challenge/*" {
- root "/acme"
- request strip 2
- }
- location "/*/git-receive-pack" {
- block
- }
- location "/*/git-upload-pack" {
- fastcgi {
- param SCRIPT_FILENAME "/usr/local/libexec/git/git-http-backend"
- param GIT_PROJECT_ROOT "/git"
- param GIT_HTTP_EXPORT_ALL "true"
- }
- }
- location "/*/info/refs" {
- fastcgi {
- param SCRIPT_FILENAME "/usr/local/libexec/git/git-http-backend"
- param GIT_PROJECT_ROOT "/git"
- param GIT_HTTP_EXPORT_ALL "true"
- }
- }
-}
-</code></pre>
-<p>
-<code>location "/*/git-receive-pack"</code>はpushの設定。今回はhttpsでのpushを受付けないので<code>block</code>する。</p>
-<p>
-<code>location "/*/git-upload-pack"</code>は手元のパソコンから<code>git clone</code>や<code>git pull</code>したときのもの。<code>location "/*/info/refs"</code>は上記を含むアクセスがあったときのもの。ここではCGIを使って<code>git-http-backend</code>を呼んでいるだけである。<code>SCRIPT_FILENAME</code>は<code>httpd(8)</code>のchroot環境でのパスである。必要なファイルは後でこのchroot環境にコピーする。
-</p>
-<p>
-この後同じURLでフロントエンドをホストしたいので、上記のように必要なURLからのみCGIを実行するようにした。gitのhttpクライアントがどのURLを利用しているのかは[2]に書いていた。</p>
-
-
-
-<p>
-httpsが必要ない場合は1つ目の<code>server</code>に各<code>location</code>を書くだけでいい。
-</p>
-<p>
-<code>httpd(8)</code>と<code>slowcgi(8)</code>を起動する:
-</p>
-<pre><code># echo httpd_flags= >> /etc/rc.conf.local
-# echo slowcgi_flags= >> /etc/rc.conf.local
-# rcctl start httpd
-# rcctl enable httpd
-# rcctl start slowcgi
-# rcctl enable slowcgi
-</code></pre>
-<p>
-サーバー証明書の発行:
-</p>
-<pre><code># acme-client -v git.mtkn.jp
-</code></pre>
-<p>
-<code>crontab(1)</code>にサーバー証明書の自動更新を登録:
-</p>
-<pre><code>#minute hour mday month wday [flags] command
-~ 2 * * * acme-client git.mtkn.jp && rcctl reload httpd
-</code></pre>
-
-<h3>gitパッケージのインストールとchroot環境の整備</h3>
-<p>
-gitパッケージをインストールし、ssh接続用のユーザーを作成する。httpsでも公開するので、gitユーザーのホームディレクトリは<code>/var/www</code>下にする:
-</p>
-<pre><code># pkg_add git
-# useradd -b /var/www -m -s /usr/local/bin/git-shell git
-</code></pre>
-<p>
-ssh接続用の公開鍵を<code>/var/www/git/.ssh/authorized_keys</code>に登録する。ところでこのファイルに公開鍵を書き込むとgitユーザーとしてsshでログインできるので、部外者がこのファイルの編集をできないようにしておく必要がある。一応所有者は<code>git:git</code>、権限は<code>-rw-------</code>なので大丈夫だと思うが、心配なら<code>httpd(8)</code>のchroot環境の外にこのファイルを移動させておいてもいいかもしれない。</p>
-<p>
-httpsでアクセスするためにchroot環境を整備する。<code>httpd(8)</code>は既定では<code>/var/www</code>にchrootして実行されるので、CGIに必要なファイルをこのディレクトリ以下に用意する必要がある。まずはgitのコマンドをコピー:
-</p>
-<pre><code># mkdir -p /var/www/usr/local/libexec/git
-# cp /usr/local/libexec/git/git-{http-backend,receive-pack,upload-pack} /var/www/usr/local/libexec/git/
-# chown www:www /var/www/usr/local/libexec/git/git-{http-backend,receive-pack,upload-pack}
-# chmod 0500 /var/www/usr/local/libexec/git/git-{http-backend,receive-pack,upload-pack}
-# mkdir -p /var/www/usr/local/bin
-# cp /usr/local/bin/git /var/www/usr/local/bin/
-# chown www:www /var/www/usr/local/bin/git
-# chmod 0500 /var/www/usr/local/bin/git
-</code></pre>
-<p>
-続いてコマンドの実行に必要なライブラリをコピー:
-</p>
-<pre><code># mkdir -p /var/www/usr/lib /var/www/usr/local/lib /var/www/usr/libexec
-# find /var/www/{bin,usr} -type f | grep git | xargs ldd | awk '{print $7}' | grep -v -e '^/var/www/' -e '^$' -e 'Name' | sort | uniq | awk '{printf "cp %s /var/www%s && chown www:www /var/www%s && chmod 0400 /var/www%s\n", $1, $1, $1, $1}' | sh -s
-</code></pre>
-<p>
-<code>/dev/null</code>をコピーする(<code>mknod(8)</code>参照):
-</p>
-<pre><code># mkdir /var/www/dev
-# mknod -m 666 /var/www/dev/null c 2 2
-</code></pre>
-<p>
-最後に、<code>/var/www/dev/null</code>を作成するために<code>/etc/fstab</code>の<code>/var</code>エントリーから<code>nodev</code>オプションを削除し、再起動する。
-</p>
-
-<p>
-gitパッケージやシステムの更新後、chroot環境のコマンドやライブラリも更新しないといけないのでそのためのスクリプトを適当に作った:
-</p>
-<pre><code>#!/bin/sh -xe
-
-oso=$(find /var/www/usr -type f -name '*.so*')
-rm $oso
-
-bin=$(find /var/www/bin /var/www/usr -type f ! -name '*.so*' |
- grep -v bgpctl |
- sed 's|^/var/www||'
- )
-echo "$bin" | sed 's|.*|cp & /var/www&|' | sh -s
-echo "$bin" | sed 's|.*|chown www:www /var/www&|' | sh -s
-echo "$bin" | sed 's|.*|chmod 0500 /var/www&|' | sh -s
-
-nso=$(echo "$bin" | sed 's|^|/var/www|' |
- xargs ldd | awk '{print $7}' |
- grep -v -e '^/var/www/' -e '^$' -e 'Name' |
- sort | uniq
- )
-echo "$nso" | sed 's|.*|cp & /var/www&|' | sh -s
-echo "$nso" | sed 's|.*|chown www:www /var/www&|' | sh -s
-echo "$nso" | sed 's|.*|chmod 0400 /var/www&|' | sh -s
-</code></pre>
-
-<h3><code>stagit(1)</code>の導入</h3>
-<p>
-ウェブフロントエンドとしてstagitを導入する:
-</p>
-<pre><code># pkg_add stagit
-</code></pre>
-<p>
-<code>httpd.conf(5)</code>の<code>server "git.mtkn.jp"</code>の中に以下の設定を追加する(<code>location</code>のマッチは上から順番に評価されるので、上で設定したgitのhttpクライアント用の<code>location</code>よりも下に記入する):
-</p>
-<pre><code> location "/" {
- directory index index.html
- root "/htdocs/git.mtkn.jp"
- }
- location "*" {
- directory index log.html
- root "/htdocs/git.mtkn.jp"
- }
-</code></pre>
-<p>
-stagit用のディレクトリを作成して<code>httpd(8)</code>を再読込する:
-</p>
-<pre><code># mkdir /var/www/htdocs/git.mtkn.jp
-# chown git:git /var/www/htdocs/git.mtkn.jp
-# rcctl reload httpd
-</code></pre>
-
-<p>
-gitリポジトリが更新されたときにウェブページも更新するように設定する。gitリポジトリはなにか更新があった場合、そのリポジトリのディレクトリの中の<code>hooks/post-receive</code>というファイルを自動で実行する。そのためこのファイルに、stagitの更新をするスクリプトを書いておけばいい:
-</p>
-<pre><code>#!/bin/sh
-
-git_root="/var/www/git"
-stagit_root="/var/www/htdocs/git.mtkn.jp"
-repo="$(basename "$(pwd)" | sed 's/\.git$//')"
-src="$(pwd)"
-stagit_dst="$stagit_root/$repo"
-
-mkdir -p "$stagit_dst"
-(cd "$stagit_dst" && stagit -l 64 "$src")
-(cd "$stagit_root" && stagit-index $git_root/*.git > index.html)
-</code></pre>
-
-<h2>レポジトリの作成</h2>
-<p>
-レポジトリを作成するにはサーバーで以下のようにする。</p>
-<pre><code>$ cd /var/www/git
-$ doas -u git mkdir <i>repo</i>.git
-$ cd <i>repo</i>.git
-$ doas -u git git init --bare
-</code></pre>
-
-<p>
-これで手元のパソコンからクローンできる:
-</p>
-<pre><code>$ git clone git@git.mtkn.jp:<i>repo</i>.git
-</code></pre>
-<p>
-または
-</p>
-<pre><code>$ git clone https://git.mtkn.jp/<i>repo</i>.git
-</code></pre>
-
-<h2>参考</h2>
-<ul>
-<li>[1] <a href="https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols">Git - The Protocols.Git</a></li>
-<li>[2] <a href="https://git-scm.com/docs/http-protocol">Git - http-protocol Documentation.Git</a></li>
-<li>[3] <a href="https://codemadness.org/stagit.html">Stagit: a static git page generator - Codemadness</a></li>
-</ul>
-]]></description>
-</item>
-<item>
-<title>味噌</title>
-<link>https://www.mtkn.jp/kitchen/recipe/miso.html</link>
-<guid>https://www.mtkn.jp/kitchen/recipe/miso.html</guid>
-<pubDate>Fri, 9 Feb 2024 00:00:00 +0900</pubDate>
-<description><![CDATA[<h1>味噌</h1>
-<time>2024-02-09</time>
-
-<h2>材料</h2>
-<p>二升の甕4つ分弱</p>
-<ul>
-<li>大豆 3.6kg</li>
-<li>米麹 5kg</li>
-<li>塩 1.8kg</li>
-<li>酒粕 500g</li>
-</ul>
-
-<h2>手順</h2>
-<ol>
-<li>大豆を24時間水に浸す</li>
-<li>麹と塩を混ぜる</li>
-<li>大豆を3時間蒸す</li>
-<li>大豆を潰す</li>
-<li>大豆を麹と混ぜる(蒸したときの汁を混ぜて硬さを調整する)</li>
-<li>甕に詰める</li>
-<li>酒粕で蓋をしてさらにラップで落し蓋をして密閉する。</li>
-<li>半年以上寝かす</li>
-</ol>
-
-<h2>ひとこと</h2>
-<p>
-豆はジップロックに入れて拳に体重を乗せて押しつぶすと楽だった。ジップロックあんまり使いたくないけど。ラップで蓋をするのは好きではないので、試験的にひと瓷だけラップなしで放置することにした。酒粕も味噌っぽくなって食べられるが、風味は少し変わる。味噌汁が粕汁っぽくなる。</p>
-]]></description>
-</item>
-<item>
-<title>自己紹介</title>
-<link>https://www.mtkn.jp/about.html</link>
-<guid>https://www.mtkn.jp/about.html</guid>
-<pubDate>Tue, 23 Jan 2024 00:00:00 +0900</pubDate>
-<description><![CDATA[<h1>自己紹介</h1>
-<time>2022-07-28</time>
-
-<p><img class="portrait" src="/pics/icon.jpeg" alt="似顔絵" width="100"></p>
-
-<ul>
- <li>名前: 松田 健嗣</li>
- <li>性別: 男</li>
- <li>年齢: 20代</li>
- <li>出身: 和歌山</li>
-</ul>
-
-<p>
-高校のころ物理学や数学が好きで、学者を志して大学に行きましたが、能力が足りずに挫折しました。当時は自分の状況を省みることなくひたすら努力していたつもりです。ところがこの努力こそが無駄の根源だったように思います。二回の留年を経て三年目には定員を割っていた生物系に進み、クモの採集にいそしんでいました。京都の山々に分け入っては標本を集める日々です。これはなかなか楽しかった。結局大学ではクモの新種を1つ記載して卒業となりました。
-</p>
-<p>
-勉強以外では合気道部に所属していましたがこちらではなにも努力していた自覚もなく、そこそこの実力を付けていたように思います。自分にとって稽古することが自然なことだったのでしょう。特にしんどいと思ったこともなかったです。無駄な力を抜き全身をうまく使うことを合気道の稽古から学んでいたはずなのに、それが勉強の方には生かせていなかったのです。
-</p>
-<p>
-在学中は社会に出て仕事をすることなど考えていなかったため、いざ就職活動となると業界を選ぶことも大変でした。かろうじて興味のあったのがコンピュータなので、それ関係の会社を覗いたりしましたが、本当に自分にあっているのか分からず一から考え直すことに。結局実家の会社を嗣ぐために同業大手に応募、採用されました。
-</p>
-<p>
-ところがこの会社があまりにも合わず半年で適応障害になって辞めることに。以来実家に戻って畑をするかたわら寺に通っています。この間生き方についていろいろ考えた結果、社会にもまれて気付いたら定年しているより、もっと人間らしい老い方をしたいと思うに至ったのです。常識に縛られても結局その常識に裏切られるだけです。金銭的な豊かさはあまりにも脆いものでしょう。
-</p>
-<p>
-このサイトは日々考えていることを記しておきたいと思い立ち上げました。周りの人にはあまり共感されない僕の考えですが、なにかの参考になれば幸いです。
-</p>
-
-<h2>著作権について</h2>
-<p>
-このウェブサイト上のコンテンツは、特に断りのない限り<a href="http://creativecommons.org/publicdomain/zero/1.0?ref=chooser-v1" rel="license noopener noreferrer">CC0 1.0</a>で公開します。</p>
-]]></description>
-</item>
-<item>
<title>メールサーバー構築 on OpenBSD with OpenSMTPD and Dovecot</title>
<link>https://www.mtkn.jp/computer/mailserver.html</link>
<guid>https://www.mtkn.jp/computer/mailserver.html</guid>
-<pubDate>Fri, 19 Jan 2024 00:00:00 +0900</pubDate>
+<pubDate>Sat, 24 Feb 2024 00:00:00 +0900</pubDate>
<description><![CDATA[<h1>メールサーバー構築 on OpenBSD with OpenSMTPD and Dovecot</h1>
<time>2024-01-19</time>
@@ -1502,7 +1156,7 @@ $ doas -u git git init --bare
</p>
<pre>
+------------+ +----------------+
-|MTA(mtkn.jp)|--SMTP->| MTA |
+|MTA(mtkn.jp)|--SMTP->| MTA |
+------------+ +--example.com---+
^ | MDA |
| +----------------+
@@ -1541,23 +1195,23 @@ MTA (mtkn.jp <i>sss.sss.sss.sss</i>) DNS
example.com宛のメールって
誰に送ったらええん?
- ---------------------------------------->
+ ---------------------------------------->
mai.example.comやで(MXレコード)
- <----------------------------------------
+ <----------------------------------------
mail.example.comってどこや?
- ---------------------------------------->
+ ---------------------------------------->
<i>ddd.ddd.ddd.ddd</i>やで(Aレコード)
- <----------------------------------------
+ <----------------------------------------
</pre>
<p>
次にこの宛先のMTAとの通信を開始する。しかし受信側のMTA(example.com)は、mtkn.jpを名乗るサーバーが本当にmtkn.jpかどうか確認する必要がある:</p>
<pre>
MTA (mtkn.jp <i>sss.sss.sss.sss</i>) MTA (example.com <i>ddd.ddd.ddd.ddd</i>)
こんちは。mtkn.jpです。
- ---------------------------------------->
+ ---------------------------------------->
なりすましちゃうか確認したろ
</pre>
@@ -1569,11 +1223,11 @@ MTA (mtkn.jp <i>sss.sss.sss.sss</i>) MTA (example.com <i>ddd.ddd
DNS MTA (example.com <i>ddd.ddd.ddd.ddd</i>)
mtkn.jpを名乗るやつから連絡
来てるんやけどこいつ本物?
- <----------------------------------------
+ <----------------------------------------
IPアドレスが<i>sss.sss.sss.sss</i>
やったら多分本物やわ。(SPFレコード)
- ---------------------------------------->
+ ---------------------------------------->
よっしゃ
</pre>
@@ -1585,10 +1239,10 @@ DNS MTA (example.com <i>ddd.ddd.ddd.ddd
DNS MTA (example.com <i>ddd.ddd.ddd.ddd</i>)
<i>sss.sss.sss.sss</i>ってIPアドレスで
mtkn.jpってドメイン登録されてる?
- <----------------------------------------
+ <----------------------------------------
されてるで。(PTRレコード)
- ---------------------------------------->
+ ---------------------------------------->
よっしゃ
</pre>
@@ -1601,11 +1255,11 @@ MTA (mtkn.jp <i>sss.sss.sss.sss</i>) MTA (example.com <i>ddd.ddd
本人確認できたわ
おまたせ。
- <----------------------------------------
+ <----------------------------------------
userさんにメール送るで。
署名も付けるで。
- ---------------------------------------->
+ ---------------------------------------->
</pre>
<p>
受信側はDNSから送信側のドメイン鍵の公開鍵をダウンロードし、署名を確認する:</p>
@@ -1613,10 +1267,10 @@ MTA (mtkn.jp <i>sss.sss.sss.sss</i>) MTA (example.com <i>ddd.ddd
DNS MTA (example.com <i>ddd.ddd.ddd.ddd</i>)
mtkn.jpが署名付きでメール
くれたんやけどこの署名本物?
- <----------------------------------------
+ <----------------------------------------
これで確認してみて(DKIM公開鍵)
- ---------------------------------------->
+ ---------------------------------------->
よっしゃ
</pre>
@@ -1629,11 +1283,11 @@ DNS MTA (example.com <i>ddd.ddd.ddd.ddd
DNS MTA (example.com <i>ddd.ddd.ddd.ddd</i>)
mtkn.jpを名乗る詐欺師から
メールきたんやけどどないしょ?
- <----------------------------------------
+ <----------------------------------------
ここ(postmaster@mtkn.jp)に通報や。
(DMARCレコード)
- ---------------------------------------->
+ ---------------------------------------->
よっしゃ
</pre>
@@ -1695,7 +1349,7 @@ pass proto tcp from any to any port { 25, 587, 993 } #mail
<h3>DNSの設定</h3>
<h4>A, MX, SPF, DMARC</h4>
<p>
-DNSのレコードを設定する。ムームーDNSの場合、コントロールパネルにログインし、サイドバーからドメイン管理>ドメイン操作>ムームーDNSと進み、設定するドメインの変更ボタンをクリックすると設定画面がでるので、以下のように設定する:</p>
+DNSのレコードを設定する。ムームーDNSの場合、コントロールパネルにログインし、サイドバーからドメイン管理>ドメイン操作>ムームーDNSと進み、設定するドメインの変更ボタンをクリックすると設定画面がでるので、以下のように設定する:</p>
<table>
<thead>
<tr>
@@ -1764,7 +1418,7 @@ DNSのレコードを設定する。ムームーDNSの場合、コントロー
<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
+# echo httpd_flags= >> /etc/rc.conf.local
# rcctl start httpd
# rcctl enable httpd
</code></pre>
@@ -1778,7 +1432,7 @@ DNSのレコードを設定する。ムームーDNSの場合、コントロー
</code></pre>
<pre><code>#minute hour mday month wday [flags] command
-~ 2 * * * acme-client mail.mtkn.jp && rcctl restart smtpd
+~ 2 * * * acme-client mail.mtkn.jp && rcctl restart smtpd
</code></pre>
<h4>ドメインキーの作成とDNSへの登録</h4>
@@ -1814,7 +1468,6 @@ OpenSMTPD用のDKIMフィルターをインストールする。
<td>v=DKIM1;k=rsa;p=<i>公開鍵</i></td>
<td></td>
</tr>
-</tr>
</tbody>
</table>
@@ -1825,10 +1478,10 @@ OpenSMTPD用のDKIMフィルターをインストールする。
<h4>smtpd.confの設定</h4>
<p>
/etc/mail/smtpd.confを以下の通り変更:</p>
-<pre><code># 認証に使用するサーバー証明書と秘密鍵を"mtkn.jp"という名前で登録。
+<pre><code># 認証に使用するサーバー証明書と秘密鍵を"mtkn.jp"という名前で登録。
# 証明書のファイルは先程acme-client(1)で取得したもの。
-pki mtkn.jp cert "/etc/ssl/mail.mtkn.jp.fullchain.pem"
-pki mtkn.jp key "/etc/ssl/private/mail.mtkn.jp.key"
+pki mtkn.jp cert "/etc/ssl/mail.mtkn.jp.fullchain.pem"
+pki mtkn.jp key "/etc/ssl/private/mail.mtkn.jp.key"
# テーブルの登録
# ローカルに届いたメールの転送を設定するテーブル
@@ -1840,12 +1493,12 @@ table virtuals file:/etc/mail/virtuals
# フィルターの登録
# ドメインキーによる署名を付加するフィルター
-filter dkim_sign proc-exec\ "filter-dkimsign -d mail.mtkn.jp -s selector1\ -k /etc/mail/dkim/private.key" user _dkimsign group _dkimsign
+filter dkim_sign proc-exec\ "filter-dkimsign -d mail.mtkn.jp -s selector1\ -k /etc/mail/dkim/private.key" user _dkimsign group _dkimsign
# DNSの逆引き(PTRレコード)ができなかった場合に受信を拒否するフィルター
-filter check_rdns phase connect match !rdns disconnect "550 no rDNS."
+filter check_rdns phase connect match !rdns disconnect "550 no rDNS."
# 正引き(Aレコード)と逆引き(PTRレコード)でDNSのレコードが一致しなかった
# 場合に受信を拒否するフィルター
-filter check_fcrdns phase connect match !fcrdns disconnect "550 no FCrDNS."
+filter check_fcrdns phase connect match !fcrdns disconnect "550 no FCrDNS."
# 各ネットワークインターフェース毎の処理を設定。
listen on socket
@@ -1854,149 +1507,495 @@ listen on lo0
# 外部からmtkn.jp宛に届いたものの処理である。
# 最初に登録した証明書と秘密鍵を使ってMTAの本人確認をし、
# 上で設定したDNSに関するフィルターを適応。
-listen on vio0 port 25 tls pki mtkn.jp hostname "mail.mtkn.jp"\ filter { check_rdns, check_fcrdns }
+listen on vio0 port 25 tls pki mtkn.jp hostname "mail.mtkn.jp"\ filter { check_rdns, check_fcrdns }
# vio0というインターフェースのsubmission(587番)ポートに関する設定。
# mtkn.jpのユーザー(e.g. user@mtkn.jp)から任意の人宛に送信される
# メールに関する設定。
-# 上と同様に"mtkn.jp”という名前で登録されたpkiを使ってMTAの本人確認をし、
-# "passwd"という名前で登録したパスワードで認証し、
+# 上と同様に"mtkn.jp”という名前で登録されたpkiを使ってMTAの本人確認をし、
+# "passwd"という名前で登録したパスワードで認証し、
# さらにドメインキーでメールに署名する。
-listen on vio0 mask-src port submission smtps pki mtkn.jp\ hostname "mail.mtkn.jp" auth <passwd> filter dkim_sign
+listen on vio0 mask-src port submission smtps pki mtkn.jp\ hostname "mail.mtkn.jp" auth <passwd> filter dkim_sign
# 各種メールの処理を定義する。
# 各処理が実行される条件はこの後定義する。
# ローカルメールはデフォルトのまま
-action "local_mail" mbox alias <aliases>
+action "local_mail" mbox alias <aliases>
# 自分のドメイン宛のメールは/var/vmail/以下に振り分けてmaildir形式で保存。
-action "domain" maildir "/var/vmail/%{dest.domain:lowercase}/%{dest.user:lowercase}"\ virtual <virtuals>
+action "domain" maildir "/var/vmail/%{dest.domain:lowercase}/%{dest.user:lowercase}"\ virtual <virtuals>
# 他のドメイン宛ては宛先へ転送。
-action "outbound" relay
+action "outbound" relay
# どういう条件でどういう処理をするかを定義する。
# 任意の送信元から自分のドメイン宛ては上で定義したdomainという処理をする。
# ここでは/var/vmail/以下に振り分けて保存する。
-match from any for domain mtkn.jp action "domain"
+match from any for domain mtkn.jp action "domain"
# このサーバー内でのメールはlocal_mailとして処理。
-match from local for local action "local_mail"
+match from local for local action "local_mail"
# このサーバー内から他所へのメールは宛先に転送
-match from local for any action "outbound"
+match from local for any action "outbound"
# 外部から来た他所宛てのメールは認証されているものに限り転送。
# authを忘れると多分このサーバー経由で迷惑メールが送られる危険がある。
-match auth from any for any action "outbound"
+match auth from any for any action "outbound"
+</code></pre>
+
+<h4>各テーブルの作成</h4>
+<p>
+上記の設定ファイルの<code>table</code>で指定したテーブルを作成する。<code>/etc/mail/aliases</code>は特に変更しなくてもいい。<code>/etc/mail/passwd</code>にはメールアカウントと暗号化されたパスワードを保存する。パスワードの暗号化には<code>smtpctl(8)</code>を使う:</p>
+<pre><code># echo user@mtkn.jp:$(smtpctl encrypt) >> /etc/mail/passwd
+<i>パスワードを入力し、エンター、Ctrl-D</i>
+</code></pre>
+
+<p>
+<code>/etc/mail/virtuals</code>にはメールの転送を設定できる。以下のようにする:</p>
+<pre><code>abuse@mtkn.jp user@mtkn.jp
+postmaster@mtkn.jp user@mtkn.jp
+webmaster@mtkn.jp user@mtkn.jp
+user@mtkn.jp vmail
+</code></pre>
+<p>
+この設定で、例えばabuse@mtkn.jp宛てのメールがuser@mtkn.jpに転送される。abuse, postmaster, webmasterはなんか一応作っとけみたいに書いてたけど必要なんかな?
+</p>
+
+<h3>Dovecotの設定</h3>
+<p>
+MDAとして<code>dovecot(1)</code>をインストールする。</p>
+<pre><code># pkg_add dovecot
+</code></pre>
+<p>
+dhparamを作成する(時間がかかる):
+</p>
+<pre><code># openssl dhparam -out /etc/ssl/dh.pem 4096
+</code></pre>
+
+<p>
+わかりにくい設定ファイルをどけてシンプルなものに書き直す:
+</p>
+<pre><code># mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
+# vi /etc/dovecot/dovecot.conf
+</code></pre>
+<p>
+ドキュメントは公式ウェブサイトで確認できる。分量が多すぎて読む気にならない。サンプルの設定ファイルにも各項目の説明と既定値が書いてあるがこれも分かりにくい。パスワードが漏洩するのはとりあえず避けたいので、<code>ssl = required</code>と暗号化されていないIMAPを<code>port = 0</code>として無効にする。他はとりあえず以下の設定で動く:</p>
+<pre><code># IPv4は全て監視
+listen = *
+
+# SSL接続のみ許可
+ssl = required
+
+# SSLに使用するファイル
+ssl_cert = </etc/ssl/mail.mtkn.jp.fullchain.pem
+ssl_key = </etc/ssl/private/mail.mtkn.jp.key
+ssl_dh = </etc/ssl/dh.pem
+
+# メールの保存場所は各ユーザーのホームディレクトリ。
+# ホームディレクトリの場所は以下のuserdbで設定。
+mail_location = maildir:~
+
+# パスワードのファイル。
+# OpenSMTPDと共有。
+passdb {
+ args = scheme=BLF-CRYPT /etc/mail/passwd
+ driver = passwd-file
+}
+
+# ユーザーの設定。
+# ホームディレクトリは/var/vmail/<i>ドメイン</i>/<i>ユーザー名</i>
+userdb {
+ args = uid=vmail gid=vmail home=/var/vmail/%d/%n
+ driver = static
+}
+
+# 使用するプロトコル。
+protocols = imap lmtp
+
+# SSLを使ったIMAPSのみを許可。
+service imap-login {
+ inet_listener imaps {
+ port = 993
+ ssl = yes
+ }
+ # Disable imap
+ inet_listener imap {
+ port = 0
+ }
+}
+</code></pre>
+<pre><code># rcctl start dovecot
+# rcctl enable dovecot
+</code></pre>
+
+<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.jp && rcctl restart smtpd && rcctl reload dovecot
+</code></pre>
+
+<h3>テスト</h3>
+<p>
+手元のメールクライアントから送受信のテストをする。特にgmail等に送った際に迷惑メールに分類されないかどうか確認する。以上の設定で、gmailへの送受信は問題なかった。また、<code>neomutt(1)</code>、<code>thunderbird(1)</code>からログイン及び送受信できることも確認した。</p>
+
+<h2>参考文献</h2>
+<ul>
+<li><a href="https://unixsheikh.com/tutorials/arch-linux-mail-server-tutorial-part-1-what-is-email.html">Arch Linux mail server tutorial - part 1 - What is email?.unixsheikh.com</a></li>
+<li><a href="https://unixsheikh.com/tutorials/arch-linux-mail-server-tutorial-part-2-opensmtpd-dovecot-dkimproxy-and-lets-encrypt.html">Arch Linux mail server tutorial - part 2 - OpenSMTPD, Dovecot, DKIMproxy, and Let's Encrypt.unixsheikh.com</a></li>
+<li><a href="https://unixsheikh.com/tutorials/arch-linux-mail-server-tutorial-part-3-get-dns-right-it-is-important.html">Arch Linux mail server tutorial - part 3 - Get DNS right, it's important!.unixsheikh.com</a></li>
+<li><a href="https://man.openbsd.org/smtpd">smtpd(8).OpenBSD Manual Pages</a></li>
+<li><a href="https://man.openbsd.org/smtpd.conf">smtpd.conf(5).OpenBSD Manual Pages</a></li>
+<li><a href="https://man.openbsd.org/httpd">httpd(8).OpenBSD Manual Pages</a></li>
+<li><a href="https://man.openbsd.org/httpd.conf">httpd.conf(5).OpenBSD Manual Pages</a></li>
+<li><a href="https://man.openbsd.org/acme-client">acme-client(1).OpenBSD Manual Pages</a></li>
+<li><a href="https://man.openbsd.org/acme-client.conf">acme-client.conf(5).OpenBSD Manual Pages</a></li>
+<li><a href="https://doc.dovecot.org/">Dovecot manual — Dovecot documentation</a></li>
+</ul>
+]]></description>
+</item>
+<item>
+<title>Gitサーバーの設定 on OpenBSD</title>
+<link>https://www.mtkn.jp/computer/git_server.html</link>
+<guid>https://www.mtkn.jp/computer/git_server.html</guid>
+<pubDate>Thu, 15 Feb 2024 00:00:00 +0900</pubDate>
+<description><![CDATA[<h1>Gitサーバーの設定 on OpenBSD</h1>
+<time>2024-02-15</time>
+
+<h2>はじめに</h2>
+<p>
+GitHubがMicrosoft傘下になり久しい。MincraftがMicrosoftアカウントなしでは遊べなくなった。このままではGitHubもそのうちMicrosoftアカウントを要求するようになるかもしれない。ということでGitサーバーを自前で持つことにした。</p>
+<p>
+ところでOpenBSDの開発者がGotという別のgit実装を作成しているので、この記事は近いうちにいらなくなりそう。
+</p>
+
+<h2>手順</h2>
+<p>
+以下ではssh接続によるpull/push及び、httpsによるpullを設定の上、stagitというウェブフロントエンドを導入する。
+</p>
+
+<h3>概要</h3>
+<ol>
+<li>ドメインの設定(任意)</li>
+<li><code>httpd(8)</code>の設定</li>
+<li>gitパッケージのインストールとchroot環境の整備</li>
+<li>stagitの導入</li>
+</ol>
+
+<h3>ドメインの設定(任意)</h3>
+<p>
+ドメインを設定する。IPアドレスでアクセスできればいいならこの設定はいらない。</p>
+<p>
+今回はgitというサブドメインを登録した:
+</p>
+<table>
+<thead>
+<tr>
+<th>サブドメイン</th>
+<th>種別</th>
+<th>内容</th>
+<th>優先度</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>git</td>
+<td>A</td>
+<td><i>サーバーのIPアドレス</i></td>
+<td></td>
+</tr>
+</tbody>
+</table>
+
+<h3><code>httpd(8)</code>の設定</h3>
+<p>
+httpsで接続する場合、<code>acme-client(8)</code>を設定する(IPアドレスで接続するなら自己証明書を発行することになる)。まず<code>/etc/acme-client.conf</code>にドメインを追加する:
+</p>
+<pre><code>domain git.mtkn.jp {
+ domain key "/etc/ssl/private/git.mtkn.jp.key"
+ domain full chain certificate "/etc/ssl/git.mtkn.jp.fullchain.pem"
+ sign with letsencrypt
+}
+</code></pre>
+
+<p>
+続いて<code>/etc/httpd.conf</code>を設定する。</p>
+<pre><code>server "git.mtkn.jp" {
+ listen on * port 80
+ location "/.well-known/acme-challenge/*" {
+ root "/acme"
+ request strip 2
+ }
+ location "*" {
+ block return 302 "https://$HTTP_HOST$REQUEST_URI"
+ }
+}
+
+server "git.mtkn.jp" {
+ listen on * tls port 443
+ tls {
+ certificate "/etc/ssl/git.mtkn.jp.fullchain.pem"
+ key "/etc/ssl/private/git.mtkn.jp.key"
+ }
+ location "/.well-known/acme-challenge/*" {
+ root "/acme"
+ request strip 2
+ }
+ location "/*/git-receive-pack" {
+ block
+ }
+ location "/*/git-upload-pack" {
+ fastcgi {
+ param SCRIPT_FILENAME "/usr/local/libexec/git/git-http-backend"
+ param GIT_PROJECT_ROOT "/git"
+ param GIT_HTTP_EXPORT_ALL "true"
+ }
+ }
+ location "/*/info/refs" {
+ fastcgi {
+ param SCRIPT_FILENAME "/usr/local/libexec/git/git-http-backend"
+ param GIT_PROJECT_ROOT "/git"
+ param GIT_HTTP_EXPORT_ALL "true"
+ }
+ }
+}
+</code></pre>
+<p>
+<code>location "/*/git-receive-pack"</code>はpushの設定。今回はhttpsでのpushを受付けないので<code>block</code>する。</p>
+<p>
+<code>location "/*/git-upload-pack"</code>は手元のパソコンから<code>git clone</code>や<code>git pull</code>したときのもの。<code>location "/*/info/refs"</code>は上記を含むアクセスがあったときのもの。ここではCGIを使って<code>git-http-backend</code>を呼んでいるだけである。<code>SCRIPT_FILENAME</code>は<code>httpd(8)</code>のchroot環境でのパスである。必要なファイルは後でこのchroot環境にコピーする。
+</p>
+<p>
+この後同じURLでフロントエンドをホストしたいので、上記のように必要なURLからのみCGIを実行するようにした。gitのhttpクライアントがどのURLを利用しているのかは[2]に書いていた。</p>
+
+
+
+<p>
+httpsが必要ない場合は1つ目の<code>server</code>に各<code>location</code>を書くだけでいい。
+</p>
+<p>
+<code>httpd(8)</code>と<code>slowcgi(8)</code>を起動する:
+</p>
+<pre><code># echo httpd_flags= >> /etc/rc.conf.local
+# echo slowcgi_flags= >> /etc/rc.conf.local
+# rcctl start httpd
+# rcctl enable httpd
+# rcctl start slowcgi
+# rcctl enable slowcgi
+</code></pre>
+<p>
+サーバー証明書の発行:
+</p>
+<pre><code># acme-client -v git.mtkn.jp
</code></pre>
-
-<h4>各テーブルの作成</h4>
<p>
-上記の設定ファイルの<code>table</code>で指定したテーブルを作成する。<code>/etc/mail/aliases</code>は特に変更しなくてもいい。<code>/etc/mail/passwd</code>にはメールアカウントと暗号化されたパスワードを保存する。パスワードの暗号化には<code>smtpctl(8)</code>を使う:</p>
-<pre><code># echo user@mtkn.jp:$(smtpctl encrypt) >> /etc/mail/passwd
-<i>パスワードを入力し、エンター、Ctrl-D</i>
+<code>crontab(1)</code>にサーバー証明書の自動更新を登録:
+</p>
+<pre><code>#minute hour mday month wday [flags] command
+~ 2 * * * acme-client git.mtkn.jp && rcctl reload httpd
</code></pre>
+<h3>gitパッケージのインストールとchroot環境の整備</h3>
<p>
-<code>/etc/mail/virtuals</code>にはメールの転送を設定できる。以下のようにする:</p>
-<pre><code>abuse@mtkn.jp user@mtkn.jp
-postmaster@mtkn.jp user@mtkn.jp
-webmaster@mtkn.jp user@mtkn.jp
-user@mtkn.jp vmail
+gitパッケージをインストールし、ssh接続用のユーザーを作成する。httpsでも公開するので、gitユーザーのホームディレクトリは<code>/var/www</code>下にする:
+</p>
+<pre><code># pkg_add git
+# useradd -b /var/www -m -s /usr/local/bin/git-shell git
</code></pre>
<p>
-この設定で、例えばabuse@mtkn.jp宛てのメールがuser@mtkn.jpに転送される。abuse, postmaster, webmasterはなんか一応作っとけみたいに書いてたけど必要なんかな?
-</p>
-
-<h3>Dovecotの設定</h3>
+ssh接続用の公開鍵を<code>/var/www/git/.ssh/authorized_keys</code>に登録する。ところでこのファイルに公開鍵を書き込むとgitユーザーとしてsshでログインできるので、部外者がこのファイルの編集をできないようにしておく必要がある。一応所有者は<code>git:git</code>、権限は<code>-rw-------</code>なので大丈夫だと思うが、心配なら<code>httpd(8)</code>のchroot環境の外にこのファイルを移動させておいてもいいかもしれない。</p>
<p>
-MDAとして<code>dovecot(1)</code>をインストールする。</p>
-<pre><code># pkg_add dovecot
+httpsでアクセスするためにchroot環境を整備する。<code>httpd(8)</code>は既定では<code>/var/www</code>にchrootして実行されるので、CGIに必要なファイルをこのディレクトリ以下に用意する必要がある。まずはgitのコマンドをコピー:
+</p>
+<pre><code># mkdir -p /var/www/usr/local/libexec/git
+# cp /usr/local/libexec/git/git-{http-backend,receive-pack,upload-pack} /var/www/usr/local/libexec/git/
+# chown www:www /var/www/usr/local/libexec/git/git-{http-backend,receive-pack,upload-pack}
+# chmod 0500 /var/www/usr/local/libexec/git/git-{http-backend,receive-pack,upload-pack}
+# mkdir -p /var/www/usr/local/bin
+# cp /usr/local/bin/git /var/www/usr/local/bin/
+# chown www:www /var/www/usr/local/bin/git
+# chmod 0500 /var/www/usr/local/bin/git
</code></pre>
<p>
-dhparamを作成する(時間がかかる):
+続いてコマンドの実行に必要なライブラリをコピー:
</p>
-<pre><code># openssl dhparam -out /etc/ssl/dh.pem 4096
+<pre><code># mkdir -p /var/www/usr/lib /var/www/usr/local/lib /var/www/usr/libexec
+# find /var/www/{bin,usr} -type f | grep git | xargs ldd | awk '{print $7}' | grep -v -e '^/var/www/' -e '^$' -e 'Name' | sort | uniq | awk '{printf "cp %s /var/www%s && chown www:www /var/www%s && chmod 0400 /var/www%s\n", $1, $1, $1, $1}' | sh -s
</code></pre>
-
<p>
-わかりにくい設定ファイルをどけてシンプルなものに書き直す:
+<code>/dev/null</code>をコピーする(<code>mknod(8)</code>参照):
</p>
-<pre><code># mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
-# vi /etc/dovecot/dovecot.conf
+<pre><code># mkdir /var/www/dev
+# mknod -m 666 /var/www/dev/null c 2 2
</code></pre>
<p>
-ドキュメントは公式ウェブサイトで確認できる。分量が多すぎて読む気にならない。サンプルの設定ファイルにも各項目の説明と既定値が書いてあるがこれも分かりにくい。パスワードが漏洩するのはとりあえず避けたいので、<code>ssl = required</code>と暗号化されていないIMAPを<code>port = 0</code>として無効にする。他はとりあえず以下の設定で動く:</p>
-<pre><code># IPv4は全て監視
-listen = *
+最後に、<code>/var/www/dev/null</code>を作成するために<code>/etc/fstab</code>の<code>/var</code>エントリーから<code>nodev</code>オプションを削除し、再起動する。
+</p>
-# SSL接続のみ許可
-ssl = required
+<p>
+gitパッケージやシステムの更新後、chroot環境のコマンドやライブラリも更新しないといけないのでそのためのスクリプトを適当に作った:
+</p>
+<pre><code>#!/bin/sh -xe
-# SSLに使用するファイル
-ssl_cert = </etc/ssl/mail.mtkn.jp.fullchain.pem
-ssl_key = </etc/ssl/private/mail.mtkn.jp.key
-ssl_dh = </etc/ssl/dh.pem
+oso=$(find /var/www/usr -type f -name '*.so*')
+rm $oso
-# メールの保存場所は各ユーザーのホームディレクトリ。
-# ホームディレクトリの場所は以下のuserdbで設定。
-mail_location = maildir:~
+bin=$(find /var/www/bin /var/www/usr -type f ! -name '*.so*' |
+ grep -v bgpctl |
+ sed 's|^/var/www||'
+ )
+echo "$bin" | sed 's|.*|cp & /var/www&|' | sh -s
+echo "$bin" | sed 's|.*|chown www:www /var/www&|' | sh -s
+echo "$bin" | sed 's|.*|chmod 0500 /var/www&|' | sh -s
-# パスワードのファイル。
-# OpenSMTPDと共有。
-passdb {
- args = scheme=BLF-CRYPT /etc/mail/passwd
- driver = passwd-file
-}
+nso=$(echo "$bin" | sed 's|^|/var/www|' |
+ xargs ldd | awk '{print $7}' |
+ grep -v -e '^/var/www/' -e '^$' -e 'Name' |
+ sort | uniq
+ )
+echo "$nso" | sed 's|.*|cp & /var/www&|' | sh -s
+echo "$nso" | sed 's|.*|chown www:www /var/www&|' | sh -s
+echo "$nso" | sed 's|.*|chmod 0400 /var/www&|' | sh -s
+</code></pre>
-# ユーザーの設定。
-# ホームディレクトリは/var/vmail/<i>ドメイン</i>/<i>ユーザー名</i>
-userdb {
- args = uid=vmail gid=vmail home=/var/vmail/%d/%n
- driver = static
-}
+<h3><code>stagit(1)</code>の導入</h3>
+<p>
+ウェブフロントエンドとしてstagitを導入する:
+</p>
+<pre><code># pkg_add stagit
+</code></pre>
+<p>
+<code>httpd.conf(5)</code>の<code>server "git.mtkn.jp"</code>の中に以下の設定を追加する(<code>location</code>のマッチは上から順番に評価されるので、上で設定したgitのhttpクライアント用の<code>location</code>よりも下に記入する):
+</p>
+<pre><code> location "/" {
+ directory index index.html
+ root "/htdocs/git.mtkn.jp"
+ }
+ location "*" {
+ directory index log.html
+ root "/htdocs/git.mtkn.jp"
+ }
+</code></pre>
+<p>
+stagit用のディレクトリを作成して<code>httpd(8)</code>を再読込する:
+</p>
+<pre><code># mkdir /var/www/htdocs/git.mtkn.jp
+# chown git:git /var/www/htdocs/git.mtkn.jp
+# rcctl reload httpd
+</code></pre>
-# 使用するプロトコル。
-protocols = imap lmtp
+<p>
+gitリポジトリが更新されたときにウェブページも更新するように設定する。gitリポジトリはなにか更新があった場合、そのリポジトリのディレクトリの中の<code>hooks/post-receive</code>というファイルを自動で実行する。そのためこのファイルに、stagitの更新をするスクリプトを書いておけばいい:
+</p>
+<pre><code>#!/bin/sh
-# SSLを使ったIMAPSのみを許可。
-service imap-login {
- inet_listener imaps {
- port = 993
- ssl = yes
- }
- # Disable imap
- inet_listener imap {
- port = 0
- }
-}
+git_root="/var/www/git"
+stagit_root="/var/www/htdocs/git.mtkn.jp"
+repo="$(basename "$(pwd)" | sed 's/\.git$//')"
+src="$(pwd)"
+stagit_dst="$stagit_root/$repo"
+
+mkdir -p "$stagit_dst"
+(cd "$stagit_dst" && stagit -l 64 "$src")
+(cd "$stagit_root" && stagit-index $git_root/*.git > index.html)
</code></pre>
-<pre><code># rcctl start dovecot
-# rcctl enable dovecot
+
+<h2>レポジトリの作成</h2>
+<p>
+レポジトリを作成するにはサーバーで以下のようにする。</p>
+<pre><code>$ cd /var/www/git
+$ doas -u git mkdir <i>repo</i>.git
+$ cd <i>repo</i>.git
+$ doas -u git git init --bare
</code></pre>
<p>
-サーバーの証明書が更新される際に<code>dovecot(1)</code>も再読み込みされるように<code>cron(8)</code>に追加しておく:
+これで手元のパソコンからクローンできる:
</p>
-<pre><code>crontab -e
+<pre><code>$ git clone git@git.mtkn.jp:<i>repo</i>.git
</code></pre>
-
-<pre><code>#minute hour mday month wday [flags] command
-~ 2 * * * acme-client mail.mtkn.jp && rcctl restart smtpd && rcctl reload dovecot
+<p>
+または
+</p>
+<pre><code>$ git clone https://git.mtkn.jp/<i>repo</i>.git
</code></pre>
-<h3>テスト</h3>
+<h2>参考</h2>
+<ul>
+<li>[1] <a href="https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols">Git - The Protocols.Git</a></li>
+<li>[2] <a href="https://git-scm.com/docs/http-protocol">Git - http-protocol Documentation.Git</a></li>
+<li>[3] <a href="https://codemadness.org/stagit.html">Stagit: a static git page generator - Codemadness</a></li>
+</ul>
+]]></description>
+</item>
+<item>
+<title>味噌</title>
+<link>https://www.mtkn.jp/kitchen/recipe/miso.html</link>
+<guid>https://www.mtkn.jp/kitchen/recipe/miso.html</guid>
+<pubDate>Fri, 9 Feb 2024 00:00:00 +0900</pubDate>
+<description><![CDATA[<h1>味噌</h1>
+<time>2024-02-09</time>
+
+<h2>材料</h2>
+<p>二升の甕4つ分弱</p>
+<ul>
+<li>大豆 3.6kg</li>
+<li>米麹 5kg</li>
+<li>塩 1.8kg</li>
+<li>酒粕 500g</li>
+</ul>
+
+<h2>手順</h2>
+<ol>
+<li>大豆を24時間水に浸す</li>
+<li>麹と塩を混ぜる</li>
+<li>大豆を3時間蒸す</li>
+<li>大豆を潰す</li>
+<li>大豆を麹と混ぜる(蒸したときの汁を混ぜて硬さを調整する)</li>
+<li>甕に詰める</li>
+<li>酒粕で蓋をしてさらにラップで落し蓋をして密閉する。</li>
+<li>半年以上寝かす</li>
+</ol>
+
+<h2>ひとこと</h2>
<p>
-手元のメールクライアントから送受信のテストをする。特にgmail等に送った際に迷惑メールに分類されないかどうか確認する。以上の設定で、gmailへの送受信は問題なかった。また、<code>neomutt(1)</code>、<code>thunderbird(1)</code>からログイン及び送受信できることも確認した。</p>
+豆はジップロックに入れて拳に体重を乗せて押しつぶすと楽だった。ジップロックあんまり使いたくないけど。ラップで蓋をするのは好きではないので、試験的にひと瓷だけラップなしで放置することにした。酒粕も味噌っぽくなって食べられるが、風味は少し変わる。味噌汁が粕汁っぽくなる。</p>
+]]></description>
+</item>
+<item>
+<title>自己紹介</title>
+<link>https://www.mtkn.jp/about.html</link>
+<guid>https://www.mtkn.jp/about.html</guid>
+<pubDate>Tue, 23 Jan 2024 00:00:00 +0900</pubDate>
+<description><![CDATA[<h1>自己紹介</h1>
+<time>2022-07-28</time>
+
+<p><img class="portrait" src="/pics/icon.jpeg" alt="似顔絵" width="100"></p>
-<h2>参考文献</h2>
<ul>
-<li><a href="https://unixsheikh.com/tutorials/arch-linux-mail-server-tutorial-part-1-what-is-email.html">Arch Linux mail server tutorial - part 1 - What is email?.unixsheikh.com</a></li>
-<li><a href="https://unixsheikh.com/tutorials/arch-linux-mail-server-tutorial-part-2-opensmtpd-dovecot-dkimproxy-and-lets-encrypt.html">Arch Linux mail server tutorial - part 2 - OpenSMTPD, Dovecot, DKIMproxy, and Let's Encrypt.unixsheikh.com</a></li>
-<li><a href="https://unixsheikh.com/tutorials/arch-linux-mail-server-tutorial-part-3-get-dns-right-it-is-important.html">Arch Linux mail server tutorial - part 3 - Get DNS right, it's important!.unixsheikh.com</a></li>
-<li><a href="https://man.openbsd.org/smtpd">smtpd(8).OpenBSD Manual Pages</a></li>
-<li><a href="https://man.openbsd.org/smtpd.conf">smtpd.conf(5).OpenBSD Manual Pages</a></li>
-<li><a href="https://man.openbsd.org/httpd">httpd(8).OpenBSD Manual Pages</a></li>
-<li><a href="https://man.openbsd.org/httpd.conf">httpd.conf(5).OpenBSD Manual Pages</a></li>
-<li><a href="https://man.openbsd.org/acme-client">acme-client(1).OpenBSD Manual Pages</a></li>
-<li><a href="https://man.openbsd.org/acme-client.conf">acme-client.conf(5).OpenBSD Manual Pages</a></li>
-<li><a href="https://doc.dovecot.org/">Dovecot manual — Dovecot documentation</a></li>
+ <li>名前: 松田 健嗣</li>
+ <li>性別: 男</li>
+ <li>年齢: 20代</li>
+ <li>出身: 和歌山</li>
</ul>
+
+<p>
+高校のころ物理学や数学が好きで、学者を志して大学に行きましたが、能力が足りずに挫折しました。当時は自分の状況を省みることなくひたすら努力していたつもりです。ところがこの努力こそが無駄の根源だったように思います。二回の留年を経て三年目には定員を割っていた生物系に進み、クモの採集にいそしんでいました。京都の山々に分け入っては標本を集める日々です。これはなかなか楽しかった。結局大学ではクモの新種を1つ記載して卒業となりました。
+</p>
+<p>
+勉強以外では合気道部に所属していましたがこちらではなにも努力していた自覚もなく、そこそこの実力を付けていたように思います。自分にとって稽古することが自然なことだったのでしょう。特にしんどいと思ったこともなかったです。無駄な力を抜き全身をうまく使うことを合気道の稽古から学んでいたはずなのに、それが勉強の方には生かせていなかったのです。
+</p>
+<p>
+在学中は社会に出て仕事をすることなど考えていなかったため、いざ就職活動となると業界を選ぶことも大変でした。かろうじて興味のあったのがコンピュータなので、それ関係の会社を覗いたりしましたが、本当に自分にあっているのか分からず一から考え直すことに。結局実家の会社を嗣ぐために同業大手に応募、採用されました。
+</p>
+<p>
+ところがこの会社があまりにも合わず半年で適応障害になって辞めることに。以来実家に戻って畑をするかたわら寺に通っています。この間生き方についていろいろ考えた結果、社会にもまれて気付いたら定年しているより、もっと人間らしい老い方をしたいと思うに至ったのです。常識に縛られても結局その常識に裏切られるだけです。金銭的な豊かさはあまりにも脆いものでしょう。
+</p>
+<p>
+このサイトは日々考えていることを記しておきたいと思い立ち上げました。周りの人にはあまり共感されない僕の考えですが、なにかの参考になれば幸いです。
+</p>
+
+<h2>著作権について</h2>
+<p>
+このウェブサイト上のコンテンツは、特に断りのない限り<a href="http://creativecommons.org/publicdomain/zero/1.0?ref=chooser-v1" rel="license noopener noreferrer">CC0 1.0</a>で公開します。</p>
]]></description>
</item>
<item>
diff --git a/pub/sitemap.xml b/pub/sitemap.xml
@@ -2,6 +2,7 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>https://www.mtkn.jp/computer/rp2040_2.html</loc><lastmod>2024-02-24</lastmod></url>
<url><loc>https://www.mtkn.jp/computer/rp2040_1.html</loc><lastmod>2024-02-24</lastmod></url>
+<url><loc>https://www.mtkn.jp/computer/mailserver.html</loc><lastmod>2024-02-24</lastmod></url>
<url><loc>https://www.mtkn.jp/</loc><lastmod>2024-02-22</lastmod></url>
<url><loc>https://www.mtkn.jp/computer/</loc><lastmod>2024-02-22</lastmod></url>
<url><loc>https://www.mtkn.jp/books/</loc><lastmod>2024-02-17</lastmod></url>
@@ -9,7 +10,6 @@
<url><loc>https://www.mtkn.jp/kitchen/recipe/miso.html</loc><lastmod>2024-02-09</lastmod></url>
<url><loc>https://www.mtkn.jp/kitchen/</loc><lastmod>2024-02-09</lastmod></url>
<url><loc>https://www.mtkn.jp/about.html</loc><lastmod>2024-01-23</lastmod></url>
-<url><loc>https://www.mtkn.jp/computer/mailserver.html</loc><lastmod>2024-01-19</lastmod></url>
<url><loc>https://www.mtkn.jp/computer/what-i-use.html</loc><lastmod>2024-01-13</lastmod></url>
<url><loc>https://www.mtkn.jp/gallery/</loc><lastmod>2024-01-01</lastmod></url>
<url><loc>https://www.mtkn.jp/gallery/20240101.html</loc><lastmod>2024-01-01</lastmod></url>