smtpサービス監視について

初めまして、広瀬と申します。

Postfixの監視用のテンプレを利用してポート監視していますが、
監視対象サーバーのmaillogに以下のエラーが吐かれてしまいます。

Aug 10 21:28:49 mail postfix/smtpd[3311]: SSL_accept error from ********[127.0.0.1]: -1
Aug 10 21:28:49 mail postfix/smtpd[3311]: lost connection after CONNECT from ********[127.0.0.1]

※1行目はsmtps監視のエラー

このエラーはPostfix側の設定に問題があるのでしょうか?

ZABBIX側の設定は標準から変えては居ません
net.tcp.service[smtp]のままです

仕様は以下の通り
CentOS5.3
postfix-2.3.3-2.1
zabbix-agent-1.4.5-2.el5.JP

何か情報ありましたらお教え頂ければと思います。

以上です。よろしくお願いいたします。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー KAZ の写真

wakabaさん

このエラーはPostfix側の設定に問題があるのでしょうか?

zabbix監視しなくてもエラーが出力しませんか?

ちなみにエラーはsmtpでssl接続が失敗しているようです。
postfixでssl接続は許可していますか?

広瀬です

zabbix監視しなくてもエラーが出力しませんか?

ZABBIX監視サーバー側のSMTP/SMTPSの監視を止めたところ出ていません。
尚、ZABBIXが問題だと認識した理由ですが、デフォルトのSMTP/SMTPSの更新間隔を300から1に下げて見たところ、ログにダラダラと同様なエラーが出る事から判別しています。

postfixでssl接続は許可していますか?

SSLの接続は許可されています。メールサーバー自体の基本設計として、SMTP-Auth over SSLを標準としています。
以下にpostconf -n結果添付します(一部伏せています)

[root@mail ~]# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
allow_untrusted_routing = no
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/postfix
content_filter = smtp-amavis:[127.0.0.1]:10024
daemon_directory = /usr/libexec/postfix
debug_peer_level = 4
debug_peer_list = domain.tld
disable_vrfy_command = yes
header_checks = regexp:/etc/postfix/header_checks
home_mailbox = Maildir/
html_directory = no
inet_interfaces = all
mail_owner = postfix
mailbox_command = /usr/bin/procmail
mailbox_size_limit = 2048000000
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
message_size_limit = 204800000
mydestination = $myhostname, $mydomain, localhost.$mydomain, localhost
mydomain = domain.tld
myhostname = host.domain.tld
mynetworks = 192.168.0.0/16,127.0.0.0/8
mynetworks_style = subnet
myorigin = $myhostname
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
receive_override_options = no_address_mappings
relay_domains = $mydestination
sample_directory = /usr/share/doc/postfix-2.3.3/samples
sendmail_path = /usr/sbin/sendmail
setgid_group = postdrop
smtpd_banner = $myhostname UMA
smtpd_client_restrictions =
permit_mynetworks,
reject_rbl_client relays.ordb.org,
reject_rbl_client spamcop.net,
reject_rbl_client opm.blitzed.org,
reject_rbl_client sbl.spamhaus.org,
reject_rbl_client virus.rbl.jp,
reject_rbl_client short.rbl.jp,
reject_rbl_client url.rbl.jp,
reject_rbl_client dyndns.rbl.jp,
check_client_access regexp:/etc/postfix/white-list,
check_client_access regexp:/etc/postfix/rejections,
permit
smtpd_etrn_restrictions =
permit_mynetworks,
reject_invalid_hostname
smtpd_helo_required = yes
smtpd_helo_restrictions =
permit_mynetworks,
reject_invalid_hostname,
check_helo_access regexp:/etc/postfix/helo_restrictions,
permit
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
reject_invalid_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unauth_pipelining
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sender_restrictions =
permit_mynetworks,
reject_non_fqdn_sender,
reject_unknown_sender_domain
smtpd_tls_cert_file = /etc/pki/tls/certs/mail.pem
smtpd_tls_key_file = /etc/pki/tls/certs/mail.pem
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache
smtpd_use_tls = yes
strict_rfc821_envelopes = no
transport_maps = hash:/etc/postfix/transport
unknown_local_recipient_reject_code = 550

master.cf側も、smtps/tlsmgr等の行はコメント解除済です

よろしくお願いいたします。

ユーザー KAZ の写真

wakabaさん

smtp監視とsmtps監視は異なる監視になります。
「SMTP/SMTPSの監視」とありますが、標準はSMTPの監視のはずです。
私の認識が間違っていますでしょうか?

