2004/2/ 2

Postfixの設定(Mail)

はじめに

FreeBSD 4.9RにPostfixの最新版をportsからインストールするための手順について説明します。
本ページでは以下の機能を満たすような設定について紹介します。

  • 複数ドメインのメールの送受信を行う
  • 全てのメールをリレーではなくローカル配信を行う
  • sendmailで言うvirtusertablesを使用した、メールアドレス単位に指定したユーザアカウントに対する配送制御を行う

mailwrapperのシンボリックリンクの確認

FreeBSDに最新のsendmailをportsとかではなく、本家等から落としてきてインストールした場合、/usr/bin/newaliasesがmailwrapperのシンボリックリンクではなくsendmailの実体にリンクされてしまいます。

# ls -l /usr/bin/newaliases
lrwxr-xr-x 1 root wheel 30 2 1 23:06 /usr/bin/newaliases -> /usr/libexec/sendmail/sendmail

もし、Postfixで使用するaliasファイルをsendmailと共有するのであれば上記のままで問題ありませんが、どちらにしてもPostfixの設定で変えられるので、FreeBSDのインストール時の状態に戻しておきます。

# rm /usr/bin/newaliases
# ln -s /usr/sbin/mailwrapper /usr/bin/newaliases

portsを最新にする

今回Postfixはportsからインストールします。現時点の最新版のソースを取得するために、/usr/ports配下を最新にしておきます。
以下のファイルを適当なディレクトリに作成し、cvsup filenameで更新作業を行います。cvsupがインストールされていない場合には先ずパッケージからcvsupパッケージをインストールしてください。この作業方法については割愛します。

[ports.cvs]
*default host=cvsup.jp.freebsd.org
*default base=/usr/local/etc/cvsup
*default prefix=/usr
*default release=cvs tag=.
*default delete use-rel-suffix
*default compress
ports-all

私が落としてきた時は「postfix-2.0.16.20031223,2」でした。これをベースに説明しますが、これより新しくても基本的には同じ設定でいけると思います。

専用ユーザIDとグループの作成

portsからPostfixをインストールする前に専用のユーザIDとグループを作成しましょう。portsのinstall時に自動的にユーザを作成する事も出来ますが、UID,GIDが大きい番号(一般ユーザと同じ系列の番号)になってしまい、私は気に入らないので事前に作成しました。
ユーザIDはvipwで、グループIDは適当なエディタで作成します。

[/etc/passwd]
postfix:*:27:27::0:0:Postfix Mail System:/var/spool/postfix:/sbin/nologin

[/etc/group]
postfix:*:27:
maildrop:*:28:

mailer.confの退避

これも、portsからPostfixをインストール時に/etc/mail/mailer.confを上書きする前にバックアップファイルを作成してくれますが、一応分かりやすい名前でsendmail用の設定を保存する意味でバックアップを取っておきます。

# cp /etc/mail/mailer.conf /etc/mail/mailer.conf.sendmail

sendmailデーモンの停止

そろそろsendmailを停止しましょう。これから暫くはメールの送受信は行えないのでご注意を。
まずは現在動作中のsendmailを以下のコマンドで停止します。

# sh /etc/rc.sendmail stop

続いて、/etc/rc.confのsendmail_enableの行を以下のように修正します

[/etc/rc.conf]
sendmail_enable="NONE"

Postfixのビルド、インストール

/usr/ports/mail/postfix-currentに移動してmakeを実行します。

# cd /usr/ports/mail/postfix-current/
# make

最初にコンパイルオプションで色々選択項目が出ますが、特に何も指定せずにOKで大丈夫です。

コンパイルが終了したらmake installでインストールします。
インストール時に/etc/mailer.confを設定するか聞いてきますが、これはYESでもNOでもいいです。後で説明します。

インストールディレクトリは以下のようになっています。

実行ファイル /usr/local/bin (ツール類)
/usr/local/sbin (デーモン類)
設定ファイル /usr/local/etc/postfix

mailer.confの設定

/etc/mail/mailerconfを以下の様に設定します。

[/etc/mail/mailer.conf]
#
# Execute the Postfix sendmail program, named /usr/local/sbin/sendmail
#
sendmail /usr/local/sbin/sendmail
send-mail /usr/local/sbin/sendmail
mailq /usr/local/sbin/sendmail
newaliases /usr/local/sbin/sendmail

一応このファイルを/etc/mail/mailer.conf.postfixにもコピーしておきましょう。後々MTAをsendmailに戻すときに楽です。

postfixの基本設定(main.cf)

/usr/local/etc/postfix/main.cfの設定を行います。今回の設定例は以下の条件で行っています。

  • 基本となるドメイン名はhijiki.net
  • 本サーバでxxx@hijiki.netのメールを受け取る
  • ローカルホスト用のDNSサーバは運用していない
  • 他にyotan.homeunix.net宛のメールも受け取る
  • docomo宛のメールはプロバイダのMTAにリレーする
  • メールアドレス毎にローカル配送するアカウントを指定する(virtual機能)

以下にmain.cfの設定例を示します。設定内容がよく分かっていないものはコメントがありません汗

[/usr/local/etc/postfix/main.cf]
myhostname = hijiki.net #基本ホスト名
mydomain = hijiki.net #基本ドメイン名
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, yotan.homeunix.net #hijiki.netとyotan.homeunix.netのメールを受け取る
alias_maps = hash:/usr/local/etc/postfix/aliases #aliasesはpostfixのものを使用。/etc/mail/aliasesでもOK
alias_database = hash:/usr/local/etc/postfix/aliases
allow_mail_to_commands = alias,forward,include
mynetworks_style = subnet #ローカルネットワークからのみ配信を許容
mail_owner = postfix
setgid_group = maildrop
unknown_local_recipient_reject_code = 450
virtual_alias_maps = hash:/usr/local/etc/postfix/virtual #virtual機能を使う
virtual_alias_domains =
transport_maps = hash:/usr/local/etc/postfix/transport #特定ドメインのメール配信機能を使う

