[!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 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.JP の Third Party Relay Check からも確認することができます。