Postfix が Web からの To:mydestination を拒否し、ローカルに送信された場合は受け入れ、Web からの To:virtual_mailbox_domains は受け入れるようにします。

Postfix が Web からの To:mydestination を拒否し、ローカルに送信された場合は受け入れ、Web からの To:virtual_mailbox_domains は受け入れるようにします。

CentOS8 での Postfix (v3.3.1) のセットアップはほぼ完了しました。目標は次のとおりです。

  • サービスが Linux ユーザーに電子メールを送信できるようにします。(root への crontab)
  • Linux ユーザーのパブリックメールは受け付けません。([メールアドレス]
  • Linux ユーザーを作成せずに、パブリック メールを受信するユーザーを定義します。

私は上記のことをなんとか達成しましたが、1 つの副作用があり、それを防ぐ方法がわかりません。これまでにやったことのいくつかは次のとおりです。

myhostname = server.foobar.com
mydomain = foobar.com
myorigin = $myhostname
mydestination = $myhostname, localhost
mail_spool_directory = /var/spool/mail

virtual_transport = virtual
virtual_mailbox_domains = foobar.com
virtual_mailbox_base = /var/spool/email/

このビットは、Postfixに、サービスからユーザに送信されたメールに$myhostnameが追加されることを伝えます([メールアドレス]) で送信され、標準のシステムメールに配信されます/var/spool/mail

ドメインのLinuxユーザーに送信されるすべてのメール[メールアドレス]仮想ドメインとして扱われ、仮想ユーザーを検索し、仮想ユーザーがいない場合は電子メールを拒否します。

仮想ユーザー(ウェブマスターなど)を追加すると、そのユーザーに送信される電子メール([メールアドレス]) が受け入れられ、配信され、/var/spool/email/...パブリック メールがシステム メールから分離されます。


問題...

もし誰かが賢明にもホスト名([メールアドレス]) はインターネットから受け入れられ、 に配信されます/var/spool/mail。これをブロックする方法がわかりません。


設定を試みましたdefault_transport = error:Domain doesn't accept email.が、動作は変わりませんでした。ドキュメントではこの機能はサポートされていませんが、フォーラムで言及されていたので試してみました。

Linuxユーザーをuser@$myhostnameとして保持することは私にとって重要ではありません。これは、スパマーが攻撃するのを防ぐために、Linuxユーザーを同じドメイン名の仮想ユーザーから分離する方法を私が見つけることができた唯一の方法でした。[メールアドレス][メールアドレス]など

重要な場合のその他の構成設定:

html_directory = no
local_recipient_maps =
luser_relay = postmaster
mail_spool_directory = /var/spool/mail
meta_directory = /etc/postfix
mydestination = $myhostname, localhost
mydomain = foobar.com
myhostname = server.foobar.com
mynetworks_style = host
myorigin = $myhostname
relay_domains =
relayhost =
virtual_mailbox_base = /var/spool/email/
virtual_mailbox_domains = foobar.com
virtual_transport = virtual

これについて何かアイデアや別の方法はありますか?

答え1

解決策を見つけました。

myorigin = $myhostname私の質問に記載されているように、同じドメイン上のローカル ユーザーと仮想ユーザーを分離する方法を維持します。

smtpd_recipient_restrictionsのセクションでmain.cf、リストへのポインタをpermit_mynetworks追加した後。 を使用した場合、次のようになります。check_recipient_accesshash:

# Don't include the "...", its just to show this is among other settings

smtpd_recipient_restrictions =
   ...
   permit_mynetworks
   check_recipient_access hash:/etc/postfix/block_mydomain
   ...

次にリスト/ハッシュファイルを作成します/etc/postfix/block_mydomain

hostname.domain.com     513 Invalid domain.

ファイルを保存して実行し、postmap block_mydomain*.db バージョンを作成します。

その後、postfix を再起動すれsystemctl restart postfixば完了です。

私はテストしましたが、sendmailコマンドを使用してローカルのLinuxユーザーにメールを送信できます。crontabはローカルのLinuxユーザーにメールを送信できます。ただし、インターネットからメールを送信すると、[email protected]バウンスされます。[メールアドレス]それでも受け入れられ、破棄されます。

関連情報