メールサーバ(Postfix + courier-imap)
- はじめに
- Postfixのインストール
- 最初の設定
- 外部受信のための設定
- courier-imapのインストールとセッティング
- ルータの設定
- fetchmailの導入と設定
- mewの設定
結構ハマったので、メールサーバ、というより Postfix を設定する際に注意すべき点
をあげておく
- 順序を守れ
設定の順序を間違えるとローカルテストすらいかなくなる
- インストールは"apt-get (install)"、アンインストールは"aptitude (purge)"
aptitude でインストールするとハマる。
意味もまだよく掴めていないのに、余計なものが芋づる式に導入されるからだ。
インストールは apt-get でやるほうがよい。
一方、アンインストールの場合、依存関係をよく監視している aptitude は
有効なので、apt-get と aptitude は上手く使い分けた方がよいことが
今回分かった。
以上。
2005年8月現在の話。
Postfix (Debian testing) のバージョンは 2.2.14 。
- # apt-get install postfix
数ステップの質問がされるが、注意すべきは2点。
[1],
[2],
[3],
[4],
[5]
- まず「設定の一般的なタイプ(サーバの種類)」であるが、
一般的には「インターネットサイト」を選択するところ、
ローカルでのテストを十分にしないと後々、とても面倒なことになるので、
ここでは「ローカルのみ」を選択すること。
[2]
- 次に「rootへのメールをどこへ送りますか?」だが、デフォルトでは”NONE”となっている。
ここはそのままにしない。/etc/aliases にはすぐ後に手動で追加するからだ。
よってここでは”NONE”を消してやる。
[3]
以上2点のみいじり、後はデフォルトでよい。
もしこけても
- # dpkg-reconfigure --priority=low postfix
(再設定後は忘れずに # /etc/init.d/postfix reload)
で再設定が可能。
exim4 は自動的に排除してくれる。
- aliasesの設定
インストールして、すぐさま Postfix の設定ファイルである
"/etc/postfix/main.cf"をいじらないこと。
まずは alias を設定しておく。
Debian の場合、/etc/aliases が alias 設定の場所だ。
次の二つがあればオッケ。
debian では後者はすでに用意されていたので、前者のみ追加した。
追加したら
を忘れずに。
その後、念を入れて一度再起動した。
- Maildirディレクトリを掘る
続いて メール受信ユーザに手動で Maildir ディレクトリを掘る。
これは Postfix を設定してからでは、Postfix がどこに配信したらよいか
分からなくなるだろう…と思われるからである。
自分のホームディレクトリで、Maildir形式のディレクトリを掘り、
パーミションを忘れずに 700 番にしておく。
~$ mkdir -p Maildir/cur
~$ mkdir -p Maildir/tmp
~$ mkdir -p Maildir/new
~$ chmod -R 700 Maildir
[6]
- main.cf の設定1
続いて postfix を司る main.cf の設定に入る。
が、ここでも一気にすべてを設定しない。
まずはローカルホストできちんと Postfix がメール配信をするか
テストをしなければならない。
最初の設定で行うのは Maildir形式で Postfix が正常に動作するか、
ただそれだけである。
そのために main.cf に加える設定は
のみである。
これを /etc/postfix/main.cf の最終行に書く。
[7]
ここまできたら、一度 Postfix をリセットする。
[8]
# postfix reload
# /etc/ini.d/postfix restart
- ローカル配信テスト 第1回目
ここで最初のローカルホスト配信のテストを行っておく。
[8]
テストは root と 自分のアカウント と2回行っておく。
コンソールからのメール発信の方法は次の通り。
(自分のアカウントからの発信の場合)
$ whoami
hjk
$ mail hjk
Subject: test1
This is a test mail.(本文)
. (<= "."でメール終了の合図)
Cc:[RET](ここは何も書かずに Enter)
うまく配信されていれば、自分のホームディレクトリ中の "~/Maildir/new/" のなかに
メールが届けられているはずだ。
最後に、ここまでがうまくいったら main.cf のバックアップをとっておく。
続いての設定は自分のドメインからの受信を試みる。
# cp /etc/postfix/main.cf /etc/postfix/main.cf.origin
メールサーバを構築する前に、正しくドメインが解決されるために
以下の準備が必要。
- /etc/hosts
これは IPアドレスとホスト名の対応表(自ホスト名を含む)。
「IPアドレス,FQDN(正式なホスト名),エイリアス」をタブもしくは空白で埋めていけばよい
#127.0.0.1 localhost.localdomain localhost localhost
127.0.0.1 localhost
#192.168.x.xxx kreisel.fam.cx imap.kreisel.fam.cx
192.168.x.xxx imap.kreisel.fam.cx imap
- /etc/hostname
自分のホスト名。
DDNSできちんと導かれるように
#aptiva
imap.kreisel.fam.cx
FQDNを書いておく。
-
/etc/network/interfaces
本来なら、きちんと 固定IPアドレスの設定で書くべきだが、
自宅のルータは固定DHCPサーバ(?)という設定になっており、
サーバ側では DHCP 設定でなければ IP を取得できなかった。
したがって、ここには現在の特別な設定は何もしていない
(念のため、static な設定もコメントアウトして書いてある)
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
#iface eth0 inet static
# address 192.168.1.xxx
# network 192.168.1.0
# netmask 255.255.255.0
# broadcat 192.168.1.255
# gateway 192.168.1.1
ネットワークの設定の根幹部分を変更したので、最後にサーバそのものを再起動(reboot)しておく。
# reboot
- main.cf の設定2
外部受信可能な状態に postfix の main.cf に変更を加えていく。
さきほどと同じ
/etc/postfix/main.cf。
あまり長くはないので、全文
注意点をあげるとすれば…
- smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
となっている行は素性を明かさないために、この行をコメントアウトして
smtpd_banner = $myhostname ESMTP $mail_name
とする
- myhostname = hoge.moge.fam.cx
に自分の FQDN(ホスト名.ドメイン名) を入れる。
- [追記]
mydomain = moge.fam.cx
にドメイン名を追加する(インストール時にはこの項目はないので注意)、
-
myorigin = をデフォルトの /etc/mailname から
$mydomainに変更する。
-
mydestination =
にはよくわからないので、メールを受け取りそうな
$myhostname, localhost, localhost.localdomain, localhost.$mydomain, $mydomain
あたりを書いておく
- mailbox_size_limit = 0
はメールボックスの容量制限の項目。
0で無制限。
- mynetworks = 192.168.x.0/24, 127.0.0.0/8
には、自分の内部ネットワークとマシンの IP あたりをいれておく
- inet_interfaces = all
"loopback-only"となっていたところ(Postfixをインストールした際「ローカルのみ」にしていたので)を
allに変更
- メール配送に procmail を使うなら,
mailbox_command = /usr/bin/procmail -f-
などとしておいて,新規ユーザを作ったときに
/var/spool/mail にそのユーザ名と同じ名前のファイル(大きさゼロ)を
作っておくか,あるいは注意して procmail の setuid ビットを立てる。
…のだそうだが、現在、この設定はしていない。コメントアウトしておく。
#mailbox_command = /usr/bin/procmail -f-
終了したら、
# postfix reload
# /etc/init.d/postfix restart
する。
- ここまでの注意点
外部受信に際して、もっともポイントとなるのは
- /etc/hosts の IP直後の名前(FQDN部分)
- /etc/hostname
- /etc/postfix/main.cf の"myhostname"
はすべて同じ名前(FQDN)を用いることだ。
- ローカル配信テスト 第2回目
ここで、ローカル配信テスト 第1回目
と同様に、セッティングが決まっているかを確認するため、ローカル配信を試みる。
うまく配信されていれば、システムに再起動をかける。
# reboot
これで一応、Postfix 側の設定は終了。
courier-imap のインストールは簡単。
しかも、インストール後にすることは何もない。
一つだけ質問されるが、
webで設定するつもりはないので、デフォルトでよい。
これで courier-imap が動作していることになる。
ローカル配信(3回め)をして確認をしておく。
方法はこれまでと同じ
ルータの設定をする。
imap が使うポートは「143番」だ。
ルータで 143番を開けてやる。
そこまで終わったら、念のためサーバ側を一度再起動してやる
# reboot
これで、外部からの送受信が可能か、最終チェックに入る。
ローカル配信テスト 第4回目は
これまでと配信方法は同じ(root,自分のアカウントからの配信)だが、
ルータが正しく、IP/名前解決をし、Postfixが正しく配信し、courier-imapが正しく動作しているか
をチェックするため、
サーバ側で受信するのではなく、クライアントマシンからの受信が加わる。
具体的には
- root, 自分のアカウント(hjk) から mail コマンドで
これまでどおりメールを送る。
- サーバ側で、$~/Maildir/new/ 以下にメールが届いているかチェックする。
- windowsPC に imap対応メーラ(Mozilla Thunderbird)をインストールして、
ルータで設定した、今回のメールサーバの IP(192.168.x.xxx) と アカウント@ホスト名(hjk@moge.fam.cx)
で設定を作り、受信してみる。
これで Thunderbird でこれまでのテストメールが見れれば、
ルータ、Postfix、courier-imap がすべてきちんと動作していることになる。
複数のメールアカウントを一括して取得してくれる fetchmail を導入し、
imap で一元管理する最終段階に入る。
導入は courier-imap 同様簡単だ。
- # apt-get install fetchmail
fetchmailの設定は
次のように行う。
- $ touch ~/.fetchmailrc (自分のホームディレクトリに".fetchmailrc"ファイルを作る)
- $ vi .fetchmailrc (".fetchmailrc"を書く)
set daemon 30
set postmaster root
set no bouncemail
defaults
protocol auto
no mimedecode
smtphost localhost
poll [mail.server1]
uidl (<= メールサーバにメールを残すため)
protocol pop3
user hogehoge
password xxxxxxx
keep (<= メールサーバにメールを残すため)
poll [mail.server2]
protocol apop
user mogemoge
password xxxxx
- $ chmod 600 .fetchmailrc
.fetchmailrc にはメール受信のためのパスワードが書かれているので、3.でのパーミション変更は必須。
ここまでが終了したら最終 受信テストを行う。
再起動後、ローカルユーザアカウントから fetchmail と打ち、
ローカル配信テスト 第4回目で導入した
Thunderbirdから自分のメールサーバアカウントから受信してみる。
うまくいけば、.fetchmailrcで設定したメールアカウントに届けられたメールが
Thunderbirdから読めるようになるはずだ。
# reboot
$ fetchmail
(windowsに移りThunderbirdからメールを取得する)
メールが無事受信できるようになったら、fetchmail で定期的にプロバイダのメールボックスから
取得してくるよう、
cronによる自動取得設定を行う。
cron を設定するには、ユーザアカウントから
し、設定する。
crontab の詳細
現在の crontab は以下のようになっている。
MAILTO=""
*/5 * * * * /usr/bin/fetchmail
"MAILTO=" は、fetchmailが動作する度(5分)に送られてくるログを
自分のメールボックスに送らせないようにする設定。
導入がすんだら、
メール専用のユーザを作る。
これも courier-imap 導入後は次のようにする
- ユーザ作成前に、自動的にユーザディレクトリに ~/Maildir ができるよう、
courier-imap についてくる maildirmake コマンドを使って、
/etc/skel に次の設定をしておく
- # maildirmake /etc/skel/Maildir
- メール受信専用のユーザを作る
今回は useradd ではなく、adduser を使ってみた
su hoge でログインしてみると、~/Maildir ができている。