メール セキュリティ 暗号化 情報漏洩 サーバ ストレージ 
postfixインストール
postfixは比較的新しいMTAですが非常に性能的にも、sendmailとの互換性にも優れているので、いくつかのLinuxでも標準のMTAとして使われていたりします。
qmail・sendmail・postfixの中でpostfixが選択されるのは、やはりsendmailをやめて違う高性能なMTAに乗り換えるときでしょう。
qmailもsendmailからの乗り換えの手順などもついていますが、数千・数万というアカウントがあるメールサーバのMTAをいきなりsendmailから乗り換えるにはあまりにもこわいです。
そんなときは確実にpostfixが選択されるでしょう。

solidpopが今のところうまく動いてません。
現在がんばってspop3dをインストールしましたがむりだったので
courier-imapに切り替えました。
動かないインストール履歴はこちら。
その後、親切な方から間違いの指摘をいただいて
まともなものになりました。


pop before smtpをする場合は参照ください。


【準備】
ftp://ftp.ayamura.org/pub/postfix/index.html
から最新版のソースを落としてきます。

【インストール】
[root@home3 postfix]# tar zxf postfix-2.2.8.tar.gz
[root@home3 postfix]# cd postfix-2.2.8
LD_LIBRARY_PATHがあるとコンパイルにしっぱりすることがあるので
環境変数を抜いておきます。
[root@home3 postfix]# unset LD_LIBRARY_PATH (unsetenv LD_LIBRARY_PATH)
[root@home3 postfix-2.2.8]# make 2>&1|tee make.log

●postfixユーザ・グループを追加
[root@home3 postfix-2.2.8]# groupadd -g 20000 postdrop
[root@home3 postfix-2.2.8]# useradd -u 10000 -c "postfix-user" -g 10000 -d /tmp -s /bin/false postfix

※後でインストールが完了し、起動するときにpostfixがpostdropのグループにあると怒られたので
存在しない10000のグループにしました。INSTALLファイルを見てもpostfixユーザをpostdropグループには入れないように追加していました。


●postfix・aliasesにpostfixのエイリアスの追加
[root@home3 postfix-2.2.8]# echo "postfix: root" >> /etc/aliases

●sendmailの停止とファイルのバックアップ
sendmailのキューが残ってる場合はそのキューがなくなるまで待つ・・・
とインストールファイルに書いてますがいくら待ってもなくならないと思うんで、

[root@home3 postfix-2.2.8]# /etc/rc2.d/S88sendmail stop
[root@home3 postfix]# /usr/lib/sendmail -q
でキューをフラッシュしてあげてもよいかも。ここでキューがなくなるまで待つってのは必要かも。

[root@home3 postfix-2.2.8]# mv /usr/lib/sendmail /usr/lib/sendmail.OFF
[root@home3 postfix-2.2.8]# mv /usr/bin/newaliases /usr/bin/newaliases.OFF
[root@home3 postfix-2.2.8]# mv /usr/bin/mailq /usr/bin/mailq.OFF
[root@home3 postfix-2.2.8]# chmod 755 /usr/lib/sendmail.OFF

●インストール
[root@home3 postfix-2.2.8]# make install 2>&1|tee make_install.log
以下の質問がされます。
install_root: [/]リターン

Please specify a directory for scratch files while installing Postfix.
You must have write permission in this directory.
tempdir: [/usr/local/arch/postfix/postfix-2.2.8]
リターン


Please specify the final destination directory for installed Postfix
configuration files.
config_directory: [/etc/postfix]
リターン


Please specify the final destination directory for installed Postfix
daemon programs. This directory should not be in the command search
path of any users.
daemon_directory: [/usr/libexec/postfix]
リターン

Please specify the final destination directory for installed Postfix
administrative commands. This directory should be in the command search
path of adminstrative users.
command_directory: [/usr/sbin]
リターン

Please specify the final destination directory for Postfix queues.
queue_directory: [/var/spool/postfix]
リターン

Please specify the final destination pathname for the installed Postfix
sendmail command. This is the Sendmail-compatible mail posting
interface.
sendmail_path: [/usr/lib/sendmail]
リターン

