●7.メール送信時の認証追加(SASL認証)

7.メール送信時の認証追加(SASL認証)

古いメールシステムは送信時にはユーザ認証が行われませんでした(もちろん受信時には認証が必要です)。

しかしながら、送信時認証が行われないシステムはSPAMメールの踏み台にされてしまいます。

セキュリティを上げるために、saslを導入し送信時にもユーザ認証が行われるようpostfixを修正します。

SASL とは?

まず、SASLが何なのかということを、さらっと確認しておきましょう。

SASLとは、「Simple Authentication and Security Layer」の略で、 その名の通り、認証やセキュリティに関する処理(暗号化など)を行うための層です。

SASLを使用するアプリケーションなどは、 実際に使われる認証方式のことはSASLにまかせてしまうことで、 特定の認証方式に縛られなくて済むようになります。

具体的には、postfix や dovecot、svnserve など、様々なアプリケーションが、 SASLを使って認証を行うようになっています。


●saslパッケージのインストール

[root@cs7sv31 new]# yum -y install cyrus-sasl
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp.riken.jp
* extras: ftp.riken.jp
* updates: ftp.riken.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ cyrus-sasl.x86_64 0:2.1.26-17.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
Package             アーキテクチャー
                                     バージョン             リポジトリー   容量
================================================================================
インストール中:
cyrus-sasl          x86_64          2.1.26-17.el7          base           87 k

トランザクションの要約
================================================================================
インストール  1 パッケージ

総ダウンロード容量: 87 k
インストール容量: 141 k
Downloading packages:
cyrus-sasl-2.1.26-17.el7.x86_64.rpm                        |  87 kB   00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : cyrus-sasl-2.1.26-17.el7.x86_64                 1/1
  検証中                  : cyrus-sasl-2.1.26-17.el7.x86_64                 1/1

インストール:
  cyrus-sasl.x86_64 0:2.1.26-17.el7

完了しました!
[root@cs7sv31 new]#



●sasl認証の設定

/etc/postfix/main.cf の最後に追加

メール送信時にアカウント名・パスワードをサーバに通知しメールサーバから認証を受ける(SASL認証)
smtpd_sasl_auth_enable = yes

sasl認証に対応していないメーラは拒否
broken_sasl_auth_clients = yes

クライアントに対しての認証設定
smtpd_sasl_security_options = noanonymous

認証に使用するサーバを指定
smtpd_sasl_local_domain = $mydomain
            または (*1)
smtpd_sasl_local_domain = $myhostname
*1:メールアドレスの「@」以降の部分(当サイトであれば「kajuhome.com」に当たる)によって変更する。
(SMTP認証に失敗する場合に切り替えて見てください。)

ホストの接続に関する設定(SPAM拒否設定)
smtpd_client_restrictions = permit_mynetworks,
                            reject_rbl_client relays.ordb.org,
                            permit
smtpd_client_restrictions 属性の「relays.ordb.org」について
RBLサイト"relays.ordb.org" は 2006年12月にサービスが停止した為、メールログ「/var/log/maillog」に以下の様な
「relays.ordb.org」接続エラーが多数でる様になりました。

Jan  4 03:54:34 fedora postfix/smtpd[24034]: warning: 164.68.9.218.relays.ordb.org: RBL lookup error:
Host or domain name not found. Name service error for name=164.68.9.218.relays.ordb.org type=A:
Host not found, try again

RBLサイトを以下のように変更して下さい。
ホストの接続に関しての設定
smtpd_client_restrictions = permit_mynetworks,
                            reject_rhsbl_client rhsbl.ahbl.org,
                            reject_rbl_client spamcop.net,
                            reject_rbl_client dynablock.wirehub.net,
                            reject_rbl_client sbl.spamhaus.org,
                            reject_unknown_client,
                            permit

    permit_mynetworks    :クライアントIPが $mynetworks に属していた場合は要求を許可する
    reject_rbl_client    :RBLサイトに登録されているブラックサイトを拒否
    reject_unknown_client:クライアントIPが DNS に PTR レコードを持たない場合等に要求を拒否

