www.mtkn.jp

Manuscripts for my personal webpage.
git clone https://git.mtkn.jp/www.mtkn.jp
Log | Files | Refs | LICENSE

commit dcf7dc272e7e6700af2ba23d824d343bfe7ee0a6
parent b58bd2e9c72c6bf3e956a3be48637af7f4ba7be6
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Wed, 14 Feb 2024 18:18:07 +0900

add git_server.html

Diffstat:
Aman/draft/git_server.html | 212+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dman/draft/setting_up_mail_server.html | 128-------------------------------------------------------------------------------
Apub/draft/git_server.html | 206+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mpub/draft/rp2040_2.html | 2+-
Dpub/draft/setting_up_mail_server.html | 153-------------------------------------------------------------------------------
Mpub/rss.xml | 4++--
6 files changed, 421 insertions(+), 284 deletions(-)

diff --git a/man/draft/git_server.html b/man/draft/git_server.html @@ -0,0 +1,212 @@ +<h1>Gitサーバーの設定 on OpenBSD</h1> +<time>2024-02-14</time> + +<h2>はじめに</h2> +<p> +GitHubがMicrosoft傘下になり久しい。\ +MincraftがMicrosoftアカウントなしでは遊べなくなった。\ +このままではGitHubもそのうちMicrosoftアカウントを要求するように\ +なるかもしれない。\ +ということでGitサーバーを自前で持つことにした。\ +</p> + +<h2>手順</h2> +<p> +以下ではssh接続によるpull/push及び、httpsによるpullを設定する。 +<h3>概要</h3> +<ol> +<li>ドメインの設定(任意)</li> +<li><code>httpd(8)</code>の設定</li> +<li>gitパッケージのインストールとchroot環境の整備</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>を設定する。\ +まず<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> +httpsが必要ない場合は1つ目の<code>server</code>に各<code>location</code>を書くだけ\ +でいい。 +</p> +<p> +<code>httpd(8)</code>と<code>slowcgi(8)</code>を起動する: +</p> +<pre><code>\ +# echo httpd_flags= &gt;&gt; /etc/rc.conf.local +# echo slowcgi_flags= &gt;&gt; /etc/rc.conf.local +# rcctl start httpd +# rcctl enable httpd +# rcctl start slowcgi +# rcctl enable slowcgi +</code></pre> +<p> +サーバー証明書の発行: +</p> +<pre><code>\ +# acme-client -b 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.xyz && 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>に登録する。\ +セキュリティ大丈夫かこれ。\ +一応所有者は<code>git:git</code>、権限は<code>-rw-------</code>。\ +</p> + +<p> +httpsでアクセスするためにchroot環境を整備する。\ +<code>httpd(8)</code>は既定では/var/wwwにchrootして実行されるので、\ +CGIに必要なファイルをこのディレクトリ以下に用意する必要がある。\ +まずはgitのコマンドをコピー: +</p> +<pre><code>\ +# mkdir -p /var/www/usr/local/libexec/git +# cp /usr/local/libexec/git-{http-backend,receive-pack,upload-pack} /var/www/usr/local/libexec/git/ +# mkdir -p /var/www/usr/local/bin +# cp /usr/local/bin/git /var/www/usr/local/bin/ +</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\ n", $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> + +<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 https://git.mtkn.jp:<i>repo</i>.git +</code></pre> diff --git a/man/draft/setting_up_mail_server.html b/man/draft/setting_up_mail_server.html @@ -1,128 +0,0 @@ -<h1>OpenBSD、OpenSMTPDとDovecotによるメールサーバー構築</h1> -<time>2022-06-15</time> -<h2>はじめに</h2> -<p>長らくGmailを利用していたが、Googleが嫌になったので、自分のドメインを入手したのを機に自前のメールサーバーを構築してみた。</p> -<h2>環境</h2> -<ul> - <li>OpenBSD 7.1</li> - <li>OpenSMTPD 7.0.0</li> - <li>Dovecot 2.3.19</li> - <li>さくらのVPS: IPアドレスは<code>&lt;server_ip&gt;</code>とする。</li> - <li>さくらのドメイン: ドメイン名は<code>&lt;server_domain&gt;</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 mail.&lt;server_ip&gt;</code>を追加:</p> -<pre><code>domain mail.&lt;server_domain&gt; { - domain key "/etc/ssl/private/mail.&lt;server_domain&gt;.key" - domain full chain certificate "/etc/ssl/mail.&lt;server_domain&gt;.fullchain.pem" - sign with letsencrypt -}</pre></code> - -<pre><code># acme-client -v &lt;server_domain&gt; && rcctl start httpd -# crontab -e -43 1 * * * acme-client -v mail.&lt;server_domain&gt; && rcctl restart smtpd && rcctl reload dovcot -&lt;Esc&gt;:wq</code></pre> - -<h3>smtpdの設定</h3> -<pre><code>pki "mail" cert "/etc/ssl/mail.&lt;server_domain&gt;.fullchain.pem" -pki "mail" key "/etc/ssl/private/mail.&lt;server_domain&gt;.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.&lt;server_domain&gt; -s selector1\ - -k /etc/mail/dkim/private.rsa.key" user _dkimsign group _dkimsign - -filter check_rdns phase connect match !rdns disconnect "550 no rDNS." -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.&lt;server_domain&gt;"\ - 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/&lt;server_domain&gt;/%{dest.user:lowercase}"\ - virtual <virtuals> -action "outbound" relay - -match from any for domain "&lt;server_domain&gt;" 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@&lt;server_domain&gt; admin@&lt;server_domain&gt; -postmaster@&lt;server_domain&gt; admin@&lt;server_domain&gt; -webmaster@&lt;server_domain&gt; admin@&lt;server_domain&gt; -admin@&lt;server_domain&gt; vmail -contact@&lt;server_domain&gt; vmail</pre></code> - -<p><code>/etc/mail/passwd</code>:</p> -<pre><code>admin@&lt;server_domain&gt;:$2b$10$..... -contact@&lt;server_domain&gt;:$2b$10$.....</code></pre> - -<pre><code># rcctl restart smtpd</code></pre> - -<h3>Dovecotの設定</h3> -<h4>インストール</h4> -<pre><code># pkg_add dovecot</code></pre> - -<h4>ログインクラスの設定</h4> -<p>これをしないとなんかエラーが出る。</p> -<code>/etc/login.conf</code> -<pre><code>dovecot:\ - :openfiles-cur=1024:\ - :openfiles-max=2048:\ - :tc=daemon:</code></pre> -<pre><code># usermod -L dovecot _dovecot</pre></code> - -<h3>DNSの設定</h3> - -<h3>ファイアーウォールの設定</h3> - -<h3>DKIMproxyの設定</h3> - - -<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?</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</a></li> -</ul> diff --git a/pub/draft/git_server.html b/pub/draft/git_server.html @@ -0,0 +1,206 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width,initial-scale=1"> + <link rel="stylesheet" type="text/css" href="/style.css"> + <link rel="icon" type="image/x-icon" href="/pics/favicon.ico"> + <title>Gitサーバーの設定 on OpenBSD</title> +</head> +<body> + <header> + <a href="/">主頁</a> | + <a href="/about.html">自己紹介</a> | + <a href="/journal">日記</a> | + <a href="/farm">農業</a> | + <a href="/kitchen">台所</a> | + <a href="/computer">電算機</a> | + <a href="/poetry">詩</a> | + <a href="/books">本棚</a> | + <a href="/gallery">絵</a> | + <a href="https://git.mtkn.jp">Git</a> + </header> + <main> + <article> +<h1>Gitサーバーの設定 on OpenBSD</h1> +<time>2024-02-14</time> + +<h2>はじめに</h2> +<p> +GitHubがMicrosoft傘下になり久しい。MincraftがMicrosoftアカウントなしでは遊べなくなった。このままではGitHubもそのうちMicrosoftアカウントを要求するようになるかもしれない。ということでGitサーバーを自前で持つことにした。</p> + +<h2>手順</h2> +<p> +以下ではssh接続によるpull/push及び、httpsによるpullを設定する。 +<h3>概要</h3> +<ol> +<li>ドメインの設定(任意)</li> +<li><code>httpd(8)</code>の設定</li> +<li>gitパッケージのインストールとchroot環境の整備</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>を設定する。まず<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> +httpsが必要ない場合は1つ目の<code>server</code>に各<code>location</code>を書くだけでいい。 +</p> +<p> +<code>httpd(8)</code>と<code>slowcgi(8)</code>を起動する: +</p> +<pre><code># echo httpd_flags= &gt;&gt; /etc/rc.conf.local +# echo slowcgi_flags= &gt;&gt; /etc/rc.conf.local +# rcctl start httpd +# rcctl enable httpd +# rcctl start slowcgi +# rcctl enable slowcgi +</code></pre> +<p> +サーバー証明書の発行: +</p> +<pre><code># acme-client -b 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.xyz && 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>に登録する。セキュリティ大丈夫かこれ。一応所有者は<code>git:git</code>、権限は<code>-rw-------</code>。</p> + +<p> +httpsでアクセスするためにchroot環境を整備する。<code>httpd(8)</code>は既定では/var/wwwにchrootして実行されるので、CGIに必要なファイルをこのディレクトリ以下に用意する必要がある。まずはgitのコマンドをコピー: +</p> +<pre><code># mkdir -p /var/www/usr/local/libexec/git +# cp /usr/local/libexec/git-{http-backend,receive-pack,upload-pack} /var/www/usr/local/libexec/git/ +# mkdir -p /var/www/usr/local/bin +# cp /usr/local/bin/git /var/www/usr/local/bin/ +</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\ n", $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> + +<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 https://git.mtkn.jp:<i>repo</i>.git +</code></pre> + </article> + + </main> + <footer> + <address>info(at)mtkn(dot)jp</address> + <a href="http://creativecommons.org/publicdomain/zero/1.0?ref=chooser-v1" rel="license noopener noreferrer">CC0 1.0</a> + </footer> +</body> +</html> diff --git a/pub/draft/rp2040_2.html b/pub/draft/rp2040_2.html @@ -95,7 +95,7 @@ pico-sdk/src/rp2_common/pico_standard_link/crt0.S </code></pre> <p>このファイルによると: </p> -<pre><code>// Only core 0 should run the C runtime startup code; core 1 is normally +<pre><code> // Only core 0 should run the C runtime startup code; core 1 is normally // sleeping in the bootrom at this point but check to be sure </code></pre> <p>だそうである。やっぱり無駄やん。内蔵フラッシュのプログラムにバグがあってもこのコードのせいで見付かりにくくなってない?知らんけど。</p> diff --git a/pub/draft/setting_up_mail_server.html b/pub/draft/setting_up_mail_server.html @@ -1,153 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width,initial-scale=1"> - <link rel="stylesheet" type="text/css" href="/style.css"> - <link rel="icon" type="image/x-icon" href="/pics/favicon.ico"> - <title>OpenBSD、OpenSMTPDとDovecotによるメールサーバー構築</title> -</head> -<body> - <header> - <a href="/">主頁</a> | - <a href="/about.html">自己紹介</a> | - <a href="/journal">日記</a> | - <a href="/farm">農業</a> | - <a href="/kitchen">台所</a> | - <a href="/computer">電算機</a> | - <a href="/poetry">詩</a> | - <a href="/books">本棚</a> | - <a href="/gallery">絵</a> | - <a href="https://git.mtkn.jp">Git</a> - </header> - <main> - <article> -<h1>OpenBSD、OpenSMTPDとDovecotによるメールサーバー構築</h1> -<time>2022-06-15</time> -<h2>はじめに</h2> -<p>長らくGmailを利用していたが、Googleが嫌になったので、自分のドメインを入手したのを機に自前のメールサーバーを構築してみた。</p> -<h2>環境</h2> -<ul> - <li>OpenBSD 7.1</li> - <li>OpenSMTPD 7.0.0</li> - <li>Dovecot 2.3.19</li> - <li>さくらのVPS: IPアドレスは<code>&lt;server_ip&gt;</code>とする。</li> - <li>さくらのドメイン: ドメイン名は<code>&lt;server_domain&gt;</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 mail.&lt;server_ip&gt;</code>を追加:</p> -<pre><code>domain mail.&lt;server_domain&gt; { - domain key "/etc/ssl/private/mail.&lt;server_domain&gt;.key" - domain full chain certificate "/etc/ssl/mail.&lt;server_domain&gt;.fullchain.pem" - sign with letsencrypt -}</pre></code> - -<pre><code># acme-client -v &lt;server_domain&gt; && rcctl start httpd -# crontab -e -43 1 * * * acme-client -v mail.&lt;server_domain&gt; && rcctl restart smtpd && rcctl reload dovcot -&lt;Esc&gt;:wq</code></pre> - -<h3>smtpdの設定</h3> -<pre><code>pki "mail" cert "/etc/ssl/mail.&lt;server_domain&gt;.fullchain.pem" -pki "mail" key "/etc/ssl/private/mail.&lt;server_domain&gt;.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.&lt;server_domain&gt; -s selector1-k /etc/mail/dkim/private.rsa.key" user _dkimsign group _dkimsign - -filter check_rdns phase connect match !rdns disconnect "550 no rDNS." -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.&lt;server_domain&gt;"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/&lt;server_domain&gt;/%{dest.user:lowercase}"virtual <virtuals> -action "outbound" relay - -match from any for domain "&lt;server_domain&gt;" 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@&lt;server_domain&gt; admin@&lt;server_domain&gt; -postmaster@&lt;server_domain&gt; admin@&lt;server_domain&gt; -webmaster@&lt;server_domain&gt; admin@&lt;server_domain&gt; -admin@&lt;server_domain&gt; vmail -contact@&lt;server_domain&gt; vmail</pre></code> - -<p><code>/etc/mail/passwd</code>:</p> -<pre><code>admin@&lt;server_domain&gt;:$2b$10$..... -contact@&lt;server_domain&gt;:$2b$10$.....</code></pre> - -<pre><code># rcctl restart smtpd</code></pre> - -<h3>Dovecotの設定</h3> -<h4>インストール</h4> -<pre><code># pkg_add dovecot</code></pre> - -<h4>ログインクラスの設定</h4> -<p>これをしないとなんかエラーが出る。</p> -<code>/etc/login.conf</code> -<pre><code>dovecot::openfiles-cur=1024::openfiles-max=2048::tc=daemon:</code></pre> -<pre><code># usermod -L dovecot _dovecot</pre></code> - -<h3>DNSの設定</h3> - -<h3>ファイアーウォールの設定</h3> - -<h3>DKIMproxyの設定</h3> - - -<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?</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</a></li> -</ul> - </article> - - </main> - <footer> - <address>info(at)mtkn(dot)jp</address> - <a href="http://creativecommons.org/publicdomain/zero/1.0?ref=chooser-v1" rel="license noopener noreferrer">CC0 1.0</a> - </footer> -</body> -</html> 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, 10 Feb 2024 09:18:54 +0900</lastBuildDate> -<pubDate>Sat, 10 Feb 2024 09:18:54 +0900</pubDate> +<lastBuildDate>Wed, 14 Feb 2024 13:29:25 +0900</lastBuildDate> +<pubDate>Wed, 14 Feb 2024 13:29:25 +0900</pubDate> <docs>https://www.rssboard.org/rss-specification</docs> <item> <title>RP2040 SDKなしでLチカ</title>