Please specify the final destination pathname for the installed Postfix
newaliases command. This is the Sendmail-compatible command to build
alias databases for the Postfix local delivery agent.
newaliases_path: [/usr/bin/newaliases]リターン

Please specify the final destination pathname for the installed Postfix
mailq command. This is the Sendmail-compatible mail queue listing
command.
mailq_path: [/usr/bin/mailq]リターン

Please specify the owner of the Postfix queue. Specify an account with
numerical user ID and group ID values that are not used by any other
accounts on the system.
mail_owner: [postfix]リターン

Please specify the group for mail submission and for queue management
commands. Specify a group name with a numerical group ID that is not
shared with other accounts, not even with the Postfix mail_owner
account. You can no longer specify "no" here.
setgid_group: [postdrop]リターン

Please specify the destination directory for the Postfix on-line manual
pages. You can no longer specify "no" here.
manpage_directory: [/usr/local/man]リターン


Please specify the destination directory for the Postfix sample
configuration files.
sample_directory: [/etc/postfix]リターン


Please specify the destination directory for the Postfix README files.
Specify "no" if you do not want to install these files.
readme_directory: [no]
リターン
特別な理由がなければ全部デフォルトでインストールが無難。
もし管理者が他の人になってもデフォルトであればやりやすいはず。

【設定】
[root@home3 postfix]# cp -p /etc/postfix/main.cf /etc/postfix/main.cf.bak
[root@home3 postfix]# vi /etc/postfix/main.cf
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
default_privs = nobody
myhostname = aroman.mine.nu
myhostname = home3.jinjin.com

mydomain = jinjin.com
mydomain = aroman.mine.nu

myorigin = $myhostname
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, $mydomain,
mynetworks_style = subnet
mynetworks = 192.168.128.0/24, 127.0.0.0/8, [::1]/128, [IPv6 NLA2ブロック::]/48
#ipv6使わないときはIPv6のところだけ外す
#relayhost = 192.168.128.0
alias_maps = dbm:/etc/aliases
alias_database = dbm:/etc/aliases

home_mailbox = Maildir/
debug_peer_level = 2
sendmail_path = /usr/lib/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
manpage_directory = /usr/local/man
sample_directory = /etc/postfix
readme_directory = no

allow_mail_to_commands = alias,forward,include
smtpd_recipient_limit = 3000






myhostnameをここで2つ定義しているのは、このメールサーバのDNS名が内側からはhome3.jinjin.comとしているのに、外側からはaroman.mine.nuで定義されているから。通常は一行でいいでしょう。もし、メールサーバがいくつか名前を持っているならこういう定義の仕方はありでしょう。(注:バーチャルホストのことを意味しているのではない)

同じ理由でmydomainも定義しています。


イントラネットでHUBホストがきまってるならrelayhost=vvv.xxx.yyy.zzzでIP指定するか、ホスト名が解決できるならホスト名を入れておきましょう。

includeやforwardを使えるようにしてよりsendmailと互換性を高めましょう。
またFMLとか使いたいなら必須でしょう。


sendmailと互換性を高めたいならMaildirではなくて「home_mailbox = Mailbox」を使って/var/mail/におけばよいかと。
【起動】
上記の順番で進めてくればこの時点ではsendmailは停止しているはずなので。
[root@home3 postfix]# /etc/rc2.d/S88sendmail start
でpostfixが起動します。


しかし停止はできなかったりします。よってせっかくpostfixのコマンドが
あるのですがそちらを使います。

[root@home3 postfix]# /usr/sbin/postfix start

これでpostfixが起動してきます。
停止も「stop」を引数に渡せば止まります。
/var/log/syslogの方にエラーなどはいてないか確認してみてください。
もしいけてるようなら再起動の時も自動的にpostfixが起動するように
しておきましょう。

[root@home3 bin]# ln -s /usr/sbin/postfix /etc/rc2.d/S88postfix
[root@home3 bin]# mv /etc/rc2.d/S88sendmail /etc/rc2.d/_S88sendmail

【送信確認】
ちょっと小技で添付ファイルなんてつけて送ってみましょう。
普通にメール送ればそれだけでいいですが・・・
[root@home3 /]# uuencode /var/log/syslog syslog |mailx yuzo@jinjin.org
Mar 6 10:43:31 home3 postfix/master[4623]: [ID 197553 mail.info] daemon started -- version2.2.8
Mar 6 10:46:39 home3 postfix/pickup[4626]: [ID 197553 mail.info] 3345218061: uid=0 from=<root>
Mar 6 10:46:39 home3 postfix/cleanup[4679]: [ID 197553 mail.info] 3345218061: message-id=<20040306014639.3345218061@aroman.mine.nu>
Mar 6 10:46:39 home3 postfix/qmgr[4627]: [ID 197553 mail.info] 3345218061: from=<root@aroman.mine.nu>, size=111647, nrcpt=1 (queue active)
Mar 6 10:46:41 home3 postfix/smtp[4681]: [ID 197553 mail.info] 3345218061: to=<yuzo@jinjin.org>, relay=vs.mailsystems.net[211.125.95.178], delay=2,
status=sent (250 Mail accepted)
ログを見る限りちゃんと送信されたようなので実際に送られているかどうか確認してみます。
送られていればsmtpの役目は果たせています。


postfixその他設定等

●ヘッダーの削除
イントラネット内での中継してるホスト名を消したい場合

例).
ユーザ送信「社内MTA1」「社内MTA2」インターネットxxx受信者MTA
と送信される場合で、今「社内MTA2」のpostfixの設定をしているとします。


そして時々
554 Too many hops 18 (17 max): from xxxx
のようなエラーメールが帰ってくることがある。

そのときに「社内MTA1」と「社内MTA2」の情報をReceived:ヘッダーから削除
して受信者に社内ホストの経由状況を見せないように設定することができます。

また受信者に届くまでにホップ数が17個以上ではじかれるというような
古いシステムを通過してしまう場合のためになるべくReceivedヘッダーを少なくしたい
という時があると思います。

そういう設定をする場合は
# vi /etc/postfix/main.cf
header_checks = regexp:/etc/postfix/header_checks
をコメントをはずす。
# vi /etc/postfix/header_checks
/^Recieved:/ IGNORE
の一行を追加
# /usr/sbin/postfix reload
でReceivedヘッダーが全て削除される。

※「社内MTA1」にあるアカウントに配送されてくる場合
 すべてのReceivedヘッダーがなくなってしまっているので
 逆にどこを通ってきたのか全くわかりません。
 ただし数万アカウントあったりする場合
 ヘッダーの容量が小さくなるのでDISKへのI/Oが小さくなり
 DISKスペースの無駄も少なくなり、MTAのパフォーマンスも向上する
 というメリットもあります。

特にIMAPサーバの場合などかなり有効な方法かと思います。
同じ要領でX-MailerやX-Priorityを消すことができます。意味あるかどうか別にして・・・


●送信メールの制限サイズ変更
postfixのデフォルトは5MBを超えると送信できないようになっている。
なのでそれを変更するために
# vi /etc/postfix/main.cf
message_size_limit = 327680000
を/etc/postfix/main.cfに追加して
#じゃっかん常識はずれなサイズではあるが・・・

# postfix reload
したところ下記のエラーがでていた・・・


Apr  5 14:01:16 home3 postfix/local[9594]: [ID 947731 mail.crit] fatal:main.cf configuration error: mailbox_size_limit is smaller thanmessage_size_limit
Apr  5 14:01:17 home3 postfix/master[303]: [ID 947731 mail.warning]warning: process /usr/libexec/postfix/local pid9594 exit status 1
Apr  5 14:01:17 home3 postfix/master[303]: [ID 947731 mail.warning]warning: /usr/libexec/postfix/local: bad command startup -- throttling


mailboxのサイズがデフォルトでは少し小さいのかもしれない
#postconf |grep mailbox_size
mailbox_size_limit = 51200000

で50MBになっていた。まあ妥当なサイズかもしれないが
これ以上でかいファイルを送信するには
mailbox_size_limitもでかくしなくてはいけない。
なので
# vi /etc/postfix/main.cf
mailbox_size_limit = 512000000
message_size_limit = 327680000
の2行を追記

と10倍してmessagesサイズより小さくし
#postfix reload
するとエラーもなくうまくいった。

この用にデフォルトの値がわからない時や知りたいときは
postconfコマンドを使おう!

●セキュリティ
送信してくる相手のMTAがDNSで引けない場合はスパムの可能性が高いので
全てsmtpセッション中にrejectしてしまう。

disable_dns_lookups = yes

vefyコマンドを使ってサーバにあるアカウントの調査をされないために

disable_vrfy_command = yes

その他スパム防止はこちらを参照ください。

postfixバーチャルドメインの設定

上記の通り一通り設定ができれば通常のメールサーバとしては問題ない。
しかし、グローバルに公開しているホスティングサーバ
などは同じIPアドレスでいくつものドメイン名を持っている場合がある。
そんな時は上記の設定では受信できない。
バーチャルドメインを使う必要がある。

バーチャルドメインをするには2通りのやり方がある
1.UNIXアカウントを使う方法
2.UNIXアカウントを使わない方法

◎UNIXアカウントを使う方法
[前提条件]
・aroman.mine.nu
・sunsolve.homeunix.com
というドメイン名を取っている。
サーバ上にUNIXアカウントとして
nitta
test
という2つのユーザが
aroman.mine.nu
sunsolve.homeunix.com
を使えるようにする。

[手順]
# vi /etc/postfix/main.cf

virtual_alias_maps =dbm:/etc/postfix/virtual
virtual_alias_domains = $virtual_alias_maps

※dbmかhashかはpostconf -m(maptypeを見るオプション)で確認する。
を追記。

# vi /etc/postfix/virtual

nitta@sunsolve.homeunix.com nitta
test@sunsolve.homeunix.com test

# postmap /etc/postfix/virtual
 ※postmapでデータベースに反映させる

○プロセスの再起動
# postfix reload

○送受信テスト
# mailx nitta@sunsolve.homeunix.com < /etc/passwd
# mailx nitta@aroman.mine.nu < /etc/group

受信確認してみましょう
実際に両方のドメイン宛できてることでしょう。

これではただ違うドメインで
受け取れるようになっただけで
いまいち本格的ではありませんね。


だってnittaというUNIXアカウントをサーバ上に作ってしまうと
少なくともメインとして動いているaroman.mine.nuには無条件で
nitta@aroman.mine.nuというメールアドレスに配送できてしまいます。

◎UNIXアカウントを使わない方法
[前提条件]
・aroman.mine.nu
・sunsolve.homeunix.com
・juniper.homelinux.com
というドメイン名を取っている。

[実現すべきこと]
cisco@juniper.homelinux.com
starcat@sunsolve.homeunix.com
に配送する。

※当然ciscoやstarcatというユーザアカウント存在しない
  cisco@aroman.mine.nuやcisco@sunsolve.homeunix.com
  はuser unknownになるように!


[手順]
先ほどUNIXアカウント使うときの設定virtual_alias_maps
で行ったヴァーチャルドメインの設定方法と違うものになります。
virtual_alias_mapとvirtual_alias_domainsは設定されていない状態です。

○設定ファイルの追記

# vi /etc/postfix/main.cf

##追記内容
####virtual domain###
#virtual_mailbox_domains = sunsolve.homeunix.com juniper.homelinux.com

virtual_transport = virtual
virtual_mailbox_domains = dbm:/etc/postfix/vhosts
virtual_mailbox_maps = dbm:/etc/postfix/vmailbox
virtual_mailbox_base = /export/home/vhosts
virtual_minimum_uid = 1000
virtual_uid_maps = static:10000
virtual_gid_maps = static:20000
vilocal_transport = local
local_recipient_maps = unix:passwd.byname $alias_maps
virtual_mailbox_limit = 512000000

virtual_mailbox_limitは特に必要ないが
message_size_limit = 327680000など設定している場合は
virtual_mailbox_limitをmessage_size_limitより大きくしておかなくてはならない。

○ドメインの定義
# vi /etc/postfix/vhosts
juniper.homelinux.com required to prevent relay access denied errors
sunsolve.homeunix.com required to prevent relay access denied errors
# postmap /etc/postfix/vhosts

○メールボックスの定義
# vi /etc/postfix/vmailbox
cisco@juniper.homelinux.com juniper.homelinux.com/cisco/Maildir/
starcat@sunsolve.homeunix.com sunsolve.homeunix.com/starcat/Maildir/
# postmap /etc/postfix/vmailbox
このファイルの書き方が結構ミソです。
最期に「/」があるのと無いのではえらい違いなのです!
「/」ある場合:maildir形式で保存される
「/」が無い場合:mbox形式で1ファイルとして保存される

今回はmaildirを最初から設定しているのでmaildir形式で保存する!
ユーザを削除するには上記のファイルから該当ユーザの行を削除して
postmapしなおしておこう。

○保存先の作成
# mkdir -p /export/home/vhosts/juniper.homelinux.com
# mkdir /export/home/vhosts/sunsolve.homeunix.com
# chown -R postfix:postdrop /export/home/vhosts

○プロセスの再起動
# postfix reload

このままでは配送はできますがimapやpopで
受信ができません。受信する方法はcourier-imapの項で説明します。
そちらを参照ください。

courier-imapインストール(2004.03)

上記の手順でメールは中継できるけど、MUAでPOPやIMAPでゲットすることはできません。
以下でクライアントがサーバにアクセスして自分のメールをとってもらえるようにします。
現在で考えられるプロトコルとしてはpop3とimap4の両方に対応しないといけません。
よてcourier-imapを使います。
これであれば両方のプロトコルをサポートしています。
しかもMaildir形式をサポートしているので超大規模サイトでqmailに乗り換える
必要性がある場合も対応できます。
MaildirをサポートしているものとしてはSqWebMail, maildropなどもあります。


【準備】
http://www.courier-mta.org/download.php#imap
から最新版を入手します。
BerkeleyDB.4.0
OpenSSL
は事前にインストールしておいてね。

【インストール】
・展開
一般ユーザでコンパイルをする必要がある。↓
適当にsuして行ってください。
[11:19am root@home3 imap]$ cd /usr/local/arch/imap/
[11:20am root@home3 imap]$ bzip2 -d < courier-imap-2.2.1.tar.bz2 |tar xf -
[11:20am root@home3 imap]$ ls
courier-imap-2.2.1/ courier-imap-2.2.1.tar.bz2
[11:20am root@home3 imap]$ cd courier-imap-2.2.1
----ちょっと強引ですが・・・----
[12:42pm nitta@home3 courier-imap-2.2.1]$ln -s /usr/local/BerkeleyDB.4.0/lib/libdb.a /usr/local/lib/
[12:42pm nitta@home3 courier-imap-2.2.1]$ln -s /usr/local/BerkeleyDB.4.0/include/db.h /usr/local/include/
[12:42pm nitta@home3 courier-imap-2.2.1]$ ln -s /usr/local/ssl/include/openssl ./openssl
----とりあえずやっときます。----
本当は--libdir --includedirで全部指定すればうまくいくはずでしょうが
今回指定したのにBerkleyDBとopensslを指定してるのにうまくいきませんでしたので。

・コンパイル
[11:22am root@home3 courier-imap-2.2.1]$ ./configure --enable-workarounds-for-imap-client-bugs \
                                        --with-db=db \
                                        --enable-unicode=iso-2022-jp \
                                        --libdir=/usr/local/lib \
                                        --includedir=/usr/local/include \
                                         2>&1|tee configure.log
;
[11:31am nitta@home3 courier-imap-2.2.1]$ make 2>&1|tee make.log
以下はrootで
[12:46pm root@home3 courier-imap-2.2.1]# make install 2>&1|tee make_install.log
[12:55pm root@home3 courier-imap-2.2.1]# make install-configure 2>&1|tee make_install-configure.log
※インストールが終了した後はlibdb.aにシンボリックリンクを作ったものは
  削除しておかないとpostfixで

Mar 6 14:56:29 home3 postfix/smtpd[2567]: [ID 947731 mail.crit] fatal: unsupported dictionary type: hash
Mar 6 14:56:30 home3 postfix/master[4623]: [ID 947731 mail.warning] warning: process /usr/libexec/postfix/smtpd pid 2567 exit status 1
Mar 6 14:56:30 home3 postfix/master[4623]: [ID 947731 mail.warning] warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling

のようなものが出て正常に送信できないという現象がありました。
なのでsyslinkは消しました。
消しても特にimapやpopが動かなくなることはありませんでした。
ldd /usr/lib/courier-imap/bin/*
ldd /usr/lib/courier-imap/sbin/*
してもlibdb.aにリンクされていませんでした。

・設定
[01:24pm root@home3 etc]# mv pop3d.cnf pop3d.cnf.org
[01:24pm root@home3 etc]# cp -p pop3d.dist pop3d.cnf
[01:24pm root@home3 etc]# mv imapd.cnf imapd.cnf.org
[01:25pm root@home3 etc]# cp -p imapd.dist imapd.cnf
[01:25pm root@home3 etc]# vi authdaemonrc
[変更前]
version=authdaemond.plain
[変更後]
version=authdaemond.plain

・起動
[01:00pm root@home3 rc2.d]# /usr/lib/courier-imap/libexec/imapd.rc start
[01:00pm root@home3 rc2.d]# /usr/lib/courier-imap/libexec/pop3d.rc start
[01:05pm root@home3 rc2.d]# ps -ef |grep imap

root 1208 1 0 12:59:59 ? 0:00 /usr/lib/courier-imap/libexec/couriertcpd -address=0 -stderrlogger=/usr/lib/cou
root 1184 1 0 12:58:54 ? 0:00 /usr/lib/courier-imap/libexec/authlib/authdaemond.ldap start
root 1196 1184 0 12:58:54 ? 0:00 /usr/lib/courier-imap/libexec/authlib/authdaemond.ldap start
root 1210 1 0 12:59:59 ? 0:00 /usr/lib/courier-imap/libexec/courierloggerpop3d
root 1185 1184 0 12:58:54 ? 0:00 /usr/lib/courier-imap/libexec/authlib/authdaemond.ldap start
root 1191 1 0 12:58:54 ? 0:00 /usr/lib/courier-imap/libexec/couriertcpd -address=0 -stderrlogger=/usr/lib/cou
root 1194 1184 0 12:58:54 ? 0:00 /usr/lib/courier-imap/libexec/authlib/authdaemond.ldap start
root 1195 1184 0 12:58:54 ? 0:00 /usr/lib/courier-imap/libexec/authlib/authdaemond.ldap start
root 1186 1184 0 12:58:54 ? 0:00 /usr/lib/courier-imap/libexec/authlib/authdaemond.ldap start
root 1193 1 0 12:58:54 ? 0:00 /usr/lib/courier-imap/libexec/courierloggerimapd

[01:05pm root@home3 rc2.d]# ps -ef |grep pop
root 1210 1 0 12:59:59 ? 0:00 /usr/lib/courier-imap/libexec/courierloggerpop3d

・起動ファイル作成
[01:01pm root@home3 rc2.d]# ln -s /usr/lib/courier-imap/libexec/imapd.rc /etc/rc2.d/S88imapd
[01:02pm root@home3 rc2.d]# ln -s /usr/lib/courier-imap/libexec/pop3d.rc /etc/rc2.d/S88pop3d

以上でインストールは終了です。
あとはwanderlustやmewでimapのテストをしてみましょう。
もしも、UNIXが使えない人はOutlookExpressやその他のMUAで送受信のテストをしてみましょう。
imapもpopも両方とも/var/log/syslogに出力されます。

・確認
[送信]
※自分の愛用のMUA(俗称メーラ)などでテストしてください。
ローカ→ローカル

Mar 6 15:16:25 home3 postfix/smtpd[2953]: [ID 197553 mail.info] connect from home.jinjin.com[192.168.128.11]
Mar 6 15:16:26 home3 postfix/smtpd[2953]: [ID 197553 mail.info] 06DF018061: client=home.jinjin.com[192.168.128.11]
Mar 6 15:16:26 home3 postfix/cleanup[2955]: [ID 197553 mail.info] 06DF018061: message-id=<007d01c40342$958ac140$0b80a8c0@home>
Mar 6 15:16:26 home3 postfix/qmgr[2605]: [ID 197553 mail.info] 06DF018061: from=<yuzo@jinjin.org>, size=825, nrcpt=1 (queue active)
Mar 6 15:16:26 home3 postfix/smtpd[2953]: [ID 197553 mail.info] disconnect from home.jinjin.com[192.168.128.11]
Mar 6 15:16:26 home3 postfix/local[2957]: [ID 197553 mail.info] 06DF018061: to=<nitta@aroman.mine.nu>,
relay=local, delay=0, status=sent (maildir)

ローカル-リモート

Mar 6 15:20:05 home3 postfix/smtpd[2995]: [ID 197553 mail.info] connect from home.jinjin.com[192.168.128.11]
Mar 6 15:20:05 home3 postfix/smtpd[2995]: [ID 197553 mail.info] 20A2E18061: client=home.jinjin.com[192.168.128.11]
Mar 6 15:20:05 home3 postfix/cleanup[2997]: [ID 197553 mail.info] 20A2E18061: message-id=<008301c40343$1853e520$0b80a8c0@home>
Mar 6 15:20:05 home3 postfix/qmgr[2605]: [ID 197553 mail.info] 20A2E18061: from=<yuzo@jinjin.org>, size=782, nrcpt=1 (queue active)
Mar 6 15:20:05 home3 postfix/smtpd[2995]: [ID 197553 mail.info] disconnect from home.jinjin.com[192.168.128.11]
Mar 6 15:20:06 home3 postfix/smtp[3001]: [ID 197553 mail.info] 20A2E18061: to=<yuzo@jinjin.org>,
relay=vs.mailsystems.net[211.125.95.178], delay=1, status=sent (250 Mail accepted)

[受信]
IMAPでの受信

Mar 6 15:28:31 home3 imapd: [ID 702911 mail.info] LOGIN, user=nitta, ip=[::ffff:192.168.128.11], protocol=IMAP
Mar 6 15:28:31 home3 imapd: [ID 702911 mail.info] Connection, ip=[::ffff:192.168.128.11]
Mar 6 15:28:31 home3 imapd: [ID 702911 mail.info] LOGIN, user=nitta, ip=[::ffff:192.168.128.11], protocol=IMAP
Mar 6 15:28:31 home3 imapd: [ID 702911 mail.error] DISCONNECTED, user=nitta, ip=[::ffff:192.168.128.11],
headers=0, body=375

受信できていました。

POPでの受信

Mar 6 15:30:29 home3 pop3d: [ID 702911 mail.info] Connection, ip=[::ffff:192.168.128.11]
Mar 6 15:30:29 home3 pop3d: [ID 702911 mail.info]
LOGIN, user=nitta, ip=[::ffff:192.168.128.11]
Mar 6 15:30:29 home3 pop3d: [ID 702911 mail.info] LOGOUT, user=nitta, ip=[::ffff:192.168.128.11], top=0,
retr=2878

以上で確認もできて問題ないと思います。
もしもMailbox形式からMaildir形式にいこうする必要があるなら
http://untroubled.org/mbox2maildir
のあたりのスクリプトで移行前に前のサーバのデータを
ゲットしてきて変換してしまいましょう。
その手順はサイトによってポリシーを決めてうまくやってください。
クラスター化されたSMTP、POP、IMAPサーバではかなり複雑な手順に
なることとデータの移行が難しいのは言うまでもありません。
新サーバを立てて一気にデータ移行なしにやってしまいましょう。
前のサーバのデータは運用上でカバーしましょう。

postfixとimapでうまくいけば後はリスメール(SquirrelMail)を使ってWEBメールが
使えるようにすればユーザの利便性が上がるのでは?
もしくはuserminですかねえ。
でもメールだけを考慮すればリスメールが一番よいと思います。

courier-imapでバーチャルドメイン

[前提条件]
すでにこちらのpostfixのようにバーチャル
ドメインへの配送がされている。
cisco@juniper.homelinux.com
starcat@sunsolve.homeunix.com
への配送が成功し
/export/home/vhosts/juniper.homelinux.com/cisco/Maildir
/export/home/vhosts/sunsolve.homeunix.com/starcat/Maildir
に正常に保存されているものとする。

postfixの設定としてはUNIXアカウントを使用しない
ものが設定されている。

[手順]
○courier-imapでデータを作成する
# cd /usr/lib/courier-imap/sbin
# ./userdb cisco@juniper.homelinux.com set \
home=/export/home/vhosts/juniper.homelinux.com/cisco \
mail=/export/home/vhosts/juniper.homelinux.com/cisco/Maildir \
uid=10000 gid=10000

# echo "test123" |./userdbpw -md5 |./userdb cisco@juniper.homelinux.com set pop3pw
# echo "test123" |./userdbpw -md5 |./userdb cisco@juniper.homelinux.com set imappw

○データをデータベースに反映させる
# ./makeuserdb

○確認
# ls -l /etc/userdb*

-rw------- 1 root other 527 Nov 3 16:27 /etc/userdb
-rw-r--r-- 1 root other 24576 Nov 3 16:27 /etc/userdb.dat
-rw-r--r-- 1 root other 0 Nov 3 16:27 /etc/userdb.lock
-rw------- 1 root other 24576 Nov 3 16:27 /etc/userdbshadow.dat

受信する

ユーザアカウント:cisco@juniper.homelinux.com
パスワード:test123

で自分のMUAでメール受信の確認をしてみよう。
後でどんどんユーザを追加する場合は上記の手順を繰り返す。
例えば以下のようにさらにユーザを追加する。
# cd /usr/lib/courier-imap/sbin
# ./userdb sarcat@sunsolve.homeunix.com set \
 home=/export/home/vhosts/sunsolve.homeunix.com/starcat \
 mail=/export/home/vhosts/sunsolve.homeunix.com/starcat/Maildir \

 uid=10000 gid=10000
# echo "abed123" |./userdbpw -md5 |./userdb starcat@sunsolve.homeunix.com set imappw
# echo "abed123" |./userdbpw -md5 |./userdb starcat@sunsolve.homeunix.com set pop3pw
# ./makeuserdb

# cat /etc/userdb

cisco@juniper.homelinux.com imappw=$1$dT62HWsY$NcbA3j3td6rOOcgDkGDzo/|uid=10000|pop3pw=
$1$beyr8HPn$mRY6hZ.me.z898Ah4FYg2/|mail=/export/home/vhosts/juniper.homelinux.com/cisco/Mai
ldir|home=/export/home/vhosts/juniper.homelinux.com/cisco|gid=10000
support@sunsolve.homeunix.com imappw=$1$SQ7nalkQ$GYaylyx0NbIKVcLcQyw4g.|pop3pw=$1$.NcgM4F
3$.0m39JZHcnYC.Ik9PIHVm1|uid=10000|mail=/export/home/vhosts/sunsolve.homeunix.com/support/M
aildir|home=/export/home/vhosts/sunsolve.homeunix.com/support|gid=10000

starcat@sunsolve.homeunix.com imappw=$1$rUmIshTc$ZAiJIODp1OlCpPe9JMh/1.|pop3pw=$1$1H/zzo9
P$9AEMWlV7S6/PGR4SgBqe7/|uid=10000|mail=/export/home/vhosts/sunsolve.homeunix.com/starcat/M
aildir|home=/export/home/vhosts/sunsolve.homeunix.com/starcat|gid=10000

この用にどんどん追加されることになる。
ユーザを削除するにはこのファイルからユーザを削除してmakeuserdbすればよい!

以上でcourier-imapを使ってpop3とimap4のバーチャルドメインの設定は完了である。


とりあえず仕組み的には以上のようになるが
運用面から考えると結構手間がかかる。
もしもユーザがパスワードを変更したい場合は
userdbを更新するようなプログラムをperlか何かで書かないといけない。
当然WEB上からパスワードの変更をさせるのが普通である。
そのインターフェースを用意するには既製のスグレものはない。