web-dev-qa-db-ja.com

自分のドメインを送信者として使用する受信メールを拒否する

私の正当なユーザーではないが、私の仮想ドメインの1つを送信者アドレスとして使用する受信メールを拒否するのは良いことです。

smtpd_sender_restrictions=reject_sender_login_mismatchを使用して、既存のエイリアス/アカウント名を使用する受信メールを拒否できることはわかっていますが、攻撃者は仮想ドメインの1つで存在しないメールアドレスを使用できます。 (これはスパム検出に関して好まれます)。

仮想ドメインの1つを使用し、そのために認証されていない受信メールを拒否する最良の方法は何ですか?

メーリングリストと転送の問題により、SPFとDKIMはセットアップされていますが、SoftFailに設定されています。 SPFやDKIMではなく、前述のMXであるPostfixサーバーのソリューションを探していますドメイン。

7
Zulakis

2つの可能な方法を見つけましたが、もっと良い方法があるかもしれません。

1番目の方法:

smtpd_sender_restrictions =
    reject_sender_login_mismatch,
    permit_sasl_authenticated,
    permit

ここで、ドメインテーブルにドメインが存在する場合、smtpd_sender_login_mapsを変更して、adminのエントリを返します。このようにして、emailadressがmaibox/aliasとして存在しない場合でもレコードが返されますが、外部ドメインがfromアドレスである場合は返されません。

table = domain
query = SELECT username AS allowedUser FROM mailbox WHERE username="%s" AND deleted_at IS NULL \
UNION SELECT goto FROM alias WHERE address="%s" AND active = 1 \
UNION select 'admin' from domain where domain = '%d'

2番目の方法:

このアプローチは、ドメインが仮想ドメインでユーザーがcheck_sender_accessではない場合に拒否アクションを返すsasl_authenticatedルックアップを使用します。

smtpd_sender_restrictions =
    reject_sender_login_mismatch,
    permit_sasl_authenticated,
    check_sender_access proxy:mysql:$config_directory/mysql_reject_virtual_domains.cf,
    permit

mysql_reject_virtual_domains.cf

table = domain
query = select 'Reject 530 SMTP authentication is required' from domain where domain = '%d'

3番目の方法( masegaloeh に感謝):

smtpd_sender_restrictions =
    reject_sender_login_mismatch,
    permit_sasl_authenticated
    reject_unlisted_sender,
    permit

Cpu-load/SQL-queries reject_unlisted_sender がいくつ生成されるかわかりません。


明示的なreject_unlisted_senderアクセス制限が指定されていない場合でも、Postfix SMTPサーバーが不明な送信者アドレスからのメールを拒否するように要求します。これにより、ワームやウイルスからの偽造メールの爆発を遅らせることができます。

アドレスは、virtual(5)エイリアスまたはcanonical(5)マッピングと一致する場合、常に「既知」と見なされます。

  • 送信者ドメインは$ mydestination、$ inet_interfacesまたは$ proxy_interfacesと一致しますが、送信者は$ local_recipient_mapsにリストされておらず、$ local_recipient_mapsはnullではありません。
  • 送信者ドメインは$ virtual_alias_domainsと一致しますが、送信者は$ virtual_alias_mapsにリストされていません。
  • 送信者ドメインは$ virtual_mailbox_domainsと一致しますが、送信者は$ virtual_mailbox_mapsにリストされておらず、$ virtual_mailbox_mapsはnullではありません。
  • 送信者ドメインは$ relay_domainsに一致しますが、送信者は$ relay_recipient_mapsにリストされておらず、$ relay_recipient_mapsはnullではありません。

10
Zulakis

ユニオンなしの個別のクエリを使用するさらに別の1番目の方法:

virtual_sender_mailbox_maps.cf

query = SELECT '%s' AS email FROM domains WHERE name='%d' AND active=TRUE

main.cf

smtpd_sender_login_maps = ${proxysql}virtual_sender_mailbox_maps.cf
smtpd_sender_restrictions =
    reject_sender_login_mismatch,
    permit_sasl_authenticated,
    permit
1
Oleg Kr

正しい方法は、ドメインにSPFを設定し、MTAでSPFを有効にすることです。次に、独自のドメイン偽造だけでなく、SPFが有効になっている他のすべてのドメインも保護します。

1
Kondybas

次の少なくとも1つを実装するようにしてください(どちらも優れています)。

1
alexus