MAIL FROM封筒アドレス偽造防止

MAIL FROM封筒アドレス偽造防止

私のpostfix電子メールサーバーはついに正しく動作します。

これで、ユーザーがヘッダーの「送信者」フィールドにあるクライアントプログラムから自分のEメールアドレスを偽造するのを防ぐ必要があります。ユーザーはそのアドレスを使用して他のユーザーとして電子メールを送信でき、経験のないユーザーはこれが本当であると考えることができます。

ユーザーが経験を積んでいる場合は、電子メールヘッダーを確認して何が起こっているのかを知ることができますが、この動作を防ぐ方法はありますか?

答え1

表示smtpd_sender_restrictionssmtpd_sender_login_maps設定。前者は間違ったfromアドレスを防止しますが、後者は送信者アドレスをログイン名と一致させるようにします。

# Prevent malformed senders
smtpd_sender_restrictions =
    reject_non_fqdn_sender       # Ensure correct mail addresses
    reject_unknown_sender_domain # Ensure sender address is from an existing domain
    reject_authenticated_sender_login_mismatch # Check if the user is 
                                 # allowed to use this sender address

# Maps used to stop sender address forgeries.
smtpd_sender_login_maps = pcre:/etc/postfix/login_maps.pcre

内容はlogin_maps.pcre次のとおりです。

# Use this regex if your users are local users, i.e. if the login name
# is just the username, not a full mail address.
# Note that literal dots have to be backslash escaped (`\.`) to avoid
# interpretation of these dots as regex wildcard.
/^([^@+]*)(\+[^@]*)?@example\.com$/ ${1}

# If one doesn't care about subaddresses, this could be simplified to
/^(.*)@example\.com/ ${1}

# This is appropriate if you have virtual users who login with their
# full mail address as their username.  Local addresses won't work, though
/^(.*)$/    ${1}

上記の構成では、postfix が PCRE サポートでコンパイルされると仮定します。 Ubuntu / Debianではpostfix-pcreパッケージをインストールする必要があります。

これは、ユーザーが認証されてメールを送信できる場合にのみ機能します。上記の方法は、認証されていないユーザーからのメールを許可すると役に立たず、失敗します。この場合は、Rui F Ribeiroの回答を必ずお読みください。

答え2

SMTP偽造を防ぐ方法はなく、基本プロトコルはセキュリティを念頭に置いて設計されていませんが、postfixの内部ユーザーの電子メール偽造による影響を最小限に抑えることができます。

ポート587を介して送信された電子メールが認証されるように強制的に認証するようにpostfixとクライアントを設定できます。

ただし、これにより電子メールの送信が中断されることはありませんが、スパムマルウェアが生き残るのが難しくなります(不可能ではありません)。

Gmailの場合は、コードのカスタマイズが多く、独自のメールサーバーもあります。 ISPを管理するときに、私たちのドメインから送信されていないEメールを転送することを許可せず、FROMフィールドに存在する認証されたユーザーのみを許可するQMail拡張機能を収集して作成しました(たとえば、FROMジョブを再確認します)。認証)

/etc/postfix/main.cfsmtpd_recipient_restrictionspostfixで認証されたユーザーにのみ電子メールを中継するには、ディレクティブの先頭にあるファイルに次の2つのオプションがあることを確認してください。

smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination

詳しくは公式文書をご覧ください。Postfix SMTPリレーとアクセス制御

答え3

MAIL FROMSMTP経由で電子メールを送信すると、送信者の電子メールアドレスはSMTP要求と電子メールFromヘッダーフィールドの2つの場所に表示されます。一部のMUAは、メッセージヘッダーフィールドの値のみを表示しますFrom

MAIL FROM封筒アドレス偽造防止

SMTP認証ユーザーが送信者アドレスを偽造するのを防ぐには、reject_authenticated_sender_login_mismatchのオプションを使用します。/etc/postfix/main.cfその後、smtpd_sender_login_maps次の調整も行われます。

smtpd_sender_restrictions =
  ...
  reject_authenticated_sender_login_mismatch,
  ...
smtpd_sender_login_maps = pcre:/etc/postfix/maps/smtpd_sender_login_map.pcre

内容は/etc/postfix/maps/smtpd_sender_login_map.pcre以下に基づいている必要があります。タレブの答え:

  • ユーザーがローカルの場合は、この正規表現を使用してください。つまり、ログインは完全な電子メールアドレスではなくユーザー名にすぎません。\.これらの点が正規表現のワイルドカードとして解釈されるのを防ぐために、リテラル点をバックスラッシュ()にエスケープする必要があります。

    /^([^@+]*)(\+[^@]*)?@example\.com$/ ${1}

  • サブアドレスに興味がない場合は、次のように単純化できます。

    /^(.*)@example\.com/ ${1}

  • これは、電子メールアドレス全体をユーザー名としてログインする仮想ユーザーがいる場合に適しています。しかし、ローカルアドレスは機能しません。

    /^(.*)$/ ${1}

上記の構成では、postfix が PCRE サポートでコンパイルされると仮定します。 Ubuntu / Debianではpostfix-pcreパッケージをインストールする必要があります。

このsendmailコマンドを使用すると、ローカルユーザーが送信するときにアドレスリストから任意のアドレスを選択できます。これはハッキングされたユーザーアカウントに問題があります。おそらくこの問題を解決する最も簡単な方法は、Postfix 'でsendmailコマンドの使用を制限することですmain.cf。たとえば、次のようになります。

authorized_submit_users = root

From偽造された電子メールヘッダーアドレスの防止

Postfix自体は単純な解決策を提供していないようです。ただし、次の方法で実行できます。ここ

~のためスパム/etc/rspamd.local.lua、次のコードを使用して構成ファイルを作成/拡張できます。

local logger = require 'rspamd_logger'

rspamd_config:register_symbol({
  name = 'FROM_HEADER_MISMATCH',
  callback = function(task)
    local user = task:get_user()
    if not user then
      return 0
    end
    for index, smtp_sender in pairs(task:get_from(1)) do
      if smtp_sender.addr ~= user then
        logger.infox('invalid SMTP sender: %1', smtp_sender.addr)
        return 1
      end
    end
    for index, mime_sender in pairs(task:get_from(2)) do
      if mime_sender.addr ~= user then
        logger.infox('invalid MIME sender: %1', mime_sender.addr)
        return 1
      end
    end
    return 0
  end,
  score = 16,
  description = 'sender address in at least one mail header ' ..
    'differs from the sender address in the envelope'
})

これにより、複数の送信者アドレスを持つメッセージがスパムとしてマークされ、Postfixがメッセージを拒否します。エンベロープヘッダを偽造できない場合にのみ、エンベロープヘッダの偽造を防ぎますFrom(解答の最初の部分を参照)。

またはミルトフリードマンFromメッセージヘッダーのアドレスをSMTPアドレスに置き換えることもできますMAIL FROM

関連情報