www.mtkn.jp

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

setting_up_mail_server.html (7502B)


      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4 	<meta charset="utf-8">
      5 	<meta name="viewport" content="width=device-width,initial-scale=1">
      6 	<link rel="stylesheet" type="text/css" href="/style.css">
      7 	<link rel="icon" type="image/x-icon" href="/pics/favicon.ico">
      8 	<title>OpenBSD、OpenSMTPDとDovecotによるメールサーバー構築</title>
      9 </head>
     10 <body>
     11 	<header>
     12 		<a href="/">主頁</a> |
     13 		<a href="/about.html">自己紹介</a> |
     14 		<a href="/journal">日記</a> |
     15 		<a href="/farm">農業</a> |
     16 		<a href="/kitchen">台所</a> |
     17 		<a href="/computer">電算機</a> |
     18 		<a href="/poetry">詩</a> |
     19 		<a href="/books">本棚</a> |
     20 		<a href="/gallery">絵</a> |
     21 		<a href="https://git.mtkn.jp">Git</a>
     22 	</header>
     23 	<main>
     24 		<article>
     25 <h1>OpenBSD、OpenSMTPDとDovecotによるメールサーバー構築</h1>
     26 <time>2022-06-15</time>
     27 <h2>はじめに</h2>
     28 <p>長らくGmailを利用していたが、Googleが嫌になったので、自分のドメインを入手したのを機に自前のメールサーバーを構築してみた。</p>
     29 <h2>環境</h2>
     30 <ul>
     31 	<li>OpenBSD 7.1</li>
     32 	<li>OpenSMTPD 7.0.0</li>
     33 	<li>Dovecot 2.3.19</li>
     34 	<li>さくらのVPS: IPアドレスは<code>&lt;server_ip&gt;</code>とする。</li>
     35 	<li>さくらのドメイン: ドメイン名は<code>&lt;server_domain&gt;</code>とする。</li>
     36 </ul>	
     37 
     38 <h2>概要</h2>
     39 <h3>メール送受信の流れ</h3>
     40 <p>メールの送受信に関わるものには主に以下のようなものがある。</p>
     41 <dl>
     42 	<dt>メールソフト</dt>
     43 	<dd>ユーザーがメールを読み書きし、送受信するためのソフトウェア。Mail Submission Agent(MSA)とも。メールクライアントと呼んだ方が正確な気がする。メールソフトでは後述のメールサーバー用のソフトウェアも含まれるように聞こえる。</dd>
     44 	<dt>SMTPサーバー</dt>
     45 	<dd>ユーザーから送られてきたメールを宛先に転送するサーバー。Simple Mail Transfer Protocol(SMTP)を用いて他のSMTPサーバーとメールのデータをやり取りする。Mail Transfer Agent(MTA)とも。</dd>
     46 	<dt>POPサーバー</dt>
     47 	<dt>IMAPサーバー</dt>
     48 	<dd>SMTPサーバーに届いたメールを宛先のユーザーに届けるサーバー。メール配信に利用するプロトコルに応じてそれぞれPOPサーバー、IMAPサーバーと言う。Mail Delivery Agent(MDA)とも。</dd>
     49 </dl>
     50 
     51 <p>メールが送信されてから宛先に届くまでのおおまかな流れは以下のようなものである。</p>
     52 <ol>
     53 	<li>メールソフトから送信側のメールサーバーにメールを送信(SMTP)。</li>
     54 	<li>送信側のドメインから送信されたメールであることを保証するためにDKIMの秘密鍵でメールに署名する。</li>
     55 	<li>送信側のメールサーバーがメールの宛先のドメインをDNSサーバーに問い合わせて受信側のメールサーバーのIPアドレスを取得</li>
     56 	<li>取得したIPアドレスを用いて受信側のメールサーバーにメールを送信(SMTP)</li>
     57 	<li>受信側のメールサーバーがDNSサーバーから送信元のドメインに紐付いたDKIMの公開鍵を取得し、届いたメールの署名を確認。その他いくつかの方法でメールの有効性を確認。</li>
     58 	<li>迷惑メール用のフィルターにかける。</li>
     59 	<li>受信側のメールサーバーが届いたメールの宛先を確認して宛先のユーザーのフォルダにメールを保存。</li>
     60 	<li>受信者がメールソフトから受信側のメールサーバーから新着メールをダウンロード(IMAP、POP)</li>
     61 </ol>
     62 <p>
     63 
     64 <h2>手順</h2>
     65 <h3>vmailユーザーを追加</h3>
     66 <pre><code># useradd -m -c "Virtual Mail" -d /var/vmail -s /sbin/nologin vmail</code></pre>
     67 
     68 <h3>サーバー証明書の発行と設定</h3>
     69 <p>メールサーバーの他にウェブサーバーも設定するので、<code>httpd</code>と共にLet's Encryptを設定。</p>
     70 <p><code>/etc/acme-client.conf</code>に<code>domain mail.&lt;server_ip&gt;</code>を追加:</p>
     71 <pre><code>domain mail.&lt;server_domain&gt; {
     72 	domain key "/etc/ssl/private/mail.&lt;server_domain&gt;.key"
     73 	domain full chain certificate "/etc/ssl/mail.&lt;server_domain&gt;.fullchain.pem"
     74 	sign with letsencrypt
     75 }</pre></code>
     76 
     77 <pre><code># acme-client -v &lt;server_domain&gt; && rcctl start httpd
     78 # crontab -e
     79 43 1 * * * acme-client -v mail.&lt;server_domain&gt; && rcctl restart smtpd && rcctl reload dovcot
     80 &lt;Esc&gt;:wq</code></pre>
     81 
     82 <h3>smtpdの設定</h3>
     83 <pre><code>pki "mail" cert "/etc/ssl/mail.&lt;server_domain&gt;.fullchain.pem"
     84 pki "mail" key "/etc/ssl/private/mail.&lt;server_domain&gt;.key"
     85 
     86 table aliases file:/etc/mail/aliases
     87 table passwd file:/etc/mail/passwd
     88 table virtuals file:/etc/mail/virtuals
     89 
     90 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
     91 
     92 filter check_rdns phase connect match !rdns disconnect "550 no rDNS."
     93 filter check_fcrdns phase connect match !fcrdns disconnect "550 no FCrDNS."
     94 
     95 listen on socket
     96 listen on lo0
     97 listen on vio0 port 25 tls pki "mail" hostname "mail.&lt;server_domain&gt;"filter { check_rdns, check_fcrdns }
     98 	listen on vio0 mask-src port submission smtps pki "mail"hostname "mail.matsudakenji.xyz" auth <passwd> filter dkimsign_rsa
     99 
    100 action "local_mail" mbox alias <aliases>
    101 action "domain_mail" maildir "/var/vmail/&lt;server_domain&gt;/%{dest.user:lowercase}"virtual <virtuals>
    102 action "outbound" relay
    103 
    104 match from any for domain "&lt;server_domain&gt;" action "domain_mail"
    105 match from local for local action "local_mail"
    106 match from local for any action "outbound"
    107 match auth from any for any action "outbound"</code></pre>
    108 
    109 <h3>メールユーザの設定</h3>
    110 <p><code>/etc/mail/virtuals</code>:</p>
    111 <pre><code>abuse@&lt;server_domain&gt;         admin@&lt;server_domain&gt;
    112 postmaster@&lt;server_domain&gt;    admin@&lt;server_domain&gt;
    113 webmaster@&lt;server_domain&gt;     admin@&lt;server_domain&gt;
    114 admin@&lt;server_domain&gt;         vmail
    115 contact@&lt;server_domain&gt;       vmail</pre></code>
    116 
    117 <p><code>/etc/mail/passwd</code>:</p>
    118 <pre><code>admin@&lt;server_domain&gt;:$2b$10$.....
    119 contact@&lt;server_domain&gt;:$2b$10$.....</code></pre>
    120 
    121 <pre><code># rcctl restart smtpd</code></pre>
    122 
    123 <h3>Dovecotの設定</h3>
    124 <h4>インストール</h4>
    125 <pre><code># pkg_add dovecot</code></pre>
    126 
    127 <h4>ログインクラスの設定</h4>
    128 <p>これをしないとなんかエラーが出る。</p>
    129 <code>/etc/login.conf</code>
    130 <pre><code>dovecot::openfiles-cur=1024::openfiles-max=2048::tc=daemon:</code></pre>
    131 <pre><code># usermod -L dovecot _dovecot</pre></code>
    132 
    133 <h3>DNSの設定</h3>
    134 
    135 <h3>ファイアーウォールの設定</h3>
    136 
    137 <h3>DKIMproxyの設定</h3>
    138 
    139 
    140 <h2>参考</h2>
    141 <ul>
    142 	<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>
    143 	<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>
    144 </ul>
    145 		</article>
    146 
    147 	</main>
    148 	<footer>
    149 		<address>info(at)mtkn(dot)jp</address>
    150 		<a href="http://creativecommons.org/publicdomain/zero/1.0?ref=chooser-v1" rel="license noopener noreferrer">CC0 1.0</a>
    151 	</footer>
    152 </body>
    153 </html>