Tips記事
» 2001年08月01日 00時00分 UPDATE

メールサーバを動かしたい〜Postfix編〜

[木田佳克,ITmedia]

 インターネット上でメールサーバ(MTA)ソフトといえば,Sendmailが最もスタンダードな存在である。しかし,柔軟な設定が可能な反面難解さがあり,中途半端な状態で動かしては自らセキュリティホールを作ってしまう。

 ここで紹介するPostfixは,設定の容易さとセキュリティ強化,高速化を持ち備えているSendmail互換のメールサーバ(Mail Transport Agent)だ。ほかにも最近ではqmailに人気が集まっているが,PostfixはSendmailとの互換性が高いため,qmailよりも移行が楽である。後述するが,/etc/aliasesファイルなどを共有できるのもメリットの1つだろう。

 まず最初に次のサイトから最新のソースをダウンロードしよう。

・国内のリングサーバ
ftp://ftp.ring.gr.jp/pub/net/mail/postfix/

 2001年8月1日現在,オフィシャルなリリースバージョンは2000年10月に公開された「postfix-20010228-pl03.tar.gz」だ。wgetなどでダウンロードをしたら,次のように操作しよう。

$ tar zxfv postfix-20010228-pl03.tar.gz
$ cd postfix-20010228-pl03
$ make

 次にユーザーとグループに「postfix」を作成しておこう。セキュリティ上,root権限でデーモン起動するのを避けるためだ。下記を見ると分かるように,ここでは「12345」という数値になっている。これは,ほかの行の数値と重ならないものであれば任意で構わない。

# vipw
〜中略〜

postfix:*:12345:12345:Postfix owner:/nonexistent:/sbin/nologin

〜中略〜

 続いて,/etc/groupファイルを編集してpostfixグループを作成する。ただし,現在公開中のバージョンでは「postdrop」のグループ名で作成する必要がある

# vi /etc/group
〜中略〜

postfix:*:12345:

〜中略〜
---------------------

# make install   ←ユーザーとグループを作成後に

 make installを実行すると,次のようにインストール先ディレクトリを問われる。ここでは,ディレクトリの基本ポリシーに沿いつつほぼ標準設定のまま次のようにしてみた。このインストール先は,後々起動時や設定時に必要になるため忘れないよう記録しておこう。

install_root: [/]
tempdir: [/tmp/release-20010228]
config_directory: [/etc/postfix]
daemon_directory: [/usr/postfix/bin]
command_directory: [/usr/postfix/bin]
queue_directory: [/var/spool/postfix]
sendmail_path: [/usr/sbin/sendmail]
newaliases_path: [/usr/bin/newaliases]
mailq_path: [/usr/bin/mailq]
mail_owner: [postfix]
setgid: [no] ← 現在のバージョンでは,setgid_group: [postdrop]
manpages: [/usr/local/man]

 Postfixの基本設定ファイルは,「config_directory」で指定したディレクトリ先に保存される。ここではセキュリティを確保しつつ動作するために必要な設定を挙げよう。

 メインとなるmain.cfファイルの設定は,自分の環境に沿って太字の個所が有効になっているよう確認すればよい。ここでは,DDNSのno-ip.comで取得した「yoshi.sytes.net」というドメイン名を基に設定している。

# vi /etc/postfix/main.cf
#
queue_directory = /var/spool/postfix
command_directory = /usr/postfix/bin
daemon_directory = /usr/postfix/bin
mail_owner = postfix
default_privs = nobody

#
myhostname = speed.yoshi.sytes.net
mydomain = yoshi.sytes.net
myorigin = yoshi.sytes.net
#myorigin = $mydomain

inet_interfaces = all
#inet_interfaces = $myhostname, localhost
#mydestination = $myhostname
#mydestination = $myhostname, localhost.$mydomain
mydestination = $myhostname, localhost.$mydomain $mydomain
# mail.$mydomain, www.$mydomain, ftp.$mydomain

