harumaki.net

インフラ屋の覚書や、ラーメン食べある記とか。

postfix SMTP-auth設定

   


2004-12-13

▼SMTP-auth設定

 (会社編)
 ※自宅サーバ編は別途編集。

postfix+cyrus-SASLの組み合わせでのSMTP-authの実装です…が、いろいろあって検証環境ではまだ途中です
(本番環境ではすぐいけそうな感じだけど、重要インフラなので気をつけて…)

※当初cyrus-SASLをソースコンパイルしたものを使用するつもりでしたが、いまいち動作がおかしい(コンパイル時のオプションがおかしい?)ので
 おとなしくRPMパッケージで設定しました。

1)cyrus-SASLのインストール確認

RPM版でインストールを完了しているのでそのまま使用する。

▼saslデータベース

 sasl認証のパスワードファイル。
 sasldb	:/etc/sasldb
 確認コマンド	# strings /etc/sasldb

▼パスワードファイルの設定

Postfixがsasldbを利用できるようにグループに登録し、
パーミッションを変更します。

# chgrp postfix /etc/sasldb
# chmod 640 /etc/sasldb 

▼saslパスワード登録コマンド

パスワード登録	saslpasswd	:/usr/sbin/saslpasswd
パスワード確認  sasldblistusers	:/usr/sbin/sasldblistusers

▼パスワードファイルの設定

Postfixがsasldbを利用できるようにグループに登録し、
パーミッションを変更します。

# chgrp postfix /etc/sasldb
# chmod 640 /etc/sasldb 

2)postfixの再コンパイル

$ cd /usr/local/src/postfix-2.0.16/
$ make tidy   ←注
  以前にインストールしたソースディレクトリで作業を行う場合に必要です。
$ make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/include" \
  AUXLIBS="-L/usr/lib -lsasl"
$ make
$ su
# make install

▼main.cfの編集

変更箇所は以下の項目
main.cfの最後のあたりへ追記する。

# Other configurable parameters.
smtpd_sasl_auth_enable = yes		←SMTP Authの利用を許可する
smtpd_sasl_local_domain = $mydomain	←SMTP認証するlocal domainの指定。
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,\
 check_relay_domains, reject
smtpd_sasl_security_options = noanonymous	←anonymous接続を拒否する
broken_sasl_auth_clients = yes		←OutlookExpressから利用する

※注意
 mynetworkディレクティブによって認証なしで送信を許可するネットワークを
 指定する。
 社内のIPが指定されていることを必ず確認すること。

▼main.cfの書式チェック

書式チェック

# postfix check

エラーがなければ、プロンプトが戻ってくる。

▼postfix再起動

# postfix start あるいは reload

3)送受信確認

コンパイルに成功したら、コマンドプロンプトから
telnetでポートを指定して確認する。

$ telnet localhost 25 <-- 入力し、エンター
Trying 127.0.0.1...
Connected to localhost.
220 example ESMTP Postfix
EHLO localhost <-- EHLO localhostと入力
250-mail.example.com
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5 <-- この行があればOK※
250 8BITMIME
QUIT <-- 確認できたので、QUITコマンドで切断します

※上記と同じメッセージが出力されない場合は
 saslの認証に失敗しているので、saslのパスワード登録をやり直し!!

【AUTH PLAINが出ない場合の対処法】

参照元にさせてもらいました↓
http://www.kobitosan.net/postfix/ML/arc.3/msg00641.html
以下の2つの対処法のうちどちらか、あるいは両方をためして
再度telnetで出力結果を確認。

対処1:

 postconfをたたいて、smtpd_sasl_security_optionsがnoplaintext
 なっているか確認。
 ※postconfは、main.cfを読み込んでコンフィグを一覧するコマンド。

[root@example postfix]# postconf | grep smtpd_sasl_security_options
smtpd_sasl_security_options = noplaintext, noanonymous
[root@example postfix]#

この場合、smtpd_sasl_security_optionsからnoplaintextを削除する。

[root@example postfix]# postconf -e smtpd_sasl_security_option=noanonymous

とし、noanonymousだけを指定する。
再度確認して消えていればOK。

[root@example postfix]# postconf | grep smtpd_sasl_security_options
smtpd_sasl_security_options = noanonymous
[root@example postfix]#

対処2:

  smtpd.confにmech_list: GSSAPI DIGEST-MD5 CRAM-MD5
  と手動設定されていないか
  
 この場合は/usr/lib/sasl/smtpd.confを以下のように編集すればOK。

pwcheck_method:sasldb
mech_list: LOGIN PLAIN GSSAPI DIGEST-MD5 CRAM-MD5

設定が完了したら、出力確認

[root@example postfix]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.example.com ESMTP Postfix
EHLO localhost                                   ←リクエストを入力
250-mail.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5 GSSAPI  ←出力されました!
250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5 GSSAPI  ←出力されました!
250 8BITMIME
QUIT                                             ←ログアウト
221 Bye
Connection closed by foreign host.
[root@example postfix]#

ちなみにまだ本運用を開始していないので
このページも完全ではありません。

 - GNU/Linux, infra, MAIL, postfix