Postfix Eメールサーバーが稼働していて、すべてが正常です...誰かが他のユーザーを偽装することを決定するまでです。現在の状況は次のとおりです。
[email protected]
from
偽造されたヘッダーを含む電子メールを送信できます[email protected]
。
偽のメールヘッダーには次のものがあります。
From: User2 <[email protected]>
(Authenticated sender: [email protected])
明らかに、ユーザーは合法的な電子メールアドレス/パスワードを使用してサーバーを認証し、偽装したいFrom
ユーザーとしてヘッダーを設定しています。
私はこれを直接テストし、動作します。ただし、仮想ドメインテーブルにない他のドメインにドメインを変更すると、電子メールクライアントはサーバーが電子メールを拒否したと言います。
仮想ドメインテーブルの他の人ではなく、彼のEメールと一致するヘッダーを持つE[email protected]
メールのみを送信できるようにする方法はありますか?from
- ドメインがリストにないときに発生するのと同じエラーが発生します。
現在のsmtpd
制限は次のとおりです。
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_unauth_pipelining, reject_unknown_sender_domain, reject_unknown_recipient_domain
smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_invalid_hostname, reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net, reject_rbl_client cbl.abuseat.org
smtpd_sender_restrictions = permit_mynetworks, reject_unknown_address, reject_unknown_sender_domain, reject_non_fqdn_sender
ノート:サーバーに追加のアドレス(user1+something@ mydomain.dev
電子メールを送信する[email protected]
など)と仮想エイリアスマップがあります。上記の問題に対する解決策を投稿した人の場合は、ユーザーが自分のEメールをプラスアドレスまたはエイリアスに基づいて「なりすまし」できるかどうかを確認できます。その後、または[email protected]
([email protected]
それらが属している場合のみ)から送信できる必要があります。
ありがとうございます。
答え1
@tarleb(私に正しい方向を教えてくれた)の貴重な助けを借りて、私は次の解決策を思いつきました。
reject_sender_login_mismatch
セクションの最後に追加しますsmtpd_sender_restrictions
。- クエリはMySQLに
virtual_mailbox_domains
基づいていたので、追加しました。これは、送信者のログインEメールとフィールドが一致することを確認するためにpostfixによって使用されるマッピングです。virtual_alias_maps
smtpd_sender_login_maps = mysql:/etc/postfix/mysql-virtual_sender-login-maps.cf
from
/etc/postfix/mysql-virtual_sender-login-maps.cf
次のコンテンツにします。user = emailserveruser password = sdfjn1234ns hosts = 127.0.0.1 dbname = mailstack query = SELECT * FROM (SELECT email FROM `virtual_users` WHERE email = '%s' UNION SELECT destination FROM `virtual_alias` WHERE source = '%s' ) a
どのように動作しますか?
From
Postfixは電子メールを提供します%s
が、クエリ結果はSMTP認証に使用されたアドレスと一致するアドレスを受け取ります。
この場合、最初にvirtual_users
テーブルを照会し、そこから何も返されない場合(該当するEメールの実際のユーザーがいないことを意味します)、潜在的なEメールエイリアス(フィールド)は、ユーザーのEメールと一致するアドレス(実際)を取得するvirtual_alias
ために照会します。destination
source
一致するものがない場合、クエリは何も返しません。つまり、1)そのEメールのユーザーはいません。 2)そのEメールのユーザーのエイリアスはありません。 Postfix はメールクライアントにSender address rejected: not owned by user
エラーを表示します。