#local_recipient_maps = $alias_maps unix:passwd.byname
#
#alias_maps = dbm:/etc/aliases
#alias_maps = hash:/etc/postfix/aliases
alias_maps = hash:/etc/aliases
#alias_maps = netinfo:/aliases

#alias_database = dbm:/etc/aliases
#alias_database = dbm:/etc/mail/aliases
alias_database = hash:/etc/aliases
#alias_database = hash:/etc/aliases, hash:/opt/majordomo/aliases

virtual_maps = hash:/etc/postfix/virtual
allow_mail_to_commands = alias,forward,include


# recipient_delimiter = +

# mail_spool_directory = /var/mail
mail_spool_directory = /var/spool/mail

#mailbox_command = /some/where/procmail
#mailbox_command = /some/where/procmail -a "$EXTENSION"
#mailbox_command = /usr/bin/procmail -a $DOMAIN -d $LOGNAME

#mailbox_transport = cyrus
#fallback_transport =

# luser_relay = $user@other.host
# luser_relay = $local@other.host
# luser_relay = admin+$local
#header_checks = regexp:/etc/postfix/filename
#header_checks = pcre:/etc/postfix/filename

#relay_domains = $mydestination

mynetworks = 192.168.0.0/24, 127.0.0.1/8
#mynetworks = $config_directory/mynetworks

#smtpd_banner = $myhostname ESMTP $mail_name
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version) (Vine Linux)

local_destination_concurrency_limit = 2
default_destination_concurrency_limit = 10


debug_peer_level = 2

# debug_peer_list = 127.0.0.1
# debug_peer_list = some.domain

#
debugger_command =
PATH=/usr/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5

# Other configurable parameters.

allow_percent_hack = no

 この中でも,ピンク字の「mynetworks」の個所は,リレーを許可するマシンを指定する設定になる。ここでは,インターネット上からのリレーは許可せず自分のLAN環境からのみ受け付けるようにしている。特に理由がない限り,外部からのリレーは許可すべきではないだろう。

 今回は触れないが,イエロー字の個所はバーチャルホストでメールを受け取る際の設定になる。また,Sendmail互換の.forwardを有効にする場合には,このように「allow_mail_to_commands」で定義しておかなければならない。

 以上の設定を終えたら,デーモン起動をさせてみよう。ディレクトリは,make installした際の「daemon_directory」になる。ここでは,「/usr/postfix/bin/」だ。また,Sendmailが起動していれば「/etc/rc.d/init.d/sendmail stop」または「ps ax」で停止させておく必要がある。

# /usr/postfix/bin/postfix start

 プロンプトからps axを実行してみて,次のようにプロセスが確認できればOKだ。

528 ? S  0:01 /usr/postfix/bin/master
534 ? S  1:34 qmgr -l -t fifo -u

 動作が確認できたら,「Eメールの不正中継がされていないかチェックしたい」Tipsを参考にして外部からのリレーチェックをしよう。全項目で「OK」が表示されれば問題がないだろう。

 最後にエイリアスについても触れておこう。次のように/etc/aliasesを編集してDBファイルを更新しておけば,特定のユーザー宛に幾つものアドレスから回送させることもできる。

# vi /etc/aliases
# Basic system aliases -- these MUST be present.
MAILER-DAEMON: postmaster
webmaster: ykida
postmaster: root
postfix: root

〜中略〜

# Person who should get root's mail
root: ykida
yoshi: ykida
speed: ykida

# newaliases ←データベースファイル更新のために忘れずに

 上記の例では,「root」や「webmaster」,「yoshi」,「speed」アカウント宛がすべてが「ykida」のメールボックスに回送される。

 ここまでで,メールサーバを動作させることができた。しかし,この状態はインターネット上でメールを受け渡しするための環境構築ができただけであり,パソコン上のOutlookやBekey!でメールを送受信することはできない。

 このためには,POPサーバと呼ばれるソフトウェアをさらにインストールする必要がある。詳しくは,「POPサーバでメールソフトから受信〜qpopperインストール〜」Tipsを参考にしてほしい。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