
Dovecot/IMAP で PostFix を使用して基本的な電子メール サーバーをセットアップしました。しかし、ブラックリストの設定で問題が発生しています。
以下は私のpostfix main.cfです
smtpd_recipient_restrictions = check_sender_access mysql:/etc/postfix/blacklist.cf reject_unauth_destination
ブラックリスト.cf
user = mailuser
password = mailuser2011
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 'REJECT' FROM blacklist WHERE email='%s' AND id=( SELECT id FROM virtual_users WHERE email='%u')
私の SQL テーブルには、ブラックリスト用の 2 つの列があります。つまり、 と で、id
idemail
は個々のユーザー、 email はブラックリストに登録されたアドレスです。
私がやりたいのは、メールの受信者を参照して、データベースからアドレスの一致を取得することです。電子メールの値をデータベース内に存在するものにハードコードすると、ブロックされたユーザーからのメールを拒否できるようになります。
%u
ただし、 (受信者を指すと想定)を使用すると、まったくブロックされません。
答え1
Postfix のルックアップ テーブルは、キーと値のルックアップです。つまり、キーがあり、ルックアップ後に値を取得します。あなたの場合 (check_sender_access)、キーは送信者であり、送信者のみです。したがって、2 つのキー (送信者と受信者) を持つという要件は、Postfix では実行できません。
それを解決する唯一の方法はポリシー委任、検索を行うための複数のキー (送信者、受信者、IP、ホスト名、HELO など) があります。
しかし、一方で、送信者アドレスは偽造するのが最も簡単なので、送信者アドレスに頼るのは非常に悪い考えです。