web-dev-qa-db-ja.com

EximでSTARTTLSを強制する方法は?

私はメールサーバーをセットアップすることを学んでいます。私はそれをPostfixで動作させ、Eximで同じ構成を試しました。 SMTP発信接続のためにクライアントにSTARTTLS接続のみを使用させるにはどうすればよいですか?この質問の指示に従いました。

eximでメールを送信するにはSTARTTLSが必要

私の設定は次のようになります

MAIN_TLS_ENABLE = yes
MAIN_TLS_CERTIFICATE = /etc/ssl/certs/ssl-cert-snakeoil.pem
MAIN_TLS_PRIVATEKEY = /etc/ssl/private/ssl-cert-snakeoil.key

.ifdef MAIN_TLS_ENABLE
# Defines what hosts to 'advertise' STARTTLS functionality to. The
# default, *, will advertise to all hosts that connect with EHLO.
.ifndef MAIN_TLS_ADVERTISE_HOSTS
MAIN_TLS_ADVERTISE_HOSTS = *
.endif
tls_advertise_hosts = MAIN_TLS_ADVERTISE_HOSTS

auth_advertise_hosts = ${if eq{$tls_in_cipher}{}{}{*}}

Eximを再起動しました。エラーはありません。それから私は http://checktls.com/ でいくつかのテストを実行しました

TestSenderに合格し、安全な通信でメールを送信できました。しかし、TestSenderAssureTLSは失敗し、Webサイトは暗号化されていない通信をネゴシエートする可能性があります。

何が足りないのですか?

Thunderbirdでアカウントを作成すると、STARTTLSではなく、安全でないSMTPチャネルが自動検出されます。アカウントの設定とメールの送信は成功します。ただし、ネットワーク内のコンピューターのシェルからSMTP会話を行うと、認証がアドバタイズされません。次のようになります。

EHLO <subdomain>.<domain>
250-betelgeuse Hello <subdomain>.<domain> [10.0.14.34]
250-SIZE 52428800
250-8BITMIME
250-PIPELINING
250-STARTTLS
250 HELP
AUTH LOGIN
503 AUTH command used when not advertised

誰かが私に欠けているものを指摘してもらえますか、どうすればより良いテストを行うことができますか?関連するトピックで、autdetectを実行しているクライアントに必要な構成をアドバタイズするにはどうすればよいですか?ありがとうございました。

2
Elan

STARTTLS接続はセキュリティで保護されていない状態で開始する必要があります。 STARTTLSオプションは、最初のEHLOコマンドが実行されるまで通知されません。 STARTTLSを適用する場合は、ACLを追加または変更する必要があります。 適用するメールポリシー を公開しました。

このサーバーがMXの場合、すべての接続にSTARTTLSを適用しないでください。私の構成では、STARTTLSを必要とする接続にAUTHが必要です。これには私のLANからの接続は含まれませんが、ローミング中にサーバーから電子メールを送信するユーザーには適用されます。また、送信ポートで認証を行う必要があります。これが私が使用するACLの基本です。

# This access control list is used after an auth command.
acl_local_auth:

# Deny authentication on unencrypted links
deny
  !encrypted = *
  message = AUTH encryption is required

# Deny if AUTH isn't on submission port (autolist enabled)
deny
   !condition = ${if eq {$interface_port}{587}}
   message = AUTH requires submission port

# Accept if encrypted (should not get here if unencrypted)
accept
  encrypted = *

#デフォルトの拒否拒否メッセージ= AUTHは受け入れられません

メールTLSACLを適用することもできます。このACLにより、外部送信者はメールを送信できます。

# This access control list is used for every MAIL FROM command in an
# incoming SMTP message. 
acl_local_mail_from:

# Accept if locally trusted hosts
accept
  hosts = : +relay_from_hosts

# Accept if authenticated
## May want to check domain is local
accept
  authenticated = *

# Accept the null sender - bounce messages and receipts
accept
  senders = :

# Accept if not local domain - recipient ACL will handle relaying
# More checks on sender in recipient ACL.
accept
  !hosts = : +relay_from_hosts
  !sender_domains = +local_domains

# Default deny
deny
  message = $sender_address is not authorized to send email on this connection.

ACLのテスト中は、deferではなくdenyの使用を検討する必要があります。 ACLは、構成のメインセクションにaclステートメントを追加し、上記のACLをACLセクションに追加することで有効になります。

acl_smtp_auth = acl_local_auth acl_smtp_mail = acl_local_mail_from

2
BillThor

あなたの設定によると...

tls_advertise_hosts = MAIN_TLS_ADVERTISE_HOSTS
auth_advertise_hosts = ${if eq{$tls_in_cipher}{}{}{*}}

認証をアドバタイズするにはTLS接続が必要なので、opensslで接続を開始します。

openssl s_client -connect hostname:25 -starttls smtp
0
Traz Ka