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