Postfixの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