momoto.github.io

Postfix 2.6.6をCentOS 6にインストールする

 RHEL 6に標準で搭載されているPostfix 2.6.6をつかって、スタンドアロンのMTAを設定するまでの手順をまとめています。 OSはRHELクローンのCentOS 6.3を使用しています。

 注意点として、SMTPサーバが不正中継に利用されないように、リレー制限の慎重な設定が必要になります。 この記事ではサーバからメールを送信できることと、外部からメールをリレーできないことまでを確認します。 受け取ったメールの配送やメールボックスへのアクセス(POPやIMAP)については扱っていません。

1. postfixパッケージの確認

 postfixパッケージがシステムにインストールされているかどうか、をyum list installed postfixで確認します。 もし、インストールされていなければyum install postfixでインストールすることができます。 ソフトウェアライセンスはIPLになるので、 とくに商用利用の責任においてGPLと異なる部分があります。

$ yum list installed postfix

Installed Packages
postfix.x86_64                 2:2.6.6-2.2.el6_1                 @anaconda-CentOS-201207061011.x86_64/6.3

 postfixパッケージの設定ファイルはrpm -qc postfixで確認することができます。

表1 postfixパッケージの設定ファイル
ファイルの名前説明
/etc/pam.d/smtp.postfixPAM (Pluggable Authentication Modules)の設定
/etc/postfix/accessSMTPサーバのアクセステーブル
/etc/postfix/canonicalcanonicalテーブルの書式
/etc/postfix/genericgenericテーブルの書式
/etc/postfix/header_checks正規表現による内容検査の設定
/etc/postfix/main.cf基本的な設定
/etc/postfix/master.cfデーモンプロセスの定義
/etc/postfix/relocatedrelocatedテーブルの書式
/etc/postfix/transporttransportテーブルの書式
/etc/postfix/virtual仮想エイリアステーブルの書式
/etc/sasl2/smtpd.confCyrus SASLの設定

2. Postfixの設定

 用途に応じて設定を変更していきます。 設定できる項目は600以上あるようですが、単純な用途であれば、ほとんどの項目は初期値のまま利用できます。

表2 /etc/postfix/main.cfの基本的な設定
変数名初期値説明
myhostnamehostname.localdomainメールシステムのFQDN。この変数は他の多くの設定で参照されます。
mydomainlocaldomainメールシステムのインターネットドメイン名。この変数は他の多くの設定で参照されます。
myorigin$myhostnameメールシステムから送信されたメールにおいて、差出人のメールアドレスにつかわれるドメイン。
inet_interfacesallメールシステムが通信できるネットワークアドレス。ここで許可されていないアドレスとは、メールの受信も送信もできません。
mydestination$myhostname, localhost.$mydomain, localhostメールシステムに到達したメールにおいて、自分宛のメールとみなすドメインのリスト。
mynetworks127.0.0.0/8メールシステムがリレーを許可するSMTPクライアントのネットワークアドレスのリスト。

 現時点の設定はpostconfコマンドで確認することもできます。 オプションに-dを付けると設定の初期値、-nを付けると初期値から変更した設定だけを表示します。

3. Postfixの起動/再起動

 設定を変更した後は、postfix checkで設定や権限を検証し、サーバを起動または再起動して変更を反映させます。 postfix reloadでも設定を反映させることができますが、inet_interfacesなど一部設定の変更にはサーバ再起動が必要です。

$ sudo service postfix check
                                            [  OK  ]
$ sudo service postfix status
master is stopped
$ sudo service postfix start
Starting postfix:                           [  OK  ]

 サービスの自動起動を有効にする場合はchkconfigをつかいます。

$ chkconfig --list postfix
postfix         0:off   1:off   2:off   3:off   4:off   5:off   6:off
$ sudo chkconfig postfix on
$ chkconfig --list postfix
postfix         0:off   1:off   2:on    3:on    4:on    5:on    6:off

4. メールの送信テスト

4-1. Sendmail互換インタフェース

 PostfixのSendmail互換インタフェースをつかって、メールサーバのホストからメールを送信してみます。 Sendmail互換インタフェースのパスはsendmail_pathで設定されています。

$ sendmail somebody@example.com
from: user@hostname.localdomain
to: somebody@example.com
subject: test email

this is a test message.
.

 送信したメールのログは/var/log/maillogから、ローカルのメールボックスへ配送されたメールは/var/mail/{ユーザ名}(mail_spool_directory)から確認することができます。

4-2. Telnet

 Telnetをつかって、mynetworksで指定していないネットワークアドレスから、relay_domains (mydestination)にないドメインへメールをリレーできないことを確認します。

$ telnet <SMTP_HOST> 25
Trying <SMTP_HOST>...
Connected to <SMTP_HOST>.
Escape character is '^]'.
220 hostname.localdomain ESMTP Postfix
HELO hostname.localdomain
250 hostname.localdomain
MAIL FROM: user@hostname.localdomain
250 2.1.0 Ok
RCPT TO: somebody@example.com
554 5.7.1 <somebody@example.com>: Relay access denied

 この例では、SMTP応答コード554 (Transaction failed)を返されて、リレーが失敗しています。

 オープンリレーとなっていないかどうかの確認はRBL.JPThird Party Relay Checkからも確認することができます。

参考