はじめに
FreeBSD 4.9RにPostfixの最新版をportsからインストールするための手順について説明します。
本ページでは以下の機能を満たすような設定について紹介します。
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パッケージをインストールしてください。この作業方法については割愛します。
| *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は適当なエディタで作成します。
| postfix:*:27:27::0:0:Postfix Mail System:/var/spool/postfix:/sbin/nologin |
| 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の設定を行います。今回の設定例は以下の条件で行っています。
以下に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配下に実行属性をつけて保存します。
| #!/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でも基本は同じですので参考になるかと思います。
※コメント内にURLを書くとSPAM扱いとなります。2ch風に表記はOKです


