Postfix

2008年03月04日
PostfixWikipedia検索 は Unix の MTA (Mail Transfer Agent) として広く使われている sendmail との操作互換性を保ち ながらより高いパフォーマンスとセキュリティを持った MTA です。sendmail より柔軟 性も高く設定が簡単です。

準備

Postfix をインストールする前に Postfix を実行するユーザとグループを作成しておく 必要があります。

# groupadd postfix
# groupadd postdrop
# useradd -g postfix -s /bin/false postfix

エイリアスファイルや仮想エイリアスファイルで使用する Berkeley DB をあらかじめインストール しておく必要があります。これがインストールされていないとエイリアスデータベース で hash: や btree: が使用できません (dbm: で十分という場合には不要ですが)。

また LDAP や TSL を使用する場合にも必要なライブラリをあらかじめインストール しておく必要があります。

ソースビルドとインストール

ビルド

Postfix の公式サイトから Stable Release の最新版 (現在 2.5) をダウンロードして解凍します。

# gzip -d postfix-2.5.1.tar.gz
# tar xvf postfix-2.5.1.tar
# cd postfix-2.5.1

次にビルドを行います (tidy は clean と同意です)。

# make tidy
# make makefiles OPT="-O2" DEBUG=""\
   CCARGS="-DHAS_DB -I/opt/sfw/include"\
   AUXLIBS="-L/opt/sfw/lib -ldb"
# make

上記は Solaris 10 の Companion DVD から Berkeley DB を追加した場合の実行です。 実行環境に合わせて db.h, libdb.so の存在するディレクトリに書き 換えてください。

また LDAP や TSL 対応の Postfix をビルドする場合にはそれらのディレクトリも追加してください。

ビルドが完了したら以下のコマンドを実行して Berkeley DB が利用可能で あることを確認してください。btree, hash が Berkeley DB を使用する形式です。

# bin/postconf -m
btree
cidr
dbm
environ
hash
nis
nisplus
proxy
regexp
static
unix

「重大なエラー: libdb-x.x.so: open に失敗しました: ファイルもディレクトリも ありません。」と出る場合はライブラリディレクトリが検索パスに登録されていません。 Solaris の場合は crle コマンドなどでライブラリパスに登録してください。

インストール

make install でインストールを開始しますがこの作業は sendmil のモジュールや設定を上書きします。 途中でインストール先のディレクトリや 実行ユーザなどを問い合わせて来るので適当に入力してください (大抵はデフォルト でかまわないですが)。

# make install
install_root: [/]
...

セットアップと起動/終了

例として以下の想定で設定を行います。

user@safran.moyo.biz
user@moyo.biz
user が示すユーザのメールを受信
postmaster@lab.moyo.biz 受信したメールをユーザ foo のメールボックスに保存

/etc/postfix/main.cf

まず /etc/postfix/main.cf を編集してメールの受信方法を定義します。

main.cf
myhostname = safran.moyo.biz
mydomain = moyo.biz
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname,localhost.$mydomain,localhost,$mydomain,lab.moyo.biz
mynetworks = 192.168.101.0/24,127.0.0.0/8
alias_maps = hash:/etc/mail/aliases
virtual_alias_domain = lab.moyo.biz
virtual_alias_maps = hash:/etc/postfix/virtual

hash: と書かれているものは Berkeley DB を使用したデータベース形式のファイルで あることを意味します。使用可能なデータベースタイプは postconf -m で表示するこ とが出来ます。

各項目はそれぞれ以下のような意味を持ちます。

myhostname このホストの名前。
mydomain このホストのドメイン名。
inet_interface メールを受信するネットワークインターフェース。
mydestination このホストを終点とみなすホスト/ドメイン名。
mynetworks このホストのネットワーク。この範囲からのメールはリレー可能。
alias_maps エイリアスマップのデータベース。
virtual_alias_domain 仮想エイリアスマップを適用するドメイン名。
virtual_alias_maps 仮想エイリアスマップのデータベース。

mydestination にリストされていないアドレスのメールを受信した場合はリレーを 意図したものとして拒否されるので注意してください。lab.moyo.biz は仮想エイ リアスを使用しますので virtual_alias_domain に指定します。

/etc/postfix/virtual

仮想ホストに宛てられたメールを実アドレスにマップするには /etc/postfix/virtual を使用します。以下は postmaster@lab.moyo.biz 宛てメールのエイリアスを定義して います。

virtual
postmaster@lab.moyo.biz foo@moyo.biz

postmap を実行すると virtual.db というファイルが作成されます。

# postmap hash:/etc/postfix/virtual

/etc/mail/aliases

エイリアスを実際のユーザに宛てたり、受信したメールをスクリプトなどに渡す場合は /etc/mail/aliases で定義します (私の環境では存在しなかったため /etc/postfix/aliases へシンボリックリンクを作成しました)。修正後は postalias コマンドで aliases.db ファイルを作成してください。

# postalias hash:/etc/mail/aliases

newaliases コマンドでも良いような紹介も多いですが、sendmail の newalias コマンドが使われてうまく行かない事もあります。Postfix が前提なら明示的に postalias を使っておいてください。

起動と終了

セットアップが終了したら start コマンドを指定して Postfix を起動してください。 成功すれば SMTP ポートが LISTEN 状態になります。

# /usr/sbin/postfix start
postfix/postfix-script: starting the Postfix mail system
# netstat -a | grep smtp
      *.smtp               *.*                0      0 49152      0 LISTEN
#

Postfix はいくつかのコア機能が常駐しながら動作するため、正しく起動したように 見えても syslog に警告が出ることがあるためしばらく syslog を監視してください。

Postfix を停止するには stop コマンドを指定します。

# /usr/sbin/postfix stop
postfix/postfix-script: stopping the Postfix mail system
# netstat -a | grep smtp
# 

後は Postfix を起動して内部・外部からのメールが意図した通りにやり取りされるか を確認してください。もちろん DNS の A Record や MX Record の見直しも忘れない ように。

一通り動作確認が終了したら ABUSE テストサイト で不正中継に使用されないことも確認してください。

CVS 2008/08/18