コンテナ内で実行されるPostfixインスタンスの特定のPostfix設定を作成する方法を特定するのが困難です。
これは私の要件です。
- 送信者が小さなIPアドレスセットの1つから来た場合、または送信者がローカルプログラムでない限り、中継は禁止されます(たとえコンテナ外のプログラムがコンテナで実行されているPostfixへのメールをキューに追加できるようにする方法は興味深いパズルです。です)。
- 小さなチェックセットを介してリレーではなくIPアドレスから着信する各メッセージを実行し、すべてが通過できない場合は転送を拒否します。
- 送信者IPが指定されたRBLにある場合は拒否されます。
- 着信IPのグレーリスト中に以前にメールを受信したことはありません。
- 宛先アドレスのユーザー部分が小さい正規表現セットと一致しない場合は、それを拒否します。
- メッセージが Spamassassin の簡単で迅速な検査に合格しない場合は、拒否してください。
- すべてのローカル配送の場合は、最終処理を決定する手順に従ってください。このプログラムは4つの結果のうちの1つを生成します。
- 別のローカルアドレスに出荷します(配送先はループ保護を提供するように更新され、ローカル配送プログラムは再実行されます)。
- リモートアドレス(Gmailアカウントやその他のアドレスなど)に転送します。
- 特定のユーザー(現在は常に同じユーザー)が所有するローカルMaildirディレクトリに送信します。
1つのドメインに送信されたメールを処理するだけです。いつか、すべてのメールがMailmanによって処理される新しいドメインを追加したいのですが、配信前に存在しないリストアドレスから送信されたメールを拒否するのも良いでしょう。
これらの目標の1つ以上を達成する方法を指定する文書へのポインタはありますか?ローカルおよび輸送用Postfixマニュアルはあまりにもあいまいで、実際には役に立ちません。システムのメールフローとさまざまなポイントでこれを変更する方法を詳しく説明するドキュメントがあればよいでしょう。
また、Maildirメールボックスに送信するプログラムを直接書くことはできますが、正確に正しく実行するのは非常に面倒です。
Postfixはコンテナで実行されます。 queueディレクトリとMaildirディレクトリは、コンテナ内にマウントされた永続ファイルシステムです。私は前述のこと(postgrey、spamasassin、ローカルメールの処理方法を決定すること)を実装するために必要なすべてのプログラムも同じコンテナで実行されると思います。 postgrey と spamassassin が維持する状態がコンテナ呼び出し全体にわたって持続するように準備する必要があるかもしれません。
メールを読むにはmuttを使います。現時点では、ローカルでメールを配信する唯一の人になります。ただし、メールを配信するためのさまざまなMaildirディレクトリがあります。これを行うには、おそらく同じシステム(おそらく別のコンテナにコンテナ化されている)でDovecotを実行します。
また、ローカルの受信者アドレスが何百ものあり、ほとんどを同じように処理したいと思います。それらはすべてパターンに適合しますが、パターンに合う一部の人々は他の人とは異なる方法で扱われるべきです。電子メールの内容を参照することなく、どのコンテンツが含まれているかを事前に知ることができ、その内容についてより具体的なパターンを作成できます。
答え1
smtpd_client_restrictions
次のセクションでは、多くのプロジェクトを扱うことができます。サフィックス構成パラメーター
私のクライアントの制限は次のとおりです。
smtpd_client_restrictions = permit_mynetworks
permit_sasl_authenticated
check_helo_access
hash:/etc/postfix/helo_access
check_client_access
hash:/etc/postfix/client_checks
reject_unauth_destination
check_policy_service unix:private/policy-spf
reject_rbl_client cbl.abuseat.org
reject_rbl_client pbl.spamhaus.org
reject_rbl_client sbl.spamhaus.org
reject_rbl_client bl.blocklist.de
reject_unknown_client
この設定は着信スパムの約99%を削除します。リストはソートされたリストです。各検査は次の検査まで無視されます。失敗した場合、メッセージは拒否されます。私はclient_checks
dbファイルに含まれているルールにいくつかの例外を生成する必要があることを発見しました。
例外ファイルは次のとおりです。
cat /etc/postfix/client_checks
ip.address.123.456 OK
ip.address.789.123 REJECT
postmap
プレーンテキスト列形式のファイルを作成したら、そのファイルをデータベースファイルに出力するようにコマンドを実行する必要があります。
postmap /etc/postfix/client_checks
受信者が 1 人または 2 人のシステムでは、エイリアスを介して転送ルールを設定するのは非常に簡単です。
man aliases
man postaliases
ファイル形式とプロセスはほぼ同じです。エイリアス名を 1 行ずつ入力し、コマンドを実行してpostaliases
データベースを作成します。
より複雑なエイリアスの場合、正規表現をエイリアステーブルに含めることができます。
man regexp_table
...
EXAMPLE SMTPD ACCESS MAP
# Disallow sender-specified routing. This is a must if you relay mail
# for other domains.
/[%!@].*[%!@]/ 550 Sender-specified routing rejected
# Postmaster is OK, that way they can talk to us about how to fix
# their problem.
/^postmaster@/ OK
# Protect your outgoing majordomo exploders
if !/^owner-/
/^(.*)-outgoing@(.*)$/ 550 Use ${1}@${2} instead
endif