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]#
ちなみにまだ本運用を開始していないので
このページも完全ではありません。