2015年3月8日日曜日

【Postfix】【Dovecot】メールサーバにSMTP-AUTH(送信メール認証)を実装する

先日、クイックセットアップについて記載しました。

メールサーバのクイックセットアップ①
メールサーバのクイックセットアップ②

ここから1つずつ認証や暗号化等の設定を追加していきます。

なお、主な環境は以下の通りです。

OS : CentOS6.5
MTA : postfix2.6.6
MRA : dovecot2.0.9

まずは、SMTP-AUTH(送信メール認証)機能を追加します。

※2016/05/06 一部加筆

設定の前に、SMTP-AUTHについて、(自分の頭の整理のために)ざっと説明します。

  • もともとメールシステムは、SMTPサーバを使って、誰でも匿名で、自由にメールを送信することができた。(そもそもコンピュータを使用する人自体が極端に限られていたので、悪意を持ったメールを送信する事自体が想定されていなかった。)
  • コンピュータの普及に伴いスパムメール送信や、不正中継の悪用等が増え、対策が必要になった。
  • その対策の1つとして認証機能があり、メールを送信するためには、「ユーザ名」「パスワード」を用いてログインすることが求められる。
  • サーバ管理者の立場からすると、第三者が自分のメールサーバを不正に使用することを防止できる。

以下、具体的な設定方法に移ります。

まず、SMTP-AUTHの実装には、認証システムを提供するライブラリ=SASLが必要となります。SASLにはCyrus-SASLとDovecot-SASLがありますが、ここではDovecot-SASLを用います。

Dovecot-SASLを用いるので、Postfixだけでなく、Dovecotについても、設定の変更が必要になります。


① Postfixの設定


1.PostfixがDovecot-SASLライブラリに対応しているか確認
  # postconf -a
  (Dovecot と返ってくればOK)

2./etc/postfix/main.cf の末尾に、次のパラメータを追記
 ・smtpd_sasl_type = dovecot
  ⇒ SASLプラグインタイプの設定

 ・smtpd_sasl_auth_enable = yes
  ⇒ SASL認証を有効にする

 ・smtpd_sasl_path = private/auth
  ⇒ 認証ソケットファイルの場所(/var/spool/postfixからの相対パス)。
    ソケットファイルはDovecotを再起動すると自動で作成される。

 ・smtpd_recipient_restrictions = permit_mynetworks,
                      permit_sasl_authenticated,
                      reject_unauth_destination
  ⇒ 認証を通過すればリレーを許可する設定を追記
    mynetworks 以外のネットワークからも、メール送信が可能になる。

以下2つはオプションで。

 ・broken_sasl_auth_clients = yes
  ⇒ SASL認証で[AUTH=PLAIN]を使っているクライアントソフト(古いOutlook等)
     での認証を可能とする。

 ・smtpd_sasl_authenticated_header = yes
  ⇒ Received:フィールドに認証されたユーザ名を表示

3.Postfixの設定を読み込む。
 # postfix reload


② Dovecotの設定


1./etc/dovecot/conf.d/10-auth.conf
 ・auth mechanisms = plain login
  ⇒ 平文パスワードを利用する。

2./etc/dovecot/conf.d/10-master.conf
 ・unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}




3.Dovecotを再起動
 # service dovecot restart


③ telnet でログインテストしてみる。


1.準備
 ログインには、ユーザ名、パスワードをBase64でエンコードした文字列を用いる。
 下記の様にをBase64でエンコードする。
$ perl -MMIME::Base64 -e 'print encode_base64("ユーザ名\0ユーザ名\0パスワード”);’
 エンコードされた文字列が出力される。

2.telnet で25番ポートに接続

 telnet localhost 25

 Trying ::1...

 Connected to localhost.

 Escape character is '^]'.

 220 mail.○○○○.mydns.jp ESMTP Postfix

 EHLO mail.○○○○.mydns.jp  (← 『EHLO ホスト名』を入力)

 250-mail.○○○○.mydns.jp
 250-PIPELINING
 250-SIZE 10240000
 250-VRFY
 250-ETRN
 250-AUTH PLAIN
 250-AUTH=PLAIN
 250-ENHANCEDSTATUSCODES
 250-8BITMIME
 250 DSN
 AUTH PLAIN エンコードされた文字列 (←AUTH PLAIN に続いてエンコードされた文字列を入力)
 235 2.7.0 Authentication successful (←ログイン成功!)
 QUIT
 221 2.0.0 Bye
 Connection closed by foreign host.

※手順通りにやっても正常にログインできない事象が発生。パスワードが数字から始まるとダメみたい。
(参考:postfixでsmtpログイン出来ない)
但し、ThunderBirdからは正常にログイン&メール送信が可能。

④ ThunderBird で確認してみる。


  送信サーバの設定をして、認証方式を『平文のパスワード認証』に設定する。


 メール送信時にパスワードが求められるようになった。


 (パスワードマネージャにパスワードが保存されていたら、入力は求められない。
  テストしたい場合はパスワードマネージャから一旦削除する。)

 また、クイックセットアップの段階では“Relay access denied” で、メール送信に失敗
 していた場合でも、smtpd_recipient_restrictions に permit_sasl_authenticated が
 追加されたため、メール送信可能に。

0 件のコメント:

コメントを投稿