Linux

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

[!NOTE]
この記事は 2013/11/23 に momoto.github.io へ投稿した内容を Qiita へ移行してきたものです

 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.postfix PAM (Pluggable Authentication Modules) の設定
/etc/postfix/access SMTPサーバのアクセステーブル
/etc/postfix/canonical canonicalテーブルの書式
/etc/postfix/generic genericテーブルの書式
/etc/postfix/header_checks 正規表現による内容検査の設定
/etc/postfix/main.cf 基本的な設定
/etc/postfix/master.cf デーモンプロセスの定義
/etc/postfix/relocated relocatedテーブルの書式
/etc/postfix/transport transportテーブルの書式
/etc/postfix/virtual 仮想エイリアステーブルの書式
/etc/sasl2/smtpd.conf Cyrus SASLの設定

2. Postfixの設定

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

表2 /etc/postfix/main.cf の基本的な設定

変数名 初期値 説明
myhostname hostname.localdomain メールシステムのFQDN。この変数は他の多くの設定で参照されます
mydomain localdomain メールシステムのインターネットドメイン名。この変数は他の多くの設定で参照されます
myorigin \$myhostname メールシステムから送信されたメールにおいて、差出人のメールアドレスにつかわれるドメイン
inet_interfaces all メールシステムが通信できるネットワークアドレス。ここで許可されていないアドレスとは、メールの受信も送信もできません
mydestination \$myhostname, localhost.\$mydomain, localhost メールシステムに到達したメールにおいて、自分宛のメールとみなすドメインのリスト
mynetworks 127.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
$ 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
$ 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 からも確認することができます。

参考