IMAPメールサーバーを構築

結構ハマりました。故に例によって手順が全部網羅できるか不明・・・。>< Ubuntuサーバーのインストール時に mail server を 選択すると 初期状態で postfix というメールサーバーがインストールされています。もし選択していない場合でも
$ sudo apt-get install postfix
とでもすれば良い気がします。また、インストール時の設定をやり直したい時は、
$ sudo dpkg-reconfigure posfix
とすれば、やり直しができます。 今後の手順は
  1. postfix の設定をする
  2. dovecot-imap のインストールと設定
  3. roundcube もしくは squirrelmail 等のメールビューアーをインストール

参考本・参考にさせていただいたサイト

Debian GNU/Linux徹底入門第3版 Sarge対応
Debian GNU/Linux徹底入門第3版 Sarge対応
基本的な情報はやはりDebian GNU/Linux徹底入門第3版 Sarge対応が優れています。得にpostfix の役割・設定の基本事項が分かります。
  1. http://mizupc8.bio.mie-u.ac.jp/pukiwiki/index.php?Ubuntu/Server/Mail
  2. http://itpro.nikkeibp.co.jp/article/COLUMN/20070611/274348/
  3. http://snbhsmt.blog110.fc2.com/blog-entry-42.html

Postfix の設定

/etc/postfix/main.cf を変更します。
$ cd /etc/postfix
$ sudo vi ./main.cf
(31行目付近から)
# ドメインを入力
myhostname = felix-labo.org
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
# メールの最終目的地とみなす範囲の指定
mydestination = felix-labo.org, localhost.felix-labo.org, , localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

# IMAP サーバーとするには、mailbox_command はコメントアウトしないと、
# /MailDirに届かない。(IMAPで受信できない。)
# mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +

# メールサイズの容量制限
message_size_limit=20971520

# メールの格納方法をMaildir 方式にする
home_mailbox= Maildir/

# ヘッダーのチェックするファイルのあるの場所を指定
header_checks=regexp:/etc/postfix/header_checks

# 不明なユーザ宛のメールやホストネーム宛のメールが届いた際に
# エラーコードを 450 ではなく 550 を返すようにする
unknown_local_recipient_reject_code = 550
unknown_address_reject_code = 550
unknown_client_reject_code = 550
unknown_hostname_reject_code = 550

# 余計な情報を与えない
smtp_helo_required=yes
smtp_helo_restrictions=reject_non_fqdn_hostname
disable_vrfy_command=yes

(64行目付近)
#disable_plaintext_auth = yes
disable_plaintext_auth=no
続いて、/etc/mailname にホストを設定しておきます。
$ sudo vi /etc/mailname
felix-labo.org
とだけ入力。次に、ヘッダーチェック用のファイルを作成
$ sudo vi /etc/postfix/header_checks
新しいファイルができるので
/^Received:.*192\.168\..*/ IGNORE
/^Received:.*127\.0\.0\.1.*/ IGNORE
と入力。postfix の設定は以上(の気がする)
postfix 再起動
$ sudo /etc/init.d/postfix restart

dovecot-imap のインストール

imap のサーバーです。imap は簡単に言えば、サーバーメールということでしょうか・・・。Gmailの様なものです。
$ sudo apt-get install dovecot-imapd
続いて、設定です。
$ cd /etc/dovecot
$ vi ./dovecot.conf
以下を設定。 imap imaps を有効化するものと、メール保存場所を /home/ユーザー ディレクトリ内にします。
(20行目付近)
# Protocols we want to be serving: imap imaps pop3 pop3s managesieve
# If you only want to use dovecot-auth, you can set this to "none".
protocols = imap imaps
#protocols = pop3 pop3s

(220行目付近)
mail_location = maildir:~/Maildir
#mail_location = mbox:~/mail:INBOX=/var/mail/%u
最後のコメント化されている行はおまけ・・・postfix のメールの保存場所の初期値の場合です。つまりは、postfix の初期設定では、 /var/mail がメールの保存場所という訳です。今回は、各々のユーザーのディレクトリに /Maildir というディレクリを作成して、メールを保存することになります。postfix の設定で
#mail_spool_directory = ...
#mailbox_command = ...
をコメントアウト(上記のpostfix の設定ではコメントアウトした状態)にしないと、/Maildir に送信されず、/var/mail に転送されます。上記のdovecot の設定と”ちぐはぐ”でなければ良いのですが、/var/mail の方は、ユーザー毎のメールが同じディレクトリにあるということで、気持ちが悪い ということでしょうか・・・・
dovecot を再起動
$ sudo /etc/init.d/dovecot restart

roundcube をインストール

続いて、メールをWeb上でやりとりできる roundcube というパッケージを入れます。私の場合は、mysql をデータベースとしているので、roundcube-mysql も一緒に入れます。
$ sudo apt-get install roundcube roundcube-mysql
途中で、mysql の設定を聞かれるので、roundcube というユーザーで進めます。基本的に今いるユーザーでも言い訳ですが、root は危険なので止めた方がいいと思います。
apache の設定がすこし必要です。
$ cd /etc/apache2/conf.d
$ sudo vi ./roundcube
冒頭のエイリアスがコメント化されているので、これを外します。
# Those aliases do not work properly with several hosts on your apache server
# Uncomment them to use it or adapt them to your configuration
Alias /roundcube/program/js/tiny_mce/ /usr/share/tinymce2/www/
Alias /roundcube /var/lib/roundcube
apache を再起動
$ sudo /etc/init.d/apache2 restart
これで、localhost/roundcube でアクセスできます。ログインはmysqlユーザーではなく、Linuxユーザーです。

apache ユーザーを変えている場合には例によってエラー・・・

apache ユーザーを変えている場合には例によってエラーがでるので、エラー箇所の所有者を変更
$ cd /etc/roundcube
$ sudo chown flabo:flabo main.inc.php
$ sudo chown flabo:flabo debian-db.php

もっともハマったのは Bind の MX 設定でした

送信できるのに、受信がまったくできないという状態でハマりました。自分DNSで、ドメイン名のメールの宛先が設定されていないと、いくら @felix-labo.org ってやってもメールがくる分けないか・・・。bind の 設定ファイルをいじってようやく受信完了!

ポートが開いているかどうか?

これもハマる部分ですね。サーバー側とルーター側で設定できるので、どちらかがしまっていてもダメです。
$ nmap felix-labo.org
と言うようにして、サーバーが開いているかどうか調べます。imap imaps のポートが空いていれば、OK。