<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>さくらたんどっとびーず &#187; メールサーバ</title>
	<atom:link href="http://sakuratan.biz/archives/category/%e3%83%a1%e3%83%bc%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90/feed" rel="self" type="application/rss+xml" />
	<link>http://sakuratan.biz</link>
	<description>モロモロ工事中です</description>
	<lastBuildDate>Sun, 25 Jun 2023 12:51:51 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>PostfixとDovecotでさくらVPS上にバーチャルメールボックスが利用できるメールサーバを作る</title>
		<link>http://sakuratan.biz/archives/5182</link>
		<comments>http://sakuratan.biz/archives/5182#comments</comments>
		<pubDate>Sat, 24 Dec 2011 09:17:35 +0000</pubDate>
		<dc:creator>さくら</dc:creator>
				<category><![CDATA[メールサーバ]]></category>
		<category><![CDATA[Dovecot]]></category>
		<category><![CDATA[Postfix]]></category>

		<guid isPermaLink="false">http://sakuratan.biz/?p=5182</guid>
		<description><![CDATA[Postfix と Dovecot でさくらVPS上にメールサーバを動かしてみましたので設定例を置いときます。 Postfix は SMTP サーバでメールを送る部分の担当、Dovecot は POP3/IMAP サーバでクライアントからメールを見る部分の担当です。完結したメールサーバとして動かすには両方必要になります。 設定方針は以下の3点です。 バーチャルメールボックスの設定を行い Unix ... <div style="margin-top:1ex"><a href="http://sakuratan.biz/archives/5182">(続きを読む)</a></div>]]></description>
			<content:encoded><![CDATA[<p>Postfix と Dovecot でさくらVPS上にメールサーバを動かしてみましたので設定例を置いときます。</p>
<p>Postfix は SMTP サーバでメールを送る部分の担当、Dovecot は POP3/IMAP サーバでクライアントからメールを見る部分の担当です。完結したメールサーバとして動かすには両方必要になります。</p>
<p>設定方針は以下の3点です。</p>
<ol>
<li>バーチャルメールボックスの設定を行い Unix ユーザーを作らなくてもメールを受信できるように設定します。</li>
<li>なるたけセキュリティ的に硬めにしたかったので、自サーバ宛のメールの配送と、サブミッションポート経由で SSL + SMTP AUTH で認証されたクライアントからの外部へのリレーのみを許可します。</li>
<li>バーチャルメールボックスのパスワード管理は Dovecot で一元管理します。（Postfix での SMTP AUTH の認証時のアカウント管理に Dovecot を使うという意味です。Postfix と Dovecot で別々にパスワード管理する方法もありますがぶっちゃけ面倒くさいので。）</li>
</ol>
<p>さくらVPSっつーか CentOS 上で Postfix と Dovecot を設定する例はググったら沢山でてきますので、違う方法の設定が必要な場合は適当にお調べください。つーことで本題に突入。</p>
<h3>パッケージのインストール</h3>
<p>yum から postfix と dovecot をインスコします。cyrus-sasl-md5 は SMTP 認証等で CRAM-MD5 による認証を有効にする場合に必要です。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #c20cb9; font-weight: bold;">yum install</span> postfix dovecot cyrus-sasl-md5</div></div>
<p>sendmail とか他のメールサーバを外向けの設定で運用していない場合はいきなり postfix を有効にして問題ありませんので、その前提で話を進めます。</p>
<p>CentOS をインストールした状態では sendmail が動いていますので落とします。以下のように chkconfig で確認して on になっていたら、</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ chkconfig <span style="color: #660033;">--list</span> <span style="color: #c20cb9; font-weight: bold;">sendmail</span><br />
<span style="color: #c20cb9; font-weight: bold;">sendmail</span> &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000000;">0</span>:off &nbsp; <span style="color: #000000;">1</span>:off &nbsp; <span style="color: #000000;">2</span>:on &nbsp; &nbsp;<span style="color: #000000;">3</span>:on &nbsp; &nbsp;<span style="color: #000000;">4</span>:on &nbsp; &nbsp;<span style="color: #000000;">5</span>:on &nbsp; &nbsp;<span style="color: #000000;">6</span>:off</div></div>
<p>sendmail を止めてから postfix を起動します。ついでに chkconfig でサーバリブート時に postfix が起動するようにします。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">sendmail</span> stop<br />
$ <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>postfix reload<br />
$ chkconfig <span style="color: #c20cb9; font-weight: bold;">sendmail</span> off<br />
$ chkconfig postfix on</div></div>
<hr class="linebreak">
<p>続けて alternatives で（サーバからのメール送信に使われる） sendmail コマンドを postfix に変更します。</p>
<p>現代的な Unix 系のシステムでは sendmail というメールサーバと sendmail というコマンドは別物として扱われており（元々は sendmail メールサーバに sendmail コマンドが付いていたのですが、sendmail コマンドを呼び出しているアプリケーションプログラムが多々存在するためメールサーバを変更する際に都合が悪いので、コマンドを分けた形です）。</p>
<p>CentOS ではメールを送信するために使う sendmail コマンドは alternatives で指定されたコマンドへのシンボリックリンクとなっています。</p>
<p>以下のように alternatives を実行すると、sendmail コマンドを実行した際に sendmail.postfix （Postfix の sendmail コマンド）が実行されるようになります。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ alternatives <span style="color: #660033;">--config</span> mta<br />
<br />
There are <span style="color: #000000;">2</span> programs <span style="color: #c20cb9; font-weight: bold;">which</span> provide <span style="color: #ff0000;">'mta'</span>.<br />
<br />
&nbsp; Selection &nbsp; &nbsp;Command<br />
<span style="color: #660033;">-----------------------------------------------</span><br />
<span style="color: #000000; font-weight: bold;">*</span>+ <span style="color: #000000;">1</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>sendmail.sendmail<br />
&nbsp; &nbsp;<span style="color: #000000;">2</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>sendmail.postfix<br />
<br />
Enter to keep the current selection<span style="color: #7a0874; font-weight: bold;">&#91;</span>+<span style="color: #7a0874; font-weight: bold;">&#93;</span>, or <span style="color: #7a0874; font-weight: bold;">type</span> selection number: <span style="color: #000000;">2</span></div></div>
<hr class="linebreak">
<p>以上が終わったらローカル配送できてるかテストしてみます。（別にしなくても良いですけど早めに問題見つけといた方が楽ですし…）</p>
<p>てことで適当なユーザー（以下の例では root）でログインして適当なユーザーにメールを送ってみます。（シェルから sendmail コマンドを実行すればメールを送れます。sendmail コマンドを実行する際、&#8221;.&#8221; だけの行を入力するとメールが送信されます。）</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #c20cb9; font-weight: bold;">sendmail</span> root<br />
From: root<br />
To: root<br />
Subject: <span style="color: #7a0874; font-weight: bold;">test</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">test</span><br />
.</div></div>
<p>送ったメールは（宛先のユーザーでログインして）mail コマンドで見れます。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ mail<br />
Mail version <span style="color: #000000;">8.1</span> <span style="color: #000000;">6</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">6</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">93</span>. &nbsp;Type ? <span style="color: #000000; font-weight: bold;">for</span> help.<br />
<span style="color: #ff0000;">&quot;/var/spool/mail/root&quot;</span>: <span style="color: #000000;">1</span> message <span style="color: #000000;">1</span> new<br />
<span style="color: #000000; font-weight: bold;">&gt;</span>N &nbsp;<span style="color: #000000;">1</span> root<span style="color: #000000; font-weight: bold;">@</span>www9999u.sakur &nbsp;Fri Dec <span style="color: #000000;">16</span> 00:<span style="color: #000000;">33</span> &nbsp;<span style="color: #000000;">14</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">466</span> &nbsp; <span style="color: #ff0000;">&quot;test&quot;</span><br />
<span style="color: #000000; font-weight: bold;">&amp;</span> <br />
Message <span style="color: #000000;">1</span>:<br />
From root<span style="color: #000000; font-weight: bold;">@</span>www9999u.sakura.ne.jp &nbsp;Fri Dec <span style="color: #000000;">16</span> 00:<span style="color: #000000;">33</span>:<span style="color: #000000;">13</span> <span style="color: #000000;">2011</span><br />
X-Original-To: root<br />
Delivered-To: root<span style="color: #000000; font-weight: bold;">@</span>www9999u.sakura.ne.jp<br />
From: root<span style="color: #000000; font-weight: bold;">@</span>www9999u.sakura.ne.jp<br />
To: root<span style="color: #000000; font-weight: bold;">@</span>www9999u.sakura.ne.jp<br />
Subject: <span style="color: #7a0874; font-weight: bold;">test</span><br />
Date: Fri, <span style="color: #000000;">16</span> Dec <span style="color: #000000;">2011</span> 00:<span style="color: #000000;">33</span>:00 +0900 <span style="color: #7a0874; font-weight: bold;">&#40;</span>JST<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">test</span><br />
<br />
<span style="color: #000000; font-weight: bold;">&amp;</span> q<br />
Saved <span style="color: #000000;">1</span> message <span style="color: #000000; font-weight: bold;">in</span> mbox</div></div>
<p>メールが届いてなかったら /var/log/maillog を見て問題を探してください。（上記の設定内容でローカル配送のメールが届くのが遅れたりすることは基本的にありませんので「届いてなかった＝問題がある」と判断してもらって結構です。）</p>
<h3>Postfix と Dovecot の設定</h3>
<p>パスワード管理を共有する関係上、両方とも動いてから動作確認する方が速いと思いますので、一気に Postfix と Dovecot の設定を行います。</p>
<p>例示のため、バーチャルメールボックスに使用するドメインを example.com、バーチャルメールボックスに追加するメールアドレスを test@example.com として記述しています。実際の環境に合わせて読み替えてください。</p>
<h4>バーチャルメールボックス管理ユーザーの作成</h4>
<p>最初にバーチャルメールボックスを読み書きするための Unix ユーザーを作ります。（以下の例では vmail ユーザーを使います。）</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ groupadd <span style="color: #660033;">-g</span> <span style="color: #000000;">10000</span> vmail<br />
$ useradd <span style="color: #660033;">-u</span> <span style="color: #000000;">10000</span> <span style="color: #660033;">-g</span> <span style="color: #000000;">10000</span> <span style="color: #660033;">-d</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>spool<span style="color: #000000; font-weight: bold;">/</span>vmail <span style="color: #660033;">-r</span> <span style="color: #660033;">-s</span> <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>nologin vmail<br />
$ <span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>spool<span style="color: #000000; font-weight: bold;">/</span>vmail<br />
$ <span style="color: #c20cb9; font-weight: bold;">chown</span> vmail:vmail <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>spool<span style="color: #000000; font-weight: bold;">/</span>vmail<br />
$ <span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">700</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>spool<span style="color: #000000; font-weight: bold;">/</span>vmail</div></div>
<p>UID/GID は 10000 以外でも構いませんが、Postfix/Dovecot を設定する際に ID を指定する必要があるので UID/GID の番号を覚えておいてください。</p>
<h4>SSL 自己証明書と秘密鍵の作成</h4>
<p>Postfix/Dovecot ともに SSL を有効にするため、自己証明書と秘密鍵を作成します。（Dovecot に example.com の自己証明書と秘密鍵が付いてるのですが一応自サーバ用に作ります。）</p>
<p>/etc/pki/tls/certs ディレクトリの Makefile で秘密鍵を含む自己証明書を簡単に作れるのですが、後述する DER 形式ファイルを作成するため openssl コマンドを直接実行して作成します。</p>
<p>コマンドを実行すると証明書のパラメータを質問されますが、Common Name に VPS サーバのサーバ名（以下の例では www9999u.sakura.ne.jp）を入力し、それ以外の項目はデフォルトで構いません（ちゃんと入力しても良いですけど）。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>pki<span style="color: #000000; font-weight: bold;">/</span>tls<span style="color: #000000; font-weight: bold;">/</span>certs<br />
$ openssl req <span style="color: #660033;">-new</span> <span style="color: #660033;">-x509</span> <span style="color: #660033;">-nodes</span> <span style="color: #660033;">-days</span> <span style="color: #000000;">365</span> <span style="color: #660033;">-out</span> mail.crt <span style="color: #660033;">-keyout</span> mail.key<br />
Generating a <span style="color: #000000;">1024</span> bit RSA private key<br />
....++++++<br />
.......................................................++++++<br />
writing new private key to <span style="color: #ff0000;">'mail.key'</span><br />
<span style="color: #660033;">-----</span><br />
You are about to be asked to enter information that will be incorporated<br />
into your certificate request.<br />
What you are about to enter is what is called a Distinguished Name or a DN.<br />
There are quite a few fields but you can leave some blank<br />
For some fields there will be a default value,<br />
If you enter <span style="color: #ff0000;">'.'</span>, the field will be left blank.<br />
<span style="color: #660033;">-----</span><br />
Country Name <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">2</span> letter code<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>GB<span style="color: #7a0874; font-weight: bold;">&#93;</span>:<br />
State or Province Name <span style="color: #7a0874; font-weight: bold;">&#40;</span>full name<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>Berkshire<span style="color: #7a0874; font-weight: bold;">&#93;</span>:<br />
Locality Name <span style="color: #7a0874; font-weight: bold;">&#40;</span>eg, city<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>Newbury<span style="color: #7a0874; font-weight: bold;">&#93;</span>:<br />
Organization Name <span style="color: #7a0874; font-weight: bold;">&#40;</span>eg, company<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>My Company Ltd<span style="color: #7a0874; font-weight: bold;">&#93;</span>:<br />
Organizational Unit Name <span style="color: #7a0874; font-weight: bold;">&#40;</span>eg, section<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>:<br />
Common Name <span style="color: #7a0874; font-weight: bold;">&#40;</span>eg, your name or your server<span style="color: #ff0000;">'s hostname) []:www9999u.sakura.ne.jp<br />
Email Address []:<br />
$chmod 600 mail.key</span></div></div>
<p>mail.crt が証明書ファイル、mail.key が秘密鍵ファイルです。証明書の有効期限は365日となっています。もっと長くしたい場合は -days オプションで増やしてください。</p>
<p>Outlook Express や Entourage、AppleMail などのクライアントを使っている場合、証明書をクライアントにインストールしないと警告が表示されるらしいので、インストール用の DER 形式の証明書を作成します。以下のコマンドで作成される mail.der をインストールしたら良いらしいです。（が、この辺は試してないのでうまくいかなかったら<a href="http://vine-linux.ddo.jp/linux/mail/inport.php">証明書のインポート &#8211; メール(Postfix) &#8211; 自宅サーバーの構築 &#8211; 自宅サーバーでやってみよう！！</a>等を参考にしてください。）</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span>openssl x509 <span style="color: #660033;">-inform</span> pem <span style="color: #660033;">-in</span> mail.crt <span style="color: #660033;">-outform</span> der <span style="color: #660033;">-out</span> mail.der</div></div>
<h4>Dovecot の設定</h4>
<p>Dovecot 側でパスワードを一元管理する関係上、こちらの設定を先に行います。Dovecot の設定ファイル /etc/dovecot.conf を編集し、アカウント管理用の /etc/dovecot-passwd ファイルを作成します。</p>
<p>まず Dovecot の設定ファイル /etc/dovecot.conf を編集します。ssl_cert_file と ssl_key_file は先ほど作った自己証明書と秘密鍵ファイルです。その他の設定は auth default セクション中に足します。</p>
<div class="codecolorer-container ini dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000099;">ssl_cert_file</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> /etc/pki/tls/certs/mail.crt</span><br />
<span style="color: #000099;">ssl_key_file</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> /etc/pki/tls/certs/mail.key</span><br />
<br />
auth default <span style="">&#123;</span><br />
&nbsp; <span style="color: #000099;">mechanisms</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> cram-md5 digest-md5 plain login</span><br />
&nbsp; passdb passwd-file <span style="">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000099;">args</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> /etc/dovecot-passwd</span><br />
&nbsp; <span style="">&#125;</span><br />
&nbsp; socket listen <span style="">&#123;</span><br />
&nbsp; &nbsp; client <span style="">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000099;">path</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> /var/spool/postfix/private/auth</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000099;">mode</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> 0660</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000099;">user</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> postfix</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000099;">group</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> postfix</span><br />
&nbsp; &nbsp; <span style="">&#125;</span><br />
&nbsp; <span style="">&#125;</span><br />
&nbsp; userdb static <span style="">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000099;">args</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> uid=10000 gid=10000 home=/var/spool/vmail/%d/%n</span><br />
&nbsp; <span style="">&#125;</span><br />
<span style="">&#125;</span></div></div>
<p>実際の dovecot.conf にはコメントが大量に入ってて修正箇所を探すのが面倒かもしれませんが、ssl_cert_file、ssl_key_file、mechanisms は元からありますので書き換え、その他は auth default セクションの最後の方に足してもらうのが速いと思います。</p>
<p>設定ファイルの詳細については <a href="http://wiki.dovecot.org/FrontPage">Dovecot Wiki</a> をご覧ください。</p>
<hr class="linebreak">
<p>dovecot.conf の編集が終わったら /etc/dovecot-passwd ファイルを作成します。Dovecot をインストールした状態ではこのファイルは存在しませんので新規作成します。</p>
<div class="codecolorer-container ini dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">test@example.com:<span style="">&#123;</span>HMAC-MD5<span style="">&#125;</span>dcbe8064d829ee98ad16817611150a6c7ee5fe1c9dfd79f5395be892f162bfd3<br />
test2@example.com:<span style="">&#123;</span>HMAC-MD5<span style="">&#125;</span>dcbe8064d829ee98ad16817611150a6c7ee5fe1c9dfd79f5395be892f162bfd3</div></div>
<p>dovecot-passwd ファイルには、ユーザー名と暗号化されたパスワードを &#8220;:&#8221; で区切って記述します。「ユーザー名＝メールアドレス」にした方がメールクライアントの設定が楽なのでそうしてますが、ユーザー名部分はメールアドレスでないとダメって訳ではありません。</p>
<p>暗号化されたパスワードは dovecotpw コマンドで取得できますのでコピペします。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ dovecotpw <br />
Enter new password: <br />
Retype new password: <br />
<span style="color: #7a0874; font-weight: bold;">&#123;</span>HMAC-MD5<span style="color: #7a0874; font-weight: bold;">&#125;</span>dcbe8064d829ee98ad16817611150a6c7ee5fe1c9dfd79f5395be892f162bfd3</div></div>
<p>dovecot-passwd ファイルにはユーザーIDやホームディレクトリなど passwd ファイルと似たような項目を指定することもできるのですが、Postfix と連携するだけなら userdb static で指定した方が速いと思いますので省略します。詳しくは <a href="http://wiki.dovecot.org/AuthDatabase/PasswdFile">AuthDatabase/PasswdFile &#8211; Dovecot Wiki</a> をご覧ください。</p>
<hr class="linebreak">
<p>設定が終わったら dovecot サーバを起動します。ついでに chkconfig でサーバリブート時に dovecot が起動するように設定しておきます。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>dovecot start<br />
$ chkconfig dovecot on</div></div>
<h4>Postfix の設定</h4>
<p>Postfix の設定では、Postfix 全体の設定ファイル /etc/postfix/main.cf とサブプロセス別の設定ファイル /etc/postfix/master.cf を編集し、バーチャルメールボックス管理用ファイル /etc/postfix/vmailbox を作成します。</p>
<p>まず /etc/postfix/main.cf を修正します。</p>
<div class="codecolorer-container ini dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000099;">inet_interfaces</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> all</span><br />
<br />
# SASL<br />
#smtpd_sasl_auth_enable <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> yes</span><br />
<span style="color: #000099;">smtpd_recipient_restrictions</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> permit_mynetworks, reject_unauth_destination</span><br />
#broken_sasl_auth_clients <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> yes</span><br />
<br />
<span style="color: #000099;">smtpd_sasl_type</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> dovecot</span><br />
<span style="color: #000099;">smtpd_sasl_path</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> private/auth</span><br />
<span style="color: #000099;">smtpd_sasl_security_options</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> noanonymous</span><br />
<br />
# TLS<br />
<span style="color: #000099;">smtpd_use_tls</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> yes</span><br />
<span style="color: #000099;">smtpd_tls_key_file</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> /etc/pki/tls/certs/mail.key</span><br />
<span style="color: #000099;">smtpd_tls_cert_file</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> /etc/pki/tls/certs/mail.csr</span><br />
<br />
# Virtual<br />
<span style="color: #000099;">virtual_mailbox_domains</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> example.com</span><br />
<span style="color: #000099;">virtual_mailbox_base</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> /var/spool/vmail</span><br />
<span style="color: #000099;">virtual_mailbox_maps</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> hash:/etc/postfix/vmailbox</span><br />
<span style="color: #000099;">virtual_minimum_uid</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> 100</span><br />
<span style="color: #000099;">virtual_uid_maps</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> static:10000</span><br />
<span style="color: #000099;">virtual_gid_maps</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> static:10000</span><br />
<span style="color: #000099;">virtual_alias_maps</span> <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> hash:/etc/postfix/virtual</span></div></div>
<p>inet_interfaces は main.cf に元から設定が存在するので書き換えてください。他の項目は存在しないと思いますので、適当な場所に追加してください。</p>
<p>#smtpd_sasl_auth_enable = yes の行はコメントアウトしたままにしておいてください。後ほど master.cf を編集する際に、サブミッションポートからの接続時のみ smtpd_sasl_auth_enable = yes になるように設定します。設定ファイルを見たとき分かりにくいと思いますので、あえてコメントアウトで残しておいてもらった方が良いと思います。（まあコメントアウトせずに何も書かなくても結構ですけど。）</p>
<p>古い Outlook を使っている場合は、broken_sasl_auth_clients = yes を有効にする必要があります。SMTP AUTH に関するバグがあるそうです。うちでは Outlook は使ってないのでコメントアウトしてます。</p>
<p>バーチャルメールボックスのメールアドレスに使用するドメインは virtual_mailbox_domains に指定します。上の例では example.com になっていますので、実際に使用するドメインを記述してください。カンマ区切りで複数指定することもできます。</p>
<p>virtual_mailbox_domains に指定するドメインは mydestination と重複しないようにしてください。デフォルトで mydestination は $myhostname, localhost.$mydomain, localhost になっており、さくら VPS の場合 myhostname は www9999u.sakura.ne.jp とかになります。</p>
<p>myhostname を example.com にして mydestination を空にすることもできますが、cron 等システム内部からのメールはバーチャルメールボックスではなくローカル配送にした方が良いと思いますので、mydestination や myhostname はデフォルトのままの方が良いと思います。それとメールサーバの DNS の逆引き設定を行っていないと受信を拒否するサーバもあり、sakura.ne.jp のホストは逆引き可能ですので、その辺のトラブルを避けるためにもこの設定の方が楽だと思います。まあこの辺に色々うんちくのある方はご自由にどうぞ、っつーかそういう人はこんなブログ見ながら設定してはいけませんw</p>
<p>virtual_mailbox_base を別の場所に変えてもオッケーですが、あらかじめディレクトリが存在している必要があり、virtual_uid_maps で指定されるユーザーから制御可能である必要があります。この辺の設定は先ほど vmail ユーザーを作った際に行っていますが、変更する際は Postfix の要求を満たすよう適宜設定を行ってください。</p>
<p>smtpd_tls_key_file と smtpd_tls_cert_file には先ほど作った自己証明書と秘密鍵ファイルを指定します。</p>
<hr class="linebreak">
<p>main.cf の設定が終わったら /etc/postfix/master.cf を編集します。</p>
<p>以下の submission ポートの設定がコメントアウトされてると思いますので、有効にします。</p>
<div class="codecolorer-container ini dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">submission inet n &nbsp; &nbsp; &nbsp; - &nbsp; &nbsp; &nbsp; n &nbsp; &nbsp; &nbsp; - &nbsp; &nbsp; &nbsp; - &nbsp; &nbsp; &nbsp; smtpd<br />
&nbsp; -o smtpd_enforce_tls<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">yes</span><br />
&nbsp; -o smtpd_sasl_auth_enable<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">yes</span><br />
&nbsp; -o smtpd_client_restrictions<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">permit_sasl_authenticated,reject</span><br />
-o smtpd_recipient_restrictions<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">permit_sasl_authenticated,reject_unauth_destination</span></div></div>
<hr class="linebreak">
<p>最後に /etc/postfix/vmailbox を編集して Postfix の設定は終わりです。Postfix をインストールした状態ではこのファイルは存在しませんので新規作成します。</p>
<div class="codecolorer-container ini dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">test@example.com &nbsp; &nbsp; &nbsp; &nbsp;example.com/test/Maildir/<br />
test2@example.com &nbsp; &nbsp; &nbsp; example.com/test2/Maildir/</div></div>
<p>vmailbox ファイルにはバーチャルメールボックスのメールアドレスとメールボックスのパスを空白（タブ）区切りで記述していきます。</p>
<p>メールボックスのパスは virtual_mailbox_base からの相対パスを指定します。上の例ですと、test@example.com 宛てのメールは /var/spool/vmail/example.com/test/Maildir/ に Maildir 形式で保存されます。</p>
<p>Postfix はメールボックスのパスの末尾を / で終えると Maildir 形式、/ 無しで終えると mbox 形式で保存します。何言ってるか分からない人はとりあえず Maildir 形式でえーと思います。</p>
<p>編集が終わったら postmap コマンドでデータベースに変換します。これを実行しないと Postfix が起動しません。virtual ファイルは転送設定用のファイルで、こちらもデータベースが必要ですので一緒に postmap します。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ postmap <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>postfix<span style="color: #000000; font-weight: bold;">/</span>vmailbox<br />
$ postmap <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>postfix<span style="color: #000000; font-weight: bold;">/</span>virtual</div></div>
<hr class="linebreak">
<p>設定が終わったら postfix をリブートします。</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">$ </span><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>postfix reload</div></div>
<h3>DNS</h3>
<p>メールサーバを運用する際は、DNS に MX レコードを用意しておいた方が良いです。</p>
<p>A レコードだけでも運用できますが、DNS の二度引きが発生したりするので、バーチャルメールアドレスでの送受信に使用する MX レコードを作成します。</p>
<p>ドメインの登録を Value Domain で行っている場合は、以下のように設定してください。ドメインが example.com、サーバの IP アドレスが 192.0.2.1、メール送信用のホストが mail.example.com、の場合の設定例です。mail.example.com ではなく example.com を MX に指定しても良いのですが、メールサーバだけ移転とかする際にこの方が楽なので別ホスト扱いにしておいた方が良いと思います。</p>
<div class="codecolorer-container ini dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">a @ 192.0.2.1<br />
a mail 192.0.2.1<br />
mx mail.example.com. <span style="">10</span></div></div>
<p>なお、新規にメールサーバを立てる（誰にもメールアドレスを教えていない状態の）場合は、メールサーバの設定より先に DNS の設定を行っておいても構いません。</p>
<h3>クライアントからの送信</h3>
<p>以上でメールサーバの設定は完了です。あとはクライアントの設定をして終わりです。</p>
<p>クライアントの設定ですが、以下のような感じになります。（メールサーバを mail.example.com、メールアドレスを test@example.com にした場合。）</p>
<dl>
<dt><b>SMTP</b></dt>
<dd>
<table>
<tr>
<th>ホスト</th>
<td>mail.example.com</td>
</tr>
<tr>
<th>ポート</th>
<td>587</td>
</tr>
<tr>
<th>SMTP AUTH ユーザー</th>
<td>test@example.com</td>
</tr>
<tr>
<th>SMTP AUTH パスワード</th>
<td>dovecot-passwd のパスワード</td>
</tr>
<tr>
<th>その他</th>
<td>STARTLS を使用して SSL を有効にする必要あり</td>
</tr>
</table>
</dd>
<dt><b>POP3</b></dt>
<dd>
<table>
<tr>
<th>ホスト</th>
<td>mail.example.com</td>
</tr>
<tr>
<th>ポート</th>
<td>110 （POP3S を使用する場合は 995）</td>
</tr>
<tr>
<th>ユーザー</th>
<td>test@example.com</td>
</tr>
<tr>
<th>パスワード</th>
<td>dovecot-passwd のパスワード</td>
</tr>
</table>
</dd>
<dt><b>IMAP</b></dt>
<dd>
<table>
<tr>
<th>ホスト</th>
<td>mail.example.com</td>
</tr>
<tr>
<th>ポート</th>
<td>143 （IMAPS を使用する場合は 993）</td>
</tr>
<tr>
<th>ユーザー</th>
<td>test@example.com</td>
</tr>
<tr>
<th>パスワード</th>
<td>dovecot-passwd のパスワード</td>
</tr>
</table>
</dd>
</dl>
<p>クライアント別の設定例はちょっと書ききれませんので、<a href="http://www.atmarkit.co.jp/fwin2k/win2ktips/798submssn/submssn.html">サブミッション・ポートを利用してメールを送信する － ＠IT</a> や <a href="http://www.atmarkit.co.jp/fwin2k/win2ktips/1100mailssl/mailssl.html">メールの送受信でSSLを利用して暗号化する－ ＠IT</a> を参考にお試しください。</p>
<h3>実運用に際して</h3>
<p>ほったらかしの運用だとじきにクラックされる可能性もありますので、実際に運用する際はログ監視ぐらいは最低限行っておいた方が良いと思います。</p>
<p>今日のネタはメールサーバの設定っつーことですのでログ監視ツールの使い方は説明しませんが、<a href="http://sourceforge.net/projects/swatch/">swatch</a> とか使ったら良いと思います。</p>
<p>んでわ</p>
]]></content:encoded>
			<wfw:commentRss>http://sakuratan.biz/archives/5182/feed</wfw:commentRss>
		<slash:comments>427</slash:comments>
		</item>
	</channel>
</rss>
