PostfixのSMTP認証の設定

カテゴリ:メールサーバ

SMTP認証は、認証に成功したユーザーのみにオープンリレーを許可する仕組みです。
これによりスパムメールの踏み台にされることを防止します。

PostfixでSMTP認証を行うためには、以下の設定を実施します。

saslauthdのインストール

yumコマンドでsaslauthdをインストールします。
# yum -y install cyrus-sasl

saslauthdのの設定

PAM認証の場合

saslauthdの設定(/etc/sasl2/smtpd.conf)は、UNIXユーザーで認証(初期設定はPAM認証)する場合は、以下の初期設定のままで問題ありません。
※仮想ドメイン(マルチドメイン)でSMTP認証を行う場合は、PAM認証にする必要があります。
pwcheck_method: saslauthd
mech_list: plain login
PAM認証であるかは、/etc/sysconfig/saslauthd ファイルで確認できます。
以下のようにMECH=pamであればPAM認証です。
※CentOSではPAM認証がデフォルトのはずです。
MECH=pam

sasldbによる認証の場合

sasldbで認証する場合は、pwcheck_method: に auxprop を指定します。
pwcheck_method: auxprop
mech_list: plain login

SMTP認証のためのmain.cfの設定

/etc/postfix/main.cf ファイルにSMTP認証関連のパラメータを設定します。

smtpd_sasl_auth_enable

SMTP認証を使用するかどうかの設定です。使用する場合はyesを設定します。
自分が不特定のIPアドレスからVPS経由でメールを配送したい場合は、必ずSMTP認証を有効にします。
smtpd_sasl_auth_enable = yes

smtpd_sasl_local_domain

PAM認証の場合

仮想ドメイン環境など、PAM認証を使用する場合は値を無し(NULL)にします。
smtpd_sasl_local_domain=

sasldbによる認証の場合

SASLの認証を有効にするドメインを指定します。
但しドメインは1つしか指定できません。
また、後述するSASLユーザーの登録時に指定するドメインと、ここで指定するドメイン(この例では myhostname に指定されているドメイン)が同一でなければ認証に失敗します。
そのため、マルチドメイン環境では、sasldbによる認証は使用できないのです。
smtpd_sasl_local_domain=$myhostname

smtpd_recipient_restrictions

受信者制限です。permit_sasl_authenticated と permit_inet_interfaces を追加します。
このパラメータは左から順番に判定して行き、条件に一致した時点で終了(許可か拒否かを決定)します。
smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated permit_inet_interfaces reject_unauth_destination

broken_sasl_auth_clients

古いバージョンのAUTHコマンドを有効にする場合はyesにします。
broken_sasl_auth_clients = yes

smtpd_sasl_security_options

anonymousでのSMTP認証を拒否します。
smtpd_sasl_security_options=noanonymous

postconfコマンドを使用して設定する場合

なお、main.cfを直接編集せずに、postconfコマンドを使用して同様の設定を行う場合は、以下を実行します。
# postconf -e smtpd_sasl_auth_enable=yes
# postconf -e smtpd_sasl_local_domain=$myhostname
# postconf -e 'smtpd_recipient_restrictions=permit_mynetworks permit_sasl_authenticated permit_inet_interfaces reject_unauth_destination'
# postconf -e smtpd_sasl_security_options=noanonymous

sasldb関連の設定(sasldbによる認証の場合のみ)

SASL2のユーザー、パスワードを作成

以下のコマンドでSMTP認証を行うドメインとユーザー、パスワードを作成します。

saslpasswd2 -u ドメイン名 -c ユーザー名

以下の例では、example.com ドメインの hoge ユーザーを作成しています。
# saslpasswd2 -u example.com -c hoge
Password:
Again (for verification):
※パスワードは2回入力します。
※ドメイン名は main.cf の smtpd_sasl_local_domain パラメータに指定したもの(この例ではmyhostname)と同一のドメインを指定する必要があります。つまり、この例は $myhostname に example.com が指定されている場合を想定したものです。

作成したユーザーを確認

以下のコマンドで作成したSMTP認証のユーザーとドメインを確認できます。
# sasldblistusers2
hoge@example.com: userPassword

dbのパーミッションを設定

作成したデータベースファイルのパーミッションを設定します。
この設定は重要です。
# chgrp postfix /etc/sasldb2
# chmod 640 /etc/sasldb2

saslauthdの開始と自動起動

以下のコマンドでsaslauthdの自動起動を有効にした上で、開始します。
# chkconfig saslauthd on
# service saslauthd start
CentOS 7 以降の場合:
# systemctl enable saslauthd
# systemctl start saslauthd

Postfixの設定のリロード

Postfixをリロードして設定を反映します。
# postfix reload
CentOS 7 以降の場合:
# systemctl reload postfix

動作の確認方法

/etc/postfix/master.cf ファイルの smtp の行の stmpd の後ろに「-v」を付けて詳細ログを出力するように設定し、"postfix reload" で設定を反映させます。
※サブミッションポートで待ち受けている場合は submission の行に追加します。
smtp      inet  n       -       n       -       -       smtpd -v
メーラーでSMTP認証を有効にして外部ドメインへのリレーが許可される事を確認します。
SMTP認証に成功した場合、maillog に「name=permit_sasl_authenticated status=1」が記録されます。
Sep 30 05:47:29 centos64 postfix/smtpd[3300]: >>> START Recipient address RESTRICTIONS <<<
Sep 30 05:47:29 centos64 postfix/smtpd[3300]: generic_checks: name=permit_sasl_authenticated
Sep 30 05:47:29 centos64 postfix/smtpd[3300]: generic_checks: name=permit_sasl_authenticated status=1
次にSMTP認証を無効にした状態で外部ドメイン宛に送信し、リレーが拒否される事を確認します。
SMTP認証に失敗した場合、maillog に「name=permit_sasl_authenticated status=0」が記録されます。
また、「name=reject_unauth_destination status=2」は smtpd_recipient_restrictions の reject_unauth_destination に一致して拒否した事を示します。
Sep 30 05:46:58 centos64 postfix/smtpd[3300]: >>> START Recipient address RESTRICTIONS <<<
Sep 30 05:46:58 centos64 postfix/smtpd[3300]: generic_checks: name=permit_sasl_authenticated
Sep 30 05:46:58 centos64 postfix/smtpd[3300]: generic_checks: name=permit_sasl_authenticated status=0
...
Sep 30 05:46:58 centos64 postfix/smtpd[3300]: NOQUEUE: reject: RCPT from unknown[192.168.126.1]: 554 5.7.1 : Relay access denied; from= to= proto=ESMTP helo=<[192.168.126.1]>
Sep 30 05:46:58 centos64 postfix/smtpd[3300]: generic_checks: name=reject_unauth_destination status=2
このログでの検証は運用前に確実に実施しておきましょう。
SMTP認証に成功した場合(自分)は他のドメインにリレー出来ること、SMTP認証がされていない場合(自分以外、つまりスパマー)は他のドメインに絶対にリレー出来ないこと(踏み台にされないこと)を確認しておきます。
特に後者は重要です。
自分はスパムメールを一切送信していないにも関わらず、大量のスパムを送りつけてくる最悪のMTAになってしまいます。
これがオープンリレーの怖いところです。
更に、メールレピュテーションサービス(MTAのブラックリスト)に登録され、スパム配送元として扱われる可能性があります。
一旦データベースに登録されると解除してもらうのは容易ではないため、IPアドレスを変更するためにVPSを再度契約し直す必要が出てくる場合もあります。

公開日時: 2014年07月20日  23:48:08

メールサーバに戻る

このページのトップに戻る