[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:27874] postfix with SMTP-Auth part2



続きです.

------------------
○ローカルユーザ認証の設定(SMTPサーバモード)

ユーザがメールを送信する際に,送信者があらかじめ登録されているユーザか
否かを認証する設定です.

Cyrus-SASLはさまざまな認証メカニズムをサポートしており,例えばシステム
のアカウント(/etc/passwdに登録されたアカウント)とは独立にメール専用のア
カウントを利用することも可能ですが,今回用意した
cyrus_sasl-2.2.11-i386-P1.tgz では簡便のため,shadow passwordを利用し,
あらかじめ /etc/passwdに登録されているユーザアカウントを利用してユーザ
を認証するようにしておきました.

postfixはセキュリティを高めるために動作時には専用のアカウントで動作して
いるため/etc/shadowを直接読むことができません.そのため,Cyrus-SASLに付
属のsaslauthdをroot権限で起動しておき,このデーモンと通信してユーザ認証
を行うようになっています.

Cyrus-SASLの認証方法を設定するファイルは/usr/lib/sasl2/smtpd.conf で,
今回は下記のような設定にしています.

pwcheck_method: saslauthd
mech_list: plain login

1行目が認証方法にsaslauthdを使う指定,2行目がパスワードの暗号化方法の指
定です.Cyrus-SASLのデフォルトはより強力な MD5 を優先して使うようになっ
ていますが,Plamoの shadow password はデフォルトでは通常の crypt を使う
ようになっているため plain を指定して MD5 は使わないようにしています.
PAMの設定で/etc/shadowをMD5で暗号化するように設定している場合は
mech_list の行を修正する必要があります.

saslauthd を使うためのPostfix側の設定は/etc/postfix/main.cfの最後の方に
設定している下記の部分です.

smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd

1行目がSMTPサーバモードでSASL認証を利用することを,2行目がSASLの認証方
法の設定方法を記述したファイル(/usr/lib/sasl2/smtpd.conf)の指定になります.

設定を確認すれば saslauthd と postfix を起動します.

# /etc/rc.d/init.d/saslauthd start
# postfix start
postfix/postfix-script: starting the Postfix mail system

ローカルユーザでの認証をテストします.まず telnet でSMTP(25番の)ポート
に接続します.

% telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 plamo.linet.gr.jp ESMTP Postfix
-----
EHLO client.linet.gr.jp  (EHLO でこちらの情報を与えます)
-----
250-plamo.linet.gr.jp
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN           
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
-----
AUTH PLAIN a29qaW1hAGtvamltYQBwYXNzd29yZA== 
         (PLAIN 認証を指定してユーザ名とパスワードを送ります)
-----
235 2.0.0 Authentication successful
-----
QUIT (接続を終了します)
-----
221 2.0.0 Bye
Connection closed by foreign host.

上記セッションのうち ------ で括っているのがキーボードから入力した部分
です.AUTH PLAIN の次に与えているのはユーザ名とパスワードを MIME エン
コードした文字列です.この文字列を生成するには perl を使って

% perl -MMIME::Base64 -e \
    'print encode_base64("kojima\0kojima\0password");'  

としています.実際に試す場合は,上記の kojima の部分を実際のユーザ名に
password はそのユーザのパスワードにしてください.

○メール転送時の認証設定(SMTPクライアントモード)

メールサーバ間でメールを転送する際にSMTP-Auth認証が必要な場合の設定です.
通常,メールサーバ間でのメール転送は従来のSMTPを用いてユーザ認証が不要
な場合が多いと思いますが,手元で使っているISP(DTI)ではSMTPポートも
transmissionポートもSMTP-Authを用いた認証が必要になっているので,これら
の設定も行いました.

・MTA用のパスワードファイルの作成

SMTPのクライアントモード時の設定は /etc/postfix/main.cf の最後の方にあ
る,以下の部分です.

smtp_sender_dependent_authentication = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password

最後の行の /etc/postfix/sasl_passwordがMTAで接続した際に相手に送るパス
ワードを保存したファイルで,ここにISPから割りあてられたメールアカウント
とパスワードを登録しておきます.

(設定した/etc/postfix/sasl_passwordの中身)
smtp.vesta.dti.ne.jp kojima@vesta.dti.ne.jp:password

上記の指定は「smtp.vesta.dti.ne.jpに接続した際は 
kojima@vesta.dti.ne.jp というメールアカウントを利用してそのパスワード
は password である」という意味になります.

このように作成した sasl_password ファイルを Postfix が利用できるように
DB 形式に変換してやります.

# postmap /etc/postfix/sasl_password

上記コマンドで /etc/postfix/sasl_password.db というファイルが作成されま
す.Postfixは変換された DB 形式のファイルを利用するので,ファイルを修正
した場合は postmap コマンドで再生成することを忘れないでください.

5) postfix/main.cf の修正

main.cf はメールサーバの接続形態や利用形態によって異なるので,以下に示
すものは一つの参考例として見てください.

手元の環境では ISP から動的にIPアドレスをもらいながら,そのアドレスを
(ISP外で利用している)Dynamic DNSに登録することでplamo.linet.gr.jp とい
うドメインで逆引きができるようにしています.また,外部へ送るメールは
ISP の提供するメールサーバに全面的に依存(リレー)するようにしています.
このような環境の場合,postfix/main.cf に以下のような修正を追加しました.