ご使用のpostfixですが、「SMTP-Auth over SSLを標準」とされているようですが、普通のsmtp接続は可能ですか?
普通のsmtp接続できるポートでしたら下記のアイテムで監視可能と思います。
net.tcp.service[smtp,接続IPアドレス,接続ポート]

ちなみにマニュアルは確認されたでしょうか?
ver1.4系は日本語マニュアルがありますので、確認された方が宜しいかと思います。

広瀬です

smtp監視とsmtps監視は異なる監視になります。
「SMTP/SMTPSの監視」とありますが、標準はSMTPの監視のはずです。

失礼しました。書き方に問題ありますね。SMTP監視とSMTP監視は当然別です。
net.tcp.service[tcp,,465]を追加させて、SMTPS側の監視を行っています。
先に挙げたSSLのエラーはこちらの監視による出力です。

尚、問題が少しずれているのですが、サービス監視自体に問題がある訳では
ありません(監視自体は正常です)。
メールサーバー側のログにエラーが出てしまうのが問題なのです。以前に利
用していたバージョンではこのような現象は無かったと記憶しています。

そもそもlost connection after CONNECT from〜のメッセージは本来なら
QUITで抜けておくべきところをそれ以外の原因で抜けている影響で出ている
訳なので、監視の設定自体の問題とは考えにくいです。
考えられる点としてはZABBIXエージェントのSMTP切断時の制御に問題がある
のではと考えています(複数台のメールサーバーで同様なので)。

具体的なログは以下の通りです。ZABBIX側から見れば接続して切断している
訳なので、監視自体は成功しています(当然取得不可などの値にはなっていない)。

Aug 11 15:53:47 mail postfix/smtpd[18869]: connect from xxxxxxxxx[127.0.0.1]
Aug 11 15:53:47 mail postfix/smtpd[18869]: event_request_timer: reset 0xed96d0 0x8833820 100
Aug 11 15:53:47 mail postfix/smtpd[18869]: send attr request = seed
Aug 11 15:53:47 mail postfix/smtpd[18869]: send attr size = 32
Aug 11 15:53:47 mail postfix/smtpd[18869]: vstream_fflush_some: fd 10 flush 22
Aug 11 15:53:47 mail postfix/smtpd[18869]: private/tlsmgr: wanted attribute: status
Aug 11 15:53:47 mail postfix/smtpd[18869]: vstream_buf_get_ready: fd 10 got 60
Aug 11 15:53:47 mail postfix/smtpd[18869]: input attribute name: status
Aug 11 15:53:47 mail postfix/smtpd[18869]: input attribute value: 0
Aug 11 15:53:47 mail postfix/smtpd[18869]: private/tlsmgr: wanted attribute: seed
Aug 11 15:53:47 mail postfix/smtpd[18869]: input attribute name: seed
Aug 11 15:53:47 mail postfix/smtpd[18869]: input attribute value: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Aug 11 15:53:47 mail postfix/smtpd[18869]: private/tlsmgr: wanted attribute: (list terminator)
Aug 11 15:53:47 mail postfix/smtpd[18869]: input attribute name: (end)
Aug 11 15:53:47 mail postfix/smtpd[18869]: SSL_accept error from xxxxxxxxx[127.0.0.1]: -1
Aug 11 15:53:47 mail postfix/smtpd[18869]: match_hostname: xxxxxxxxx ~? 192.168.0.0/16
Aug 11 15:53:47 mail postfix/smtpd[18869]: match_hostaddr: 127.0.0.1 ~? 192.168.0.0/16
Aug 11 15:53:47 mail postfix/smtpd[18869]: match_hostname: xxxxxxxxx ~? 127.0.0.0/8
Aug 11 15:53:47 mail postfix/smtpd[18869]: match_hostaddr: 127.0.0.1 ~? 127.0.0.0/8
Aug 11 15:53:47 mail postfix/smtpd[18869]: lost connection after CONNECT from xxxxxxxxx[127.0.0.1]
Aug 11 15:53:47 mail postfix/smtpd[18869]: disconnect from xxxxxxxxx[127.0.0.1]

※debugレベルを4にしているため、ログが詳細になっています。

以上です。

ユーザー KAZ の写真

wakabaさん

net.tcp.service[tcp,,465]を追加させて、SMTPS側の監視を行っています。 先に挙げたSSLのエラーはこちらの監視による出力です。

なるほど、tcpとして465ポートを監視していると言うことですね…

メールサーバー側のログにエラーが出てしまうのが問題なのです。以前に利 用していたバージョンではこのような現象は無かったと記憶しています。

もしかしてエラーが出てないと言われている監視はnet.tcp.serviceではなくnet.tcp.portではなかったでしょうか?

