web-dev-qa-db-ja.com

完全に安全なPostfix MTA(SMTP)構成

最も忙しいサービスとして、SMTPサービス(Postfix MTA)から始めて、サービスごとにルートサーバー(さらに)サービスを保護したいと考えています。私はすべてをセットアップする過程で、セキュリティと暗号化についてよく読み、最も価値のある情報を収集するために最善を尽くしました。しかし、いくつかの問題が残っているようで、構成を完璧にするために他に何も見つけることができません。

望ましい行動

サービスをできるだけ制限したい。つまり、可能な限りsecure暗号化を使用する。 secure暗号化を使用したSTARTTLS(送信)の後でのみ認証を許可する必要があります。

  • サーバー間通信:高度に暗号化され、必要な場合のみ暗号化されません
  • クライアントからサーバーへの通信:高度に暗号化されたもののみ
  • ポート587でのみクライアント認証(オプション?)

差別化

主な関心事は、セキュリティ、暗号化、特にPostfix MTAのセキュリティ関連の設定です。スパム対策やウイルス対策のソリューションについてはアドバイスを求めません。これはまったく別の問題です。懸念は真正性ではなくプライバシーであり、最終的には必要以上にクライアント側の不必要な労力を正当化しないため、電子メールの暗号化はオプションではありません。

現在の構成

  • サーバー:Debian 7(Wheezy)
  • MTA:Postfix 2.9.6
  • CaCert証明書:4096ビット/ sha512-RSA

ファイル/etc/postfix/main.cf抜粋:

tls_random_source=dev:/dev/urandom

# Incoming
smtpd_tls_cert_file=/etc/ssl/cacert/certs/example.com.crt
smtpd_tls_key_file=/etc/ssl/cacert/private/example.com.key
smtpd_use_tls=yes
smtpd_tls_auth_only=yes
smtpd_tls_security_level=may
smtpd_tls_mandatory_ciphers=high
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

# Outgoing
smtp_tls_cert_file=/etc/ssl/cacert/certs/example.com.crt
smtp_tls_key_file=/etc/ssl/cacert/private/example.com.key
smtp_use_tls=yes
smtp_tls_security_level=may
smtp_tls_mandatory_ciphers=high
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# SASL Authentication (dovecot)
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
broken_sasl_auth_clients = no

smtpd_recipient_restrictions =
   permit_sasl_authenticated,
   permit_mynetworks,
   reject_unauth_destination

# prevent leaking valid e-mail addresses
disable_vrfy_command = yes

ファイル/etc/postfix/master.cf抜粋:

smtp      inet  n       -       -       -       -       smtpd
submission inet n       -       -       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

未解決の問題

  • starttls.info 状態:

    信頼チェーンに自己署名証明書があります[...]証明書には有効性の問題があります。証明書がSMTPサーバーに対して検証されることはほとんどないため、これはSTARTTLSが使用されないことを意味するものではありません。一般的に言えば、有効な証明書がないことは悪い習慣であり、証明書を検証しないことはさらに悪い習慣です。暗号化された通信の試みはすべて、中間者攻撃に対して広く開かれています。

    これはサーバー間の通信に関する問題ですか?もしそうなら、これを改善するために私ができることはありますか証明書を支払うことなく? (私が個人的に知っているクライアントのみがいます)

  • 同じサイトは述べています:

    匿名のDiffie-Hellmanが受け入れられます。これは中間者攻撃の疑いがあります。

    これらを無効にするにはどの設定が必要ですか? (次のリスト項目も参照)

  • testssl.sh は、ポート587の問題を示します。

    --> Testing standard cipher lists
    ...
     Anonymous NULL Cipher    offered (NOT ok) 
     Anonymous DH Cipher      offered (NOT ok) 
    ...
    

    これはおそらく前の項目と同じ問題です。

  • testssl.sh は、ポート25の問題を示します。

    --> Testing Protocols
     SSLv3      offered (NOT ok)
    ...
    --> Testing standard cipher lists
    ...
     Anonymous NULL Cipher    offered (NOT ok) 
     Anonymous DH Cipher      offered (NOT ok) 
     40 Bit encryption        offered (NOT ok) 
     56 Bit encryption        Local problem: No 56 Bit encryption configured in /usr/bin/openssl 
     Export Cipher (general)  offered (NOT ok) 
     Low (<=64 Bit)           offered (NOT ok) 
     DES Cipher               offered (NOT ok)
     Triple DES Cipher        offered
     Medium grade encryption  offered
    ...
    RC4 seems generally available. Now testing specific ciphers...
    ...
    

    これはサーバー間の通信にのみ適用されますか?そうでない場合、これはどのようにして可能ですか? main.cfファイルに従って、少なくともSSLv3を無効にする必要があります。これらの問題はどのように解決できますか?

  • ssl-tools.net 状態:

    * .example.com-証明書がホスト名と一致しません

    おそらくそれ自体はセキュリティの問題ではありませんが、上記の項目と組み合わせると興味深いものになります。ワイルドカード証明書で問題がある場合、どのホスト名を選択すればよいですか? example.comまたはHost.example.com

  • 構成を完全に安全にするために他に何ができますか?

