web-dev-qa-db-ja.com

メールクライアントがpostfixに接続するときのSSL_acceptエラー

サーバーに自己署名証明書を使用してpostfixdovecotを設定できました。そこでtelnetコマンドを使ってメールを送受信できます。ラップトップのThunderbirdクライアントからメールサーバーに接続したいのですが、失敗し、/var/log/mail.logの出力は次のようになります。

postfix/submission/smtpd[11560]: connect from unknown[95.134.50.75]
postfix/submission/smtpd[11439]: SSL_accept error from unknown[95.134.50.75]: lost connection
postfix/submission/smtpd[11439]: lost connection after CONNECT from unknown[95.134.50.75]

セットアップで変更した/etc/postfix/master.cfの一部を次に示します。

# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       -       -       -       smtpd
smtps     inet  n       -       -       -       -       smtpd
#smtp      inet  n       -       -       -       1       postscreen
#smtpd     pass  -       -       -       -       -       smtpd
#dnsblog   unix  -       -       -       -       0       dnsblog
#tlsproxy  unix  -       -       -       -       0       tlsproxy


submission inet n       -       -       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_wrappermode=yes
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth

そして、これが私の/etc/postfix/main.cfです。

myhostname = mail.myserver.com
myorigin = /etc/mailname
mydestination = mail.myserver.com, myserver.com, localhost, localhost.localdomain
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

smtpd_tls_cert_file=/etc/ssl/certs/mailcert.pem
smtpd_tls_key_file=/etc/ssl/private/mail.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_protocols = !SSLv2, !SSLv3

smtpd_tls_security_level = may
smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtpd_tls_loglevel = 1

local_recipient_maps = proxy:unix:passwd.byname $alias_maps

inet_protocols = all

また、これが役立つかどうかはわかりませんが、telnet localhost 25telnet localhost 465の両方がサーバーで機能しますが、ラップトップからはtelnet myserver.com 465のみが機能します。ポート25を試すと、telnet: Unable to connect to remote Host: Connection timed outと表示されます。 ufwはサーバーで非アクティブです。

修正するにはどうすればよいですか?

4
src091

ポート465はSMTPS用であり、接続を確立するとすぐにSSLを使用し、安全な接続が確立された後、ポート25で通常見られるのと同じSMTPプロトコルを使用します。コマンドラインから次のようにテストします。

openssl s_client -connect smtp.example.com:465

Telnetを使用してポート465に接続すると、SSLプロトコルが使用されないため、ログファイルにエラーメッセージが表示されます。

完全を期すために、通常のSMTPポートであるTCP/25でTLSをテストする

openssl s_client -starttls smtp -connect  smtp.example.com:25
14
HBruijn

私がこれを見たのは、制限されたTLS/SSL設定のためにPostfixがクライアントをブロックしているときだけです。

smtpd_tls_protocols =!SSLv2、!SSLv3

メールクライアントがSSL2または3を使用しようとしている場合は、これが理由です。そうでない場合は、ブロックが原因である可能性もありますが、ポートが完全にブロックされ、クライアント接続が正常に表示されないと思われます(たとえば、私のISPはポート25を完全にブロックし、メールサーバーに接続しようとすると、ログには何も表示されません)。

1
Areeb Soo Yasir