モロモロ工事中です

PostfixとDovecotでさくらVPS上にバーチャルメールボックスが利用できるメールサーバを作る

未分類 — さくら @ 2011/12/24 18:17

Postfix と Dovecot でさくらVPS上にメールサーバを動かしてみましたので設定例を置いときます。

Postfix は SMTP サーバでメールを送る部分の担当、Dovecot は POP3/IMAP サーバでクライアントからメールを見る部分の担当です。完結したメールサーバとして動かすには両方必要になります。

設定方針は以下の3点です。

  1. バーチャルメールボックスの設定を行い Unix ユーザーを作らなくてもメールを受信できるように設定します。
  2. なるたけセキュリティ的に硬めにしたかったので、自サーバ宛のメールの配送と、サブミッションポート経由で SSL + SMTP AUTH で認証されたクライアントからの外部へのリレーのみを許可します。
  3. バーチャルメールボックスのパスワード管理は Dovecot で一元管理します。(Postfix での SMTP AUTH の認証時のアカウント管理に Dovecot を使うという意味です。Postfix と Dovecot で別々にパスワード管理する方法もありますがぶっちゃけ面倒くさいので。)

さくらVPSっつーか CentOS 上で Postfix と Dovecot を設定する例はググったら沢山でてきますので、違う方法の設定が必要な場合は適当にお調べください。つーことで本題に突入。

パッケージのインストール

yum から postfix と dovecot をインスコします。cyrus-sasl-md5 は SMTP 認証等で CRAM-MD5 による認証を有効にする場合に必要です。

$ yum install postfix dovecot cyrus-sasl-md5

sendmail とか他のメールサーバを外向けの設定で運用していない場合はいきなり postfix を有効にして問題ありませんので、その前提で話を進めます。

CentOS をインストールした状態では sendmail が動いていますので落とします。以下のように chkconfig で確認して on になっていたら、

$ chkconfig --list sendmail
sendmail        0:off   1:off   2:on    3:on    4:on    5:on    6:off

sendmail を止めてから postfix を起動します。ついでに chkconfig でサーバリブート時に postfix が起動するようにします。

$ /etc/init.d/sendmail stop
$ /etc/init.d/postfix reload
$ chkconfig sendmail off
$ chkconfig postfix on

続けて alternatives で(サーバからのメール送信に使われる) sendmail コマンドを postfix に変更します。

現代的な Unix 系のシステムでは sendmail というメールサーバと sendmail というコマンドは別物として扱われており(元々は sendmail メールサーバに sendmail コマンドが付いていたのですが、sendmail コマンドを呼び出しているアプリケーションプログラムが多々存在するためメールサーバを変更する際に都合が悪いので、コマンドを分けた形です)。

CentOS ではメールを送信するために使う sendmail コマンドは alternatives で指定されたコマンドへのシンボリックリンクとなっています。

以下のように alternatives を実行すると、sendmail コマンドを実行した際に sendmail.postfix (Postfix の sendmail コマンド)が実行されるようになります。

$ alternatives --config mta

There are 2 programs which provide 'mta'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.sendmail
   2           /usr/sbin/sendmail.postfix

Enter to keep the current selection[+], or type selection number: 2

以上が終わったらローカル配送できてるかテストしてみます。(別にしなくても良いですけど早めに問題見つけといた方が楽ですし…)

てことで適当なユーザー(以下の例では root)でログインして適当なユーザーにメールを送ってみま