問題タブ [milter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - Postfix before-queue (perl) milter の実行中にキュー ID を取得する
問題:
メール内の特定のヘッダーの存在を送信先の IP アドレスと送信リレー ホストの TCP ポートに結び付ける Postfix の milter を作成しようとしています。
Postfix のmilter ガイドに従うと、milter を実装する必要があるようですbefore-queue
。
これには、 Sendmail::Milter perl モジュールを使用します。
中継先の最終的な宛先 (IP とポート) を除いて、ヘッダー、エンベロープなどで必要なすべてを取得できます。明らかに、それはmilterにとって理にかなっています。before-queue
リレー情報はどこで入手できますか?
Postfix ログを見ると、次の形式のメッセージが表示されます。
ログ行のいくつかには、私が探しているリレー情報があります。
それはまさに私が探しているものですADDR
。PORT
これXXXXXXXXXX
は、ログですべてを結び付けているようです。これは、話している内容に応じて「キュー ID」または「ジョブ ID」と呼ばれていると思われます。
milter からその Queue/Job ID を取得できればXXXXXXXXXX
、ログを結び付けても問題ありません。
試しましたか?
コールバックから呼び出すことで、ベンダー固有の情報を取得できるよう$ctx->getsymval SYMNAME
です。
milter ガイドには、「キュー ID」を取得するための次のようなコードがあります。
getsymval
そのジョブIDを(およびそのSYMNAME
可能性がある)または他のコンテキストメソッドを介して取得できるかどうかはわかりません。
何か案は?
gmail - Postfix から Gmail アカウントにメールを送信できません
Gmailアカウントでメールを送信する際に問題があります. キューに表示されていますが、処理していません。ログを見ると、gmail に送信しようとすると次のメッセージが表示されることに気付きました。
c - milter コールバックは本当に再入可能である必要がありますか?
Sendmail 用の milter を開発する必要があり、どの言語/フレームワークを使用するかについて長い間考えてきました。最後に、milter API を直接使用してプレーン C で実行することにしました。
milter API のドキュメントを読んで、概念を理解したと思います。しかし、私が非常に心配していることが1つあります。このセクションから:
1 つのフィルタ プロセスで、任意の数の接続を同時に処理できます。したがって、すべてのフィルタリング コールバックは再入可能である必要があり、適切な外部同期メソッドを使用してグローバル データにアクセスします [...]。
コールバックがスレッドセーフでなければならない理由はよく理解できますが、再入可能でなければならない理由はわかりません。これらのコールバックが割り込みまたはシグナル ハンドラから呼び出されるとは想像できません (おそらく、アボート コールバックを除いて、これを読み直す必要があります)。
再入可能であるという要件の問題は、再入可能関数が再入可能でないコードを呼び出してはならないことです。したがって、コールバックが本当に再入可能malloc()
である必要がある場合は、そこにある他のほとんどのライブラリ関数を使用できませんでした。からman 3 malloc
:
マルチスレッド アプリケーションでの破損を回避するために、ミューテックスが内部で使用され、これらの関数で使用されるメモリ管理データ構造が保護されます [...]
これは確かにそれmalloc()
がスレッドセーフであることを意味し、おそらくmalloc()
再入可能ではないことを意味するため、それを使用する関数はありません。
だから私は2つの質問があります:
1) milter コールバックは本当に再入可能である必要がありますか? それとも、これは milter API ドキュメントの「スレッドセーフである必要がある」という非常に奇妙な言い回しですか?
2) 本当に再入可能にする必要がある場合、上記の問題をどのように回避できますか? malloc()
milter API の特性上、再入不可のライブラリ関数を使用せずにコールバックで合理的なことを行う方法はほとんど想像できません。
authentication - postfix: クライアント認証が失敗したことを Milter に通知していますか?
特定のクライアント接続試行が特に認証エラーのために失敗したことを postfix の下の milter に伝える方法はありますか?
おそらく私のセキュリティを突破しようとするために、同じクライアントからの SMTP 認証の試行が繰り返されて、私の電子メール サーバーが爆発することがあります。私は milter を実行していますが、これらの試行は CONNECT に続いて CLOSE として表示され、postfix ログに次のような情報を含むエラー メッセージが表示されます。
milter を使用してこれらの認証の失敗を追跡したいのですが、接続の失敗が特に認証の失敗によるものであることを postfix によって milter に通知できるかどうかわかりません。
これらの障害を探すために postfix ログをスクレイピングすることはできますが、可能であれば、milter を介して追跡したいと思います。
後置milterでこれを行う方法はありますか?
前もって感謝します。