myhostname = plamo.linet.gr.jp
mydomain = linet.gr.jp
relayhost = smtp.vesta.dti.ne.jp:submission

1行目と2行目で自分自身のホスト名,ドメイン名を指定しています.このあた
りは DNS が正しく引ければ不要だと思いますが,手元の環境では port
forwarding 機能を使ってメールサーバは自宅内LANの別マシンを使っていたり
するので明示的に設定しています.

3 行目の relayhost が ISP が提供しているメールサーバとその submission 
ポートを利用するという指定です.

手元で必要な設定はこの3点でしたが,テストの間はデバッグ用に詳しい接続
情報を表示させた方がいいので,

debug_peer_level = 2

を 5 くらいにしておくのもいいでしょう.

・postfix の起動

必要な設定を終えれば postfix を再起動します.

# postfix reload

メール転送時にSMTP-Auth が正しく機能するかを確認するために実際にメール
を送ってみます.

% telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 plamo.linet.gr.jp ESMTP Postfix
-----
EHLO test
-----
250-plamo.linet.gr.jp
250-PIPELINING
....
250 DSN
-----
AUTH PLAIN a29qaW1hAGtvamltYQBwYXNzd29yZA== 
-----
235 2.0.0 Authentication successful
-----
MAIL FROM: <kojima@linet.gr.jp>
-----
250 2.1.0 Ok
-----
RCPT TO: <kojima3216@gmail.com>
-----
250 2.1.5 Ok
-----
DATA
-----
354 End data with <CR><LF>.<CR><LF>
-----
Suject: This is a SMTP-Auth Test
From: KOJIMA Mitsuhiro <kojima@linet.gr.jp>

This is a sample mail to Gmail.

.
-----
250 2.0.0 Ok: queued as 493372D0834
-----
QUIT
-----
221 2.0.0 Bye
Connection closed by foreign host.
% 

上記の例では SMTP プロトコルを直接叩いていますが,~/.mew.el 等を設定し
て MUA から試してみるのもいいでしょう.

このメールを送った際の/var/log/maillog ファイルを調べると以下のようなロ
グが残されていました.

1: Dec 20 15:55:40 xeon postfix/smtpd[27897]: connect from localhost[127.0.0.1]
2: Dec 20 15:56:28 xeon postfix/smtpd[27897]: 68C992D0834: client=localhost[127.0.0.1], sasl_method=PLAIN, sasl_username=kojima
3: Dec 20 15:56:58 xeon postfix/cleanup[27900]: 68C992D0834: message-id=<20061220065628.68C992D0834@plamo.linet.gr.jp>
4: Dec 20 15:56:58 xeon postfix/qmgr[27876]: 68C992D0834: from=<kojima@linet.gr.jp>, size=386, nrcpt=1 (queue active)
5: Dec 20 15:56:58 xeon postfix/smtp[27902]: 68C992D0834: to=<kojima3216@gmail.com>, relay=smtp.vesta.dti.ne.jp[xxx.xxx.xxx.xxx]:587, delay=40, delays=40/0.01/0.14/0.09, dsn=2.0.0, status=sent (250 2.0.0 kBK73aqx026750 Message accepted for delivery)
6: Dec 20 15:56:58 xeon postfix/qmgr[27876]: 68C992D0834: removed
7: Dec 20 15:57:01 xeon postfix/smtpd[27897]: disconnect from localhost[127.0.0.1]

この例では 2行目がローカルの postfix による認証を,5 行目が relayhost 
で指定したリレーサーバによる認証をそれぞれ示しています.ローカルの認証
で失敗する場合は saslauthd の起動や /usr/lib/sasl2/smtpd.conf の設定を,
リレーサーバの認証が失敗する場合は /etc/postfix/sasl_passwd の設定を確
認してください./etc/postfix/sasl_passwd ファイルを修正した場合は 
postmap コマンドで sasl_passwd.db ファイルを再生成することを忘れないで
ください.

なお,この設定の場合,メール送信時とリレーホストへの送信時の2回,
SMTP-Auth認証が行われていますが,手元での利用形態ではローカルの認証は不
要なので main.cf の中の

smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd

の2行をコメントアウトして,ローカルのユーザ認証は省略することにしました.

○参考資料

・Postfix SASL HOWTO: http://www.postfix.org/SASL_README.html

英文ですが Postfix に付属の解説文書です.

・Dovecotを使う場合の設定(加藤さんのページ):http://tara.harp.gr.jp/~kato/plamo/index.php?%A5%B5%A1%BC%A5%D0%B9%BD%C3%DB%2FLDAP%A4%F2%BB%C8%A4%C3%A4%BF%A5%E1%A1%BC%A5%EB%A5%B5%A1%BC%A5%D0%2Fdovecot

もう一つのSASLの実装であるDovecotを利用する際の設定方法を解説したページ
です.

--------
こじま

References
[plamo:27873] postfix with SMTP-Auth part1, KOJIMA Mitsuhiro

[検索ページ] [メール一覧]
Plamo ML 公開システム