net.tcp.serviceとnet.tcp.portの違いの詳細はマニュアルを見て頂きたいのですが、net.tcp.portは指定ポートがListenか監視しますが、net.tcp.serviceはtcp接続してサービスが稼動中か監視します。

つまり、net.tcp.service[tcp,,465]でsmtps監視は使用法上無理があるかと思われます。

監視の要件が接続監視ならばnet.tcp.port[,465]をお試し下さい。

広瀬です

ご返答ありがとうございます。

もしかしてエラーが出てないと言われている監視はnet.tcp.serviceではなくnet.tcp.portではなかったでしょうか?

おっしゃる通り、net.tcp.port[,465]、net.tcp,port[,25]だと
エラーは吐かれないようです。

しかし、ZABBIX-JPが提供しているPostfixテンプレを利用してい
ますので、net.tcp.serviceであることには間違いは無いはずです。

また監視しているのはSMTP/SMTPSだけではなく、POP3/POP3Sも監
視しています(設定はnet.tcp.service[tcp,,995]など)。
SMTP接続でQUIT投げずに切った場合には先に挙げた通りのエラー
を吐きますが、POP3の場合にQUITを投げなかった場合には

pop3-login: Aborted login: rip=::ffff:127.0.0.1, lip=::ffff:127.0.0.1, (secured or TLS handshake)

※Aborted loginがエラー文字列

正常な場合は、

pop3-login: Disconnected: rip=::ffff:127.0.0.1, lip=::ffff:127.0.0.1, (secured or TLS handshake)

になります(カッコ内はSSL接続に付加)。

などというエラーが出されるはずです。しかし現状でPOP3側には
このエラーは出ていません(当然SSL絡みのエラーも)。

……と疑問点を感じてしまいます。如何でしょう?

ユーザー KAZ の写真

wakabaさん

などというエラーが出されるはずです。しかし現状でPOP3側には このエラーは出ていません(当然SSL絡みのエラーも)。

SSL絡みのエラーと言うよりsmtpsのエラーはsmtp認証のエラーだと思いますが?(smtp-auth over SSLなんですよね?)
smtp認証のエラーなので結果としてSSL接続拒否されたのではないのでしょうか?

なんら解決になっていませんが、サーバ側でsmtp認証を外せばnet.tcp.serviceでもエラーは出ないかもしれません。

また、根本的なことですがnet.tcp.serviceを使った監視でなければいけないのでしょうか?

広瀬です。

SSL絡みのエラーと言うよりsmtpsのエラーはsmtp認証のエラーだと思いますが?

えと、すいませんがZABBIXエージェントはlocalhostでアクセス
してきますよね?だとすれば、SMTP-Authは経由しないはずです。
permit_mynetworksでローカル接続はSMTP-Auth見る前に
許可してしまっています。

仮にSMTP-Auth環境のメールサーバーがあったとして、試しても
らえば一番分かりやすいのですが、telnet localhost 25で接続
してみるとちゃんと接続確立し、HELO/MAIL FROM/RCPT TOなどコ
マンド打ち込めます(確認済み)。
もし仮にpermit_mynetworksをしていなければコネクションすら
確立されないはずです。

尚、net.tcp.service[*]を使用する理由はあります。listen監視
よりかサービス稼動監視の方が異常発見時の判定度は高いと思う
のですが、これは認識間違いでしょうか?

良くある例として、Ping応答正常、ポートのlisten監視も正常だ
としても、実はOSやアプリがハングしているとかありえますよね。
それならサービス稼動確認の方が確実性があるのではとの持論です。

ユーザー KAZ の写真

wakabaさん

えと、すいませんがZABBIXエージェントはlocalhostでアクセス
してきますよね?だとすれば、SMTP-Authは経由しないはずです。
permit_mynetworksでローカル接続はSMTP-Auth見る前に
許可してしまっています。

仮にSMTP-Auth環境のメールサーバーがあったとして、試しても
らえば一番分かりやすいのですが、telnet localhost 25で接続
してみるとちゃんと接続確立し、HELO/MAIL FROM/RCPT TOなどコ
マンド打ち込めます(確認済み)。
もし仮にpermit_mynetworksをしていなければコネクションすら
確立されないはずです。

net.tcp.service[tcp,,465]で設定されていると言うことは、telnet localhost 465を試さないといけないはずですが…

尚、net.tcp.service[*]を使用する理由はあります。listen監視 よりかサービス稼動監視の方が異常発見時の判定度は高いと思う のですが、これは認識間違いでしょうか? 良くある例として、Ping応答正常、ポートのlisten監視も正常だ としても、実はOSやアプリがハングしているとかありえますよね。 それならサービス稼動確認の方が確実性があるのではとの持論です。