sendmail_path = /usr/local/sbin/sendmail
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
mail_spool_directory = /var/mail
daemon_directory = /usr/local/libexec/postfix
command_directory = /usr/local/sbin
queue_directory = /var/spool/postfix
manpage_directory = /usr/local/man
readme_directory = no
sample_directory = /usr/local/etc/postfix

Postfixのvirtual設定(virtual)

複数ドメインを受信できるようにmain.cfを設定したので、それぞれのドメイン毎のメールアドレスをローカルアカウントのどれで受信するか振り分ける設定をします。

設定ファイルは/usr/local/etc/postfix/virtualです。書式は一行目が「ドメイン名 適当な文字列」となって、二行目以降にそのドメイン内のメールアドレスの一覧を「メールアドレス アカウント名」で指定します。次のドメインを設定する時には再び一行目に書いた記述から始めます。

[/usr/local/etc/postfix/virtual]
hijiki.net anything
yotan@hijiki.net user1
info@hijiki.net user1
webmaster@hijiki.net user1

yotan.homeunix.net anything
yotan@yotan.homeunix.net user2

上記の例ではローカルアカウントがuser1,user2とあり、それぞれにメールを割り振っています。

注意点として、以下の設定のように、基本ドメインのメールアドレスの@よりも前の部分と、ローカルアカウント名が同一だとうまく振り分けが行えません。これは一度virtualテーブルで変換した振り分け先のアドレスを更にvirtualテーブルを参照して(基本ドメイン名を付与した上で)更に振り分け処理を行うためと思われます。

[virtual(悪い例)]
hijiki.net anything
yotan@hijiki.net user1

yotan.homeunix.net anything
yotan@yotan.homeunix.net yotan

上記設定で、yotan@yotan.homeunix.netにメールを送ると、yotanに届かずに、user1にメールが届きます。この点がsendmailと違うのでローカルアカウント名を追加して振り分け設定を行う際は注意してください。

さて、virtualファイルの作成が終わったら、main.cfでhash指定をしているので以下のコマンドでハッシュテーブルの作成を行います。

# postmap /usr/local/etc/postfix/virtual

一応/usr/local/etc/postfix/virtual.dbが作成されているのを確認しましょう。

Postfixの転送設定(transport)

docomo.ne.jp宛のメールは有名どころのMTAからのメールしか受信できない場合があります。これはSPAMメール撲滅の為にDoCoMoがやっている処置です。

自前のMTAから直接docomo.ne.jpに送っても届かない事があるので、自分が加入しているプロバイダに一度転送して、そっちから送ってもらうとうまくいく場合が多いです。

main.cfでtransport設定をしたので、/usr/local/etc/postfix/transportファイルを以下の様に設定します。

[/usr/local/etc/postfix/transport]
docomo.ne.jp :[あなたが加入しているプロバイダのSMTPサーバ名]
.docomo.ne.jp :[あなたが加入しているプロバイダのSMTPサーバ名]

ファイルの作成が済んだらpostmapを実行します

# postmap /usr/local/etc/postfix/transport

transport.dbが作成されるのを確認します。

Postfixのaliases設定(aliases)

main.cfでaliasesを/usr/local/etc/postfix/aliasesを使用するように指定した場合、既にsendmail時代に/etc/aliases(/etc/mail/aliases)で追加した行をコピーしてきます。

また、root宛のメールは普段自分が受信するアカウントに転送指定をしましょう。

もし、/etc/aliasesをそのまま使う際には以下の行を加えておきましょう。

[/etc/mail/aliases]
postfix : root

aliasesのハッシュテーブルの作成はsendmailと同じでnewaliasesです。これはpostfixに入ってたものでも、sendmailのnewaliasesでも同じ処理を行います。

Postfixの起動

さて、いよいよ起動です。以下のコマンドで起動します。

# postfix start

無事起動したら色々メールの送受信を試して確認します。

main.cfを修正したり、各種ハッシュテーブルの更新を即時行いたいときには以下のコマンドでPostfixをリロードします。

# postfix reload

起動スクリプトの作成

システム起動時に自動的にPostfixが起動するようにスクリプトを書きます。
スクリプトは/usr/local/etc/rc.d配下に実行属性をつけて保存します。

[/usr/local/etc/rc.d/postfix.sh]
#!/bin/sh

case "$1" in
start)
[ -x /usr/local/sbin/postfix ] && /usr/local/sbin/postfix start > /dev/null && echo -n ' postfix'
;;
stop)
[ -x /usr/local/sbin/postfix ] && /usr/local/sbin/postfix stop > /dev/null && echo -n ' postfix'
;;
*)
echo "Usage: `basename $0` {start|stop}" >&2
;;
esac

exit 0

おわりに

簡単ですが、FreeBSDに特化したPostfixの設定例を示しました。
家庭内サーバを外部に公開している場合で複数ドメインを持っている方には有用な資料ではないかと思います。
インストールディレクトリや起動スクリプト等の部分を除けば、Linuxでも基本は同じですので参考になるかと思います。

投稿者 yotan : 2004年2月 2日 10:29| トラックバック(0)
アンケート
このエントリは・・・
とても役に立った
役に立った
どちらとも言えない
あまり役に立たなかった
全く役に立たなかった
コメント
コメントする

※コメント内にURLを書くとSPAM扱いとなります。2ch風に表記はOKです










名前、アドレスを登録しますか?