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><server_ip></code>とする。</li> 35 <li>さくらのドメイン: ドメイン名は<code><server_domain></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.<server_ip></code>を追加:</p> 71 <pre><code>domain mail.<server_domain> { 72 domain key "/etc/ssl/private/mail.<server_domain>.key" 73 domain full chain certificate "/etc/ssl/mail.<server_domain>.fullchain.pem" 74 sign with letsencrypt 75 }</pre></code> 76 77 <pre><code># acme-client -v <server_domain> && rcctl start httpd 78 # crontab -e 79 43 1 * * * acme-client -v mail.<server_domain> && rcctl restart smtpd && rcctl reload dovcot 80 <Esc>:wq</code></pre> 81 82 <h3>smtpdの設定</h3> 83 <pre><code>pki "mail" cert "/etc/ssl/mail.<server_domain>.fullchain.pem" 84 pki "mail" key "/etc/ssl/private/mail.<server_domain>.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.<server_domain> -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.<server_domain>"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/<server_domain>/%{dest.user:lowercase}"virtual <virtuals> 102 action "outbound" relay 103 104 match from any for domain "<server_domain>" 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@<server_domain> admin@<server_domain> 112 postmaster@<server_domain> admin@<server_domain> 113 webmaster@<server_domain> admin@<server_domain> 114 admin@<server_domain> vmail 115 contact@<server_domain> vmail</pre></code> 116 117 <p><code>/etc/mail/passwd</code>:</p> 118 <pre><code>admin@<server_domain>:$2b$10$..... 119 contact@<server_domain>:$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>