認識は違いませんし、言ってる事も解ります。
zabbixはOSSです。
期待した動きがどうしても得られない場合はソース修正するか、他の方法で代用するものと思っています。

net.tcp.serviceでエラーがでて使えないならばnet.tcp.portで代用はどうですか?と言う意味です。

広瀬です

net.tcp.service[tcp,,465]で設定されていると言うことは、telnet localhost 465を試さないといけないはずですが…

これについては、telnet自体がそもそもSSLを理解しないので上記
の手順ではConnection確立だけで、HELO以降のコマンドを理解し
てくれません。
代わりに、openssl s_client -connect host:portで代用できます。
こちらであれば問題無く行けます。

net.tcp.serviceでエラーがでて使えないならばnet.tcp.portで代用はどうですか?と言う意味です。

ごもっともですね。上記の代替策を提示してもらってからそちら
に暫定ではありますが、変更しています。
ただ、以前はそのようなケースが無かったはずなので、何故かな
ぁと疑問に思った次第なのです。
旧サーバーは仮想マシンで運用していましたのでイメージファイ
ル開けば何かしら答えが見つかるかもしれませんので、ちょっと
確認してみます。

ユーザー KAZ の写真

wakabaさん

net.tcp.service[tcp,,465]で設定されていると言うことは、telnet localhost 465を試さないといけないはずですが…

これについては、telnet自体がそもそもSSLを理解しないので上記
の手順ではConnection確立だけで、HELO以降のコマンドを理解し
てくれません。
代わりに、openssl s_client -connect host:portで代用できます。
こちらであれば問題無く行けます。

初めから疑問に思っていたのですがnet.tcp.serviceでsmtpsが監視できると思ったのは何故なのでしょうか?

マニュアル(日本語)ですとnet.tcp.serviceは「ssh、service.ntp、ldap、 smtp、ftp、http、pop、nntp、imap、tcpのいずれか1つを指定」となっています。

smtps、pop3sは公式には対応していないか(または未検証)と思われます。

ユーザー kodai の写真

こんにちは。

すいません、返信しようと思いつつ手が回らなくて遅れてしまいました。

net.tcp.service[tcp,,465]を設定されたのは、ZABBIX-JPで配布しているPostfixテンプレートに含まれているから、ということだと思っているのですが、その認識で合っているでしょうか?

このテンプレートは私が作成して、監視が行えることはテストしていて、先ほど確認したところ私が構築した環境ではSSLのエラーは出ていません。だた、確かにnet.tcp.serviceは公式にはSSLサポートはされていないですし、Postfixの設定によってはエラーが出てしまうかもしれません。

このテンプレート自体、すべての環境でテストしたわけではないので環境によって変更はお願いしたいのですが、より良い設定があればテンプレート側も変更しますのでツッコミは大歓迎です。

広瀬です。

net.tcp.service[tcp,,465]を設定されたのは、ZABBIX-JPで配布しているPostfixテンプレートに含
まれているから、ということだと思っているのですが、その認識で合っているでしょうか?

ZABBIX触りはじめの頃はnet.tcp.serviceの項目に目を付けていた訳ではなく、マニュアルなどを
読む内にそのような設定が可能であることを知りました。後からこちらで公開されているテンプレートに
も含まれていることを知り、以来はそれを流用しています。

このテンプレートは私が作成して、監視が行えることはテストしていて、先ほど確認したところ私が構築
した環境ではSSLのエラーは出ていません。だた、確かにnet.tcp.serviceは公式にはSSLサポートは
されていないですし、Postfixの設定によってはエラーが出てしまうかもしれません。

Nagios利用していた時期にも似たような現象に悩まされていたことがあり、幾らか設定追加やソース
修正が必要でした。
状況によってはエラーがログに出る出ないケースがあるとなると、Postfix側の設定に何らかありそうです
ね。POP3S側ではエラーがでないので不思議だったんです。

今一度メールサーバー側の設定を確認してみます。原因が判明すれば参考として提示させていただ
きます。

広瀬です

マニュアル(日本語)ですとnet.tcp.serviceは「ssh、service.ntp、ldap、 smtp、ftp、http、pop、nntp、imap、tcpのいずれか1つを指定」となっています。

標準では、指定できるニーモニックはマニュアルに記載あるとおりしか有りませんので当然、smtpsやpop3sなどという表記は出来ないことは認識していました。
当該マニュアルの備考欄にはFTPをポート45で動かした場合の凡例がキーポイントでしょうか?[tcp,,465]、[tcp,,995]などが使えると分かったきっかけです。

パラメータにtcpが存在する時点で広域に使えると認識していますので、SSLが絡む絡まないに関わらず[tcp,,***]が利用できないということは無いと思います。