メール中継の設定
smtpd_recipient_restrictions = permit_mynetworks,
                               permit_sasl_authenticated,
                               reject_unauth_destination

    permit_sasl_authenticated:SMTP_AUTHに認証されたクライアントを許可
    reject_unauth_destination:以下のアドレスにマッチするものは許可
                                   $inet_interfaces
                                   $mydestination
                                   $virtual_alias_domains
                                   $virtual_mailbox_domains
                               以下のドメイン・サブドメインは許可
                                   $relay_domains
                               上記以外は全て拒否

MAIL FROM コマンドの送信者アドレスを制限
smtpd_sender_restrictions = reject_unknown_sender_domain
    reject_unknown_sender_domain:送信者のメールアドレスが DNS の Aレコードや MXレコードを持たない場合は拒否


●設定値の確認(main.cfの最後30行)

[root@cs7sv31 postfix]# tail -30 /etc/postfix/main.cf
sample_directory = /usr/share/doc/postfix-2.10.1/samples

# readme_directory: The location of the Postfix README files.
#
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES

#relayhost = [smtp.gmail.com]:587

# SMTP-Auth(sasl) parameters
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain = $mydomain
smtpd_client_restrictions = permit_mynetworks,
                            reject_rhsbl_client rhsbl.ahbl.org,
                            reject_rbl_client spamcop.net,
                            reject_rbl_client dynablock.wirehub.net,
                            reject_rbl_client sbl.spamhaus.org,
                            reject_unknown_client,
                            permit
smtpd_recipient_restrictions = permit_mynetworks,
                               permit_sasl_authenticated,
                               reject_unauth_destination
smtpd_sender_restrictions = reject_unknown_sender_domain

# TLS parameters
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem
smtpd_tls_key_file = /etc/pki/tls/private/postfix.key
smtpd_tls_security_level = may
[root@cs7sv31 postfix]#



●SMTP-Authユーザーとパスワードの設定             ← 重要

Linux既存のアカウントとSMTP-Authパスワードを別にする場合です。

SMTP-Authパスワードを明示的に設定したい場合に有効です。(推奨)


【Fedora14以降 / CentOS6以降 の場合】
設定ファイルの変更
# vi /etc/sasl2/smtpd.conf

#pwcheck_method: auxprop
#mech_list: plain login
pwcheck_method: auxprop


Linux既存ユーザに対してSMTP-Auth(送信認証)パスワード設定する。
# saslpasswd2 -u west31.kanatech31.ac.jp -c mitsuya
パスワードを入力
Password:
確認入力(上記のパスワードと同じ物を入れる)
Again (for verification):

SMTP-Authユーザの確認
# sasldblistusers2
mitsuya@west31.kanatech31.ac.jp: userPassword


sasldb2のパーミッション・グループを変更(最初に一度だけ設定)する。
sasldb2の確認
# ll /etc/sasldb2
-rw-------  1 root root 12288  7月 21 05:21 /etc/sasldb2
    ↑              ↑
グループ読取(なし)    グループ(root)

パーミッション変更
# chmod 640 /etc/sasldb2

グループ変更
# chgrp postfix /etc/sasldb2

sasldb2の確認
# ll /etc/sasldb2
-rw-r-----  1 root postfix 12288  7月 21 05:21 /etc/sasldb2


●サービスの再起動

# systemctl start saslauthd.service

# systemctl restart postfix.service


●メールクライアントの設定

「SMTPサーバは認証が必要」にチェックを入れIDとパスワードを設定します。






●メール送信時に以下のメッセージが表示されメール送信できない場合

warning: xsasl_cyrus_server_get_mechanism_list: no applicable SASL mechanisms
fatal: no SASL authentication mechanisms
warning: process /usr/libexec/postfix/smtpd pid 2976 exit status 1
warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling

「smtpd.conf」の以下部分を再確認して下さい。

先頭に「#」を付けてコメント化
#mech_list: plain login