16
08frak

小さな正接-SMTPは安全ではなく、MTAについて話しているだけです。 TLS証明書の検証モード(サブジェクトの検証)はほんの一部にすぎず、他の懸念事項に対応しているかどうかは関係ありません。たとえば、SMIMEまたはPGPを使用する場合、TLSは重要ではありません。それはあなたの脅威が何であるかに依存します。

TLSが優先され、必要に応じて暗号化されないという。これは日和見暗号化と呼ばれます。最新のMTAはこれを行います。

はい、自己署名されたプライベートTLS証明書は一般的であり、頻繁に使用されています。証明書を検証する必要はありません。ただし、マルチテナンシーなどの問題により、ドメイン名を証明書自体に関連付けることはできません。

特定のドメインからのインバウンドTLS接続を要求すると、SPFレコードで承認されている大量メール送信者から送信されたブロードキャスト電子メールを見落とすことに注意してください。スケーラビリティのためにTLSを使用しないブロードキャストサービスを介してセキュリティ警告を送信するいくつかの銀行を知っています。

AV/AS、コンテンツ/リンクスキャン、MUAセキュリティ、ホワイトリスト、DKIM、SPF、DMARC、SMIME、PGP、BATV、ディレクトリハーベスト攻撃などがありません...リストはどんどん続きます。

4

パブリックSMTP送信者(ポート25を使用して暗号化されていないコンテンツを送信できる)と、認証と安全なクライアントサーバーコンテンツ転送に使用されるクライアントの送信との間に大きな違いがあることに注意することが重要です。

私は公共の送信者の偏執狂とセキュリティレベルに依存しないことを好みますが、常にドメインユーザーのセキュリティとユーザー間の機密レベルを考慮してください。

まず、このルート証明書または中間証明書を使用して独自のCAおよびsighサーバー証明書を作成し、ユーザー間でこの証明書を配布して、信頼できるものとしてインストールすることをお勧めします。これにより、mitm攻撃が回避され、クライアントからサーバーへのデータ交換が安全になります。 2番目-SSLv2以下のプロトコルを除外してください。 SSLv3も除外します。また、受け入れ可能な暗号リストを割り当てることをお勧めします。以下はpostfixの設定例です。

smtpd_tls_protocols = !SSLv2,!SSLv3,TLSv1,TLSv1.1,TLSv1.2
smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
smtpd_tls_mandatory_ciphers =HIGH 
smtpd_tls_exclude_ciphers=aNULL:eNULL:LOW:3DES:MD5:MEDIUM:EXP:PSK:DSS:RC4:SEED:ECDSA:CAMELLIA256-SHA
tls_high_cipherlist=EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:AES256-SHA:CAMELLIA128-SHA:AES128-SHA

安全でない送信者の場合は、受信者リストを閉じて、リレーを回避するためにspfレコードをDNSに追加します。 「mynetworks」からローカルサーバーを削除するか、ローカルの送信者アドレスがデフォルトで拒否される送信者制限を追加することにより、ローカルサーバーを手動で制限できます。

smtp  inet  n  - - - -  smtpd -o content_filter=spamassassin
   -o smtpd_sender_restrictions=permit
   -o smtpd_recipient_restrictions=permit_mynetworks,mysql:/etc/postfix/mysql-receiver.cf,reject

送信部分(ドメインユーザーのみ)に関しては、プレーンなパスワードがセキュリティで保護されていないパブリックネットワーク経由で送信されないように、暗号化を要求することをお勧めします。

submission inet n   -   n   -   -   smtpd
  -o smtpd_enforce_tls=yes
  -o smtpd_tls_security_level=may # (! possible to force, but limits mail clients list and not recommended at all - non standard) -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=/var/spool/postfix/private/dovecot-auth
  -o smtpd_sasl_security_options=noplaintext # or (!!! - use according to your paranoid level)  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_recipient_restrictions=mysql:/etc/postfix/mysql-receiver.cf,permit_mynetworks,permit_sasl_authenticated,reject_non_fqdn_recipient,reject
  -o smtpd_sasl_authenticated_header=yes

提示された構成では、次のものが得られます。

  • クライアントからサーバーへの暗号化とポート587のSASL認証義務
  • サーバー間tlsが有効になっています(とにかく、インフラストラクチャ通信にはvpnトンネルを使用することをお勧めします)。
1
ETech