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

> [!NOTE]
> この記事は 2013/11/23 に [momoto.github.io](http://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](https://www.gnu.org/copyleft/gpl.html) と異なる部分があります。

```shell-session
$ 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` で確認することができます。

**表１** 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 以上あるようですが、単純な用途であれば、ほとんどの項目は初期値のまま利用できます。

**表２** /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` など一部設定の変更にはサーバ再起動が必要です。

```shell-session
$ sudo service postfix check
                                            [  OK  ]
$ sudo service postfix status
master is stopped
$ sudo service postfix start
Starting postfix:                           [  OK  ]
```

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

```shell-session
$ 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` で設定されています。

```shell-session: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) にないドメインへメールをリレーできないことを確認します。

```shell-session: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.JP](http://www.rbl.jp) の [Third Party Relay Check](http://www.rbl.jp/svcheck.php) からも確認することができます。

## 参考

- [メールサーバー – Red Hat Customer Portal](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/ch-mail_servers)
- [Postfix – Red Hat Customer Portal](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/managing_confined_services/chap-managing_confined_services-postfix)
- [Postfix Standard Configuration Examples](http://www.postfix.org/STANDARD_CONFIGURATION_README.html)
- [Postfix 標準設定の例 (2.3.x)](http://www.postfix-jp.info/trans-2.3/jhtml/STANDARD_CONFIGURATION_README.html)