■SMTP-AUTHを設定
SMTP-AUTH は、SMTP Authentication の略。
SMTP-AUTH の実現には、SASL(Simple Authentication and Security Layer)という認証システムを提供するライブラリが必要になります。
現状のPostfixが対応しているSASLライブラリは、postconf コマンドで表示可能。
cyrus
dovecot
Cyrus-SASL ライブラリと Dovecot-SASL ライブラリが使えるようです。
今回は、Postfix と Dovecot に親和性が高い Dovecot-SASL ライブラリを使用します。
(下記、smtpd_sasl_type = で指定します。)
●Postfix の設定ファイル main.cf を編集します。
最後部に以下の記述を追加。
# TLS Setting smtpd_use_tls = yes smtpd_tls_loglevel = 1 smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache smtpd_tls_session_cache_timeout = 3600s # SASL Setting smtpd_sasl_auth_enable = yes smtpd_sasl_authenticated_header = yes broken_sasl_auth_clients = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth
●Dovecot の設定ファイル 10-master.conf を編集。
service auth { の部分を修正・追加します。
service auth { # auth_socket_path points to this userdb socket by default. It's typically # used by dovecot-lda, doveadm, possibly imap process, etc. Its default # permissions make it readable only by root, but you may need to relax these # permissions. Users that have access to this socket are able to get a list # of all usernames and get results of everyone's userdb lookups. #unix_listener auth-userdb { #mode = 0600 #user = #group = #} # Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } # Auth process is run as this user. #user = $default_internal_user }
Dovecot を再起動。
■SMTP over SSLを設定
メールサーバ「Postfix」へのSMTP接続時、ユーザ名とパスワードを保護する為、「SMTP over SSL」を設定します。
#smtpsの行があるので、先頭の#を外して有効にします。また、その下の3行もコメントアウトします。
smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING
master.cfを保存したら、設定ファイルを再読み込み。
postfix/postfix-script: refreshing the Postfix mail system
SMTP over SSL は、TCPの465番ポートを使用しますので、netstat コマンドで、465番ポートが開いていることを確認します。
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:465 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN
tcp 0 0 :::110 :::* LISTEN
tcp 0 0 :::80 :::* LISTEN
tcp 0 0 :::465 :::* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 :::25 :::* LISTEN
tcp 0 0 :::995 :::* LISTEN
■ThunderBirdでの動作確認
今回は、別PC(TV録画用PC)に導入済のメールクライアント(サンダーバード)にアカウントを追加して動作確認してみます。
まずは、サーバCentOSに、ユーザ tv-pc を登録し、パスワードを設定。
# passwd tv-pc
別PC(TV録画用PC)で、SMTPサーバとPOPサーバに「mail.a21-hp.com」を指定するため、hosts ファイルで名前解決。
( hosts ファイルの場所は、C:\Windows\System32\drivers\etc )
192.168.1.21 www.a21-hp.com # CentOS server
192.168.1.21 mail.a21-hp.com # CentOS server
まず、メールクライアントソフト(サンダーバード)を起動し、「アカウント設定」の画面を出し、左ペインの最下部の「送信(SMTP)サーバ」をクリックして、送信サーバーを設定します。
「説明(D):」に「Postfix」、「サーバ名(S):」に「mail.a21-hp.com」を入力。
「セキュリティ設定」「接続の保護(D):」に「SSL/TLS」を選ぶと、「ポート番号(P):」に「465」が、「認証方式(I):」に「通常のパスワード認証」が設定されます。
「ユーザ名(M):」には「mailadmin」を指定してみました。
ユーザ名、メールアドレス、パスワードを入力し、「続ける」をクリックすると画面のように、「・・・見つかりました」となります。
しかし、STARTTLSとなっているので、「手動設定(M)」をクリックして設定を変更します。
このような画面になるので、「送信サーバ SMTP」の横のリストを、先に登録したサーバー「Postfix – mail.a21-hp.com:465」に切り替えます。
「再テスト(T)」をクリックし「・・・見つかりました」となることを確認。
受信サーバを「SSL/TLS」にすると「・・・見つけられませんでした。」となり「完了」ボタンをクリックできないので、ここでは「STARTTLS」のままとします。
「完了(D)」をクリックします。
第三者機関の正式な証明書ではないので、この画面が表示されるようです。
URL: mail.a21-hp.com:110
下部の「次回以降にもこの例外を有効にする(P)」がチェックされていることを確認し、「セキュリティ例外を承認(C)」します。
アカウント設定の画面に戻り、左ペインにアカウント「tv-pc@a21-hp.com」が追加されるので、その下の「サーバ設定」をクリックします。
「セキュリティ設定」の「接続の保護(U):」が「STARTTLS」になっているので、「SSL/TLS」に変更します。
「OK」をクリック。
URL: が mail.a21-hp.com:995
と、今度はポート番号995になっています。
下部の「次回以降にもこの例外を有効にする(P)」がチェックされていることを確認し、「セキュリティ例外を承認(C)」します。
「送信」ボタンを押し、メールサーバと通信を開始すると、警告メッセージと、セキュリティ例外の通知の画面が表示されます。
警告画面はOKし、セキュリティ例外は承認します。
メールが送信されず、一旦元の画面(この画面)に戻るので、再度「送信」ボタンを押します。
今度は警告画面は出ませんが、SMTP サーバのパスワードを要求します。
mailadmin のパスワードを入力し、「パスワードマネージャーにこのパスワードを保存する」にチェックを入れて「OK」をクリックします。これらの確認画面は初回のみで、次回以降は表示されません。
別PC(satoh163@a21-hp.com)でメールを受信し、返信します。
SMTP over SSL でメール送受信が確認できました。
/var/log/maillog にもエラーは無いようです。
・・・本日は、ここまで。