Postfix の設定と起動確認

次に postfix の設定を行うのであるが、まず配送先のディレクトリと配送用のシステムユーザを作成する。

ユーザ作成


配送用システムユーザは以下のとおりに設計する。

ユーザ名 uid gid ホーム
vmail 501 501 /var/vmail
$ sudo groupadd -g 501 vmail
$ sudo useradd -g vmail -u 501 -s /bin/false -d /var/vmail vmail
$ sudo mkdir /var/vmail
$ sudo chown vmail:vmail /var/vmail
$ sudo chmod 771 /var/vmail

postfix の main.cf の設定

次にキモの部分である main.cf を設定する。実運用では足らないのだが、テスト用にとりあえずこれだけ。

$ cd /etc/postfix
$ sudo vi main.cf

#--------------------------------
# * K I H O N *
#-------------------------------
# ホスト名・ドメイン名・送信元
myhostname = niboshi.kakitsubata-ayame.net
mydomain = kakitsubata-ayame.net
myorigin = $myhostname

# 最終配信先…バーチャルの場合は設定しないように設定する
# $myhostname と書けば良さそうだが、今回バーチャルでそちらも設定するので書かないこと!
mydestination =

# ネットワーク設定
inet_interfaces = all
mynetworks = 192.168.1.0/24, 127.0.0.0/8

# エイリアス
alias_maps = hash:/etc/mail/aliases
alias_database = hash:/etc/mail/aliases

# デバッグ用
debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5

# Maildir 形式を指定。 / を忘れないこと
home_mailbox = Maildir/

# バーチャル配信を全てに適用
local_transport = virtual
virtual_transport = virtual

# メールの配送先の実ディレクトリ
virtual_mailbox_base = /var/vmail

# アカウント管理DBへのアクセスをつらつらと書く
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_alias_domains = $virtual_alias_maps
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
local_recipient_maps = $virtual_mailbox_maps

# メール配信に使う UID/GID 等
virtual_minimum_uid = 501
virtual_uid_maps = static:501
virtual_gid_maps = static:501


また MySQL で参照出来るように以下の設定ファイルを作成する。

$ sudo vi mysql_virtual_alias_maps.cf

user = postfix
password = authpass
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
$ sudo vi mysql_virtual_domains_maps.cf

user = postfix
password = authpass
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'
$ sudo vi mysql_virtual_mailbox_maps.cf

user = postfix
password = authpass
hosts = localhost
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'


すべて書き終わったら、生パスワードが外から見えないように権限を設定しておく。

$ sudo chgrp postfix mysql_virtual_*
$ sudo chmod 640 mysql_virtual_*
$ ls mysql_virtual_* -l
-rw-r----- 1 root postfix 141 Mar 29 07:26 mysql_virtual_alias_maps.cf
-rw-r----- 1 root postfix 162 Mar 29 07:27 mysql_virtual_domains_maps.cf
-rw-r----- 1 root postfix 147 Mar 29 07:28 mysql_virtual_mailbox_maps.cf

起動と配送確認

すべて設定したら postfix サービスを起動する。

$ sudo /etc/init.d/postfix start


その後 postfixadmin に管理者 ID でログインし、メール送信タブからメールを送って配送確認を行う。うまく行ったかどうかは、ログと配送先のディレクトリの目視で確認出来る。

うまくいっていたら引き続き POP/IMAP の設定に入る。

配信されないときは
  • postfix のログはメールログに書きだされる。 metalog を使っているなら /var/log/mail/current に全て書きだされる。
    • main.cf の debug_peer_level と debug_peer_list を設定するとより詳細なログが得られる。
  • DB に配信先アドレスが登録されていない場合送信されない。 postfixadmin から送信先ドメイン&アドレスを作る。