以下のFAQは主としてPostfixメーリングリストから持ってきたものです。メーリングリストについての情報はPostfixの公式ウェブサイトにあります。これはPostfix: TheDefinitive GuideのAppendixにあるFAQをさらに拡張したバージョンで、今も成長し続けています。IKEDA Nozomu によって日本語に翻訳されています。このページに対して何か質問やコメント、提案があれば、それらを私 <kdent@seaglass.com>に送ってください。
質問は以下のカテゴリに分類されています:
![]() | Postfixメーリングリスト | ![]() | Postfix のコンパイル |
![]() | 一般的な質問 | ![]() | エイリアス |
![]() | エラー・警告メッセージ | ![]() | メールキュー |
![]() | ロギング | ![]() | DNS問題 |
![]() | バーチャルドメイン | ![]() | UBEブロック |
![]() | アンチウィルス |
FAQ全体がこのHTMLファイルに含まれているので、FAQ内の検索にはブラウザの検索機能が使えます。
(訳注: これは Kyle Dent さんがまとめたPostfix の FAQを、許可をいただいて日本語に翻訳したものです。翻訳に関する質問等はKyle さんではなく、ike@kobitosan.netまでお送りください。)
| 1. | Postfixメーリングリストの購読をやめるには? |
|---|---|
| 2. | メーリングリストにメッセージを送ったのに返事がありません。他の多くの質問には返事があるのに。私は... |
| 3. | make を実行したらこんなエラーがいっぱい出ました:gcc -Wmissing-prototypes -Wformat -g -o -I.... |
|---|
| 31. | エイリアスにあるリストの最初のアドレスだけがメッセージを受け取れます。でも、それ以外... |
|---|---|
| 32. | このようなエイリアスで、info: peter,heloise 誰かがメッセージを info と peter の両方に送る... |
| 33. | あるリストから展開されるアドレスが何かを知るためにエイリアスリストのテストをしようとして... |
| 51. | ホストが見つからないっていうエラーを受け取ったんだけど、検索してみたら答が返ってきま... |
|---|---|
| 52. | 私の場合、host -t MX example.comをやってみました。私は答を得られたのに、Postfixは "Host... |
| 53. | PostfixがMXレコードを無視してAレコードのシステムに直接配送しようとしているみたい。... |
| 54. | バーチャルエイリアスでプログラムにメッセージを配送する方法ってある? |
|---|---|
| 55. | postmaster というアドレスのようなグローバルなバーチャルエイリアスをつくって、私... |
| 73. | ある添付ファイルを、ファイル名の拡張子に基づいてブロックすることってできるの? |
|---|
1.(訳注: 本家の)Postfixメーリングリストの購読をやめるには?
メッセージの本文に "unsubscribe postfix-users"と書いたメールを <majordomo@postfix.org> に送ってください。こんなメッセージになるはずです:
To: <majordomo@postfix.org>From: <you@yourdomain.com>Subject:unsubscribe postfix-users
2.メーリングリストにメッセージを送ったのに返事がありません。他の多くの質問には返事があるのに。私は何か間違ったことをしたのでしょうか?
実際には、Postfixメーリングリストでは返事がもらえないことはほとんどないです。かなり寛大なリストなので。でも、確実に答がもらえるように、十分な情報を提供するための基本的な投稿ルールをいくつか挙げておきましょう:
3.make を実行したらこんなエラーがいっぱい出ました:
gcc -Wmissing-prototypes -Wformat -g -o -I. -I../../Include -DLINUX2 -c ...
どうやったらこのエラーを回避できるの?
これはエラーじゃないです。'missing-prototypes' っていう文字列は、プロトタイプが前で宣言されずにグローバル関数が定義されたら警告を表示しろってコンパイラに伝えるためのディレクティブです。あなたが見た行はビルドプロセスからの正常な出力です。
4.接続してきたクライアントにgreetingを送る時にPostfixがつかうバナーを変えるには?
smtpd_banner パラメータで設定します。デフォルトでは次のように設定されます:
smtpd_banner = $myhostname ESMTP $mail_name
普通はこのバナーを変えない方がよいでしょう。これを変えるにしても、最初の "$myhostname ESMTP" は規格が要求しているので絶対にそのままにしておくべきです。
5.Postifxがバウンスメッセージを送るときに、送信者に"Forfurther assistance, please send mail to <postmaster>"と伝えます。しかし、そのアドレスに私のドメイン名を含めたい、つまり<postmaster@example.com> としたいのです。どうすればよいのでしょう?
これには通知を受け取った人たちが、その人のローカルのpostmasterに連絡を取るようにという意味が込められているのです。問題を扱う必要があるのはたぶん彼らなので。本当にこれを変えたいんだったら、ソースコードをいじる必要があります。
6.ソースコードを修正するにはどうすればいいの?
そんな質問をする人は修正しちゃダメです。そのまま使い続けるか、修正してくれる C 使いを探しなさい。
7.mbox形式とMaildir形式のメールボックス、どちらがよいでしょう?
場合によります。重要な点として、NFS越しにメール置き場をマウントするんだったら、mboxを使っちゃダメです。その他の点では、mboxはほとんど一般的にサポートされてるけれど、複数のプログラムがメールファイルにアクセスする必要がある場合にはファイルロック問題の影響を受けやすい、maildirフォーマットはファイルロック問題はなくなったけど、膨大な数のメッセージをサーバに置いておくユーザがいるようなシステムでは拡張性がないかもしれない、という感じです。
パフォーマンスを考慮しても、やっぱり場合によります。maildirでは特定のメッセージを読んだり削除したりする分には多分速いけど、メールファイルに新しいメッセージを追加するのはおそらくmboxの勝ちです。でもPostfixの観点からは、そんなのはたいした問題じゃないです。それよりもPOP/IMAPサーバに何を使うかとかの、他の要因で決めたらどうでしょう。全て同じだったら、たぶんmaildirを選ぶのがよいでしょう。
8.main.cfに'include'ディレクティブみたいなのはないですか?
ないです。複雑な設定をするたいていの管理者は、必要なファイルをcat でまとめる Makefile を作っちゃいます。他に日常的な管理業務を持ってるなら、Makefileにそれも付けちゃいましょう。Makefile はこんなエントリになるでしょう:
main.cf: file1 file2 file3 cat file1 file2 file3 > main.cf.new mv main.cf.new main.cf
そしてmake main.cf と叩いて、設定ファイルを再構築します。
9.メールの配送確認を受け取ることはできませんか?
今のところPostfixではできません。
10.特定のアドレスがemailメッセージを受け取るたびに、自動的にリプライを送るようにするもっともよい方法は?
Unixのほとんど全てのバージョンには
11.私のメールサーバから送られるすべてのemailの最後に免責条項(やその他の文章)を追加するには?
これはPostfixでは意図的に直接実装されてません。MTAの仕事じゃないし、MIMEやデジタル署名を考えると、思ったほど単純じゃないのです。MIMEメッセージには構造があって、それがとても複雑になりえます。デジタル署名は、署名されたメッセージが改変されていないことを署名するので、メッセージの最後にフッタを付けると、両方を壊すことになります。短い文章をemailメッセージのヘッダに付ける人もいるけど、多分ほとんどのユーザにはその分は見えないでしょう。クライアントを設定して、要求された文章を加えるのが本当の解でしょう。
そうは言ったものの、文を追加するようなコンテンツフィルタを設定することも可能です。以下はコンテンツフィルタを使うときのPostfix設定の注意点です。フィルタはMIMEを考慮しているべきです。また、あなたはデジタル署名は使えなくなることを認識しておくべきです。
12.すべてのメッセージのコピーを取っておくには?
always_bcc パラメータにアドレスを指定しておきます。そのアドレスが全てのメッセージのコピーを受け取ります。バージョン 2.1 (とその前のスナップショット版) 以降だと、特定のユーザ宛のメッセージのみを保存するのに、
13.ユーザのメールボックスにクオータやサイズ制限をかけるには?
ホントはPostfixの機能じゃないのですが、mbox-形式のメールボックスを使っているのであれば、求めているものは
通常のオペレーティングシステムやIMAPサーバの設定で実装される、メール格納場所で強制するメールボックスクオータがもっとも良い方法でしょう。IMAPサーバがLMTP越しにメッセージを受け取る場合、Postfixがメッセージを受け取るまでクォータを超える状況を検出できないので、バウンスされることになってしまいます。クォータを超えたユーザ宛のメールを拒否したいなら、クォータを超えたユーザをリストアップしたアクセステーブルを使う必要があるでしょう。
14.私のドメイン名がヘッダ中のあるアドレスについてしまうのはなぜ?例えば、Postfixをインストールする前は以下のようなヘッダだったのに:
To: billy
それが今はこんなふうになっちゃいます:
To: billy@mail.example.com
Postfixは規定された完全装飾なヘッダを要求するので、不完全なアドレスは修正しようとするのです。
もっともよい解決策は、ユーザがTo: やFrom:ヘッダで正しいアドレスを確実に指定することです。そしてネットワーク越しに受け取った完全修飾アドレスがないメッセージは、 15.私のPostfixが特定の機能付きでビルドされたかどうかを知る方法は?パッケージからPostfixを取ってきたけど、SASLやTLSサポートが含まれているかどうか知りたいので。 SMTPDが何をサポートしているかチェックする方法の一つは、それを聞いてみることです。次を試してみてください: 強調された行を入力してください。もちろん の出力結果も参考になるかも。サポートされた検索テーブルの形式が全て表示されます。 smtpd バイナリにコンパイルされたライブラリもチェックしてみましょう。多くのプラットホームでldd やelfdumpみたいなライブラリを表示するコマンドがサポートされてます。 そして最後に、Simon Mudd が 16.Postfixを25番以外のポートでlistenさせるには? master.cf ファイルの An entry like the following causes Postfix to listen on port 10025: 17.Postfixバージョン1.xxと2.xxの主な違いは何? “RELEASE_NOTES ファイルを読んでね。それを書いていると1週間の半分を費やしてしまうし、せっかく書いても誰も読んでくれないと悲しいから。” Postfix の作者、Wietse Venema。 ということです。 18.わかった。でも主に設定ファイルが心配なんです。アップグレードするときにどうすればいいの? もちろんアップグレードの前にバックアップを取りましょう。でも、 アップグレードして新しいバージョンになったとき、変更したくなりそうな互換性の調整が2つあります。一つは 19.私のシステムにはいくつかのインターフェースがあるんだけど、そのうち一つだけにPostfixをbindするには? Postfixで使いたいインターフェースのIPアドレスを 20.Sendmailでは4時間メッセージを配送できなかった時に警告を受け取っていました。Postfixでは受け取れないのですか? delay_warning_time パラメータがこれを制御してます。デフォルトでは送られないように0になってます。 21.mailbox_transport と mailbox_transport パラメータは メールボックス配送に影響するパラメータはいくつかあって、パラメータを優先度順に並べると、 22.我々の内部システムはすべてメールゲートウェイを中継します。メールが外に出て行く前に、メッセージヘッダから内部システムのホスト名やIPアドレスを削ったり隠したりする方法はないですか? 内部システムを示すようなヘッダ行にマッチして、そのアクションをIGNORE とするようなヘッダチェックを加えます。 23.存在しないメールボックスに送られたすべてのメッセージを特定のユーザに転送するようにPostfixを設定するには? luser_relay パラメータにアドレスを指定して、local_recipient_maps を無効にすればよいです。 これをやる時は気を付けて。spamの蔓延によって、指定されたアドレスは大量のジャンクメールを受け取ることになってしまうので。 24.わかった。じゃあ、Postfixにまずすべてのメッセージを受け取らせて、それから存在しないユーザ宛だとしてバウンスさせるには? コツは単にlocal_recipient_maps を無効にするだけです。SMTPサーバは全てを受け取った上で、その直後にローカル配送エージェントがユーザがいないことを見つけ、そしてメッセージがバウンスされます。あまりそうすることはおすすめできないけど。サーバがバウンス通知を送ろうとしてしまうような、大量のジャンクを受け取ることになるし。アドレスを詐称された罪のない人に嘘のバウンスメッセージがあなたの(またはおそらく他の)メールサーバから殺到することになってしまいます。 25.設定ファイルや検索テーブルを更新したときに、Postfixをリロードする必要はあるの? 更新したものの形式に依存します。 簡単な回答: Postfixが起動時にメモリに読み込むものはリロードが必要です。そんなファイルの例としては、 完全な回答: ほとんどのPostfixデーモンは寿命が短いので、デーモンが期限切れになって新しく起動されるときに、実際には新しい設定が自動的に認識されてしまいます。でも、 この回答を寄せてくれた Vi[ck]tor Duchovni さんに感謝します。 26.Postfixに恒久的なエラーコード (554)を返すように設定したはずなのに、一時的なエラー (454) を返します。なぜそうなるの? きっとsoft_bounce = yes にしてるんでしょう。それと、DNSに一時的な問題がある場合にもPostfixは自動的に恒久的エラーを一時的なエラーに変更します。 27.うちにはよく外出しているユーザが何人かいます。オープンリレーにしないで彼らが私のサーバを通してメールを送れるようにするには?送信者のアドレスが私のドメインからになっていたらリレーを許可するというだけではダメなの? 絶対ダメです。スパマーはあなたのサーバを使ってメールを中継させようとするときにあなたのドメインを使うことを知ってます。ユーザが静的なIPアドレスを持ってるんだったら、それを 28.次のような制限をmaster.cf ファイルのsmtpd制限に加える必要が出てきました: check_recipient_access と検索テーブルの間に必要なスペースはどうすればいいの? スペースの代わりにカンマを入れます: それとも、main.cf に必要な全ての制限を持つ変数を定義して、master.cf で使ってもよいでしょう: 29.クライアントがsmtpdサービスに接続するとき常に長い遅延が生じてしまうようです。接続を確立してからPostfixが200バナーを送るまでに1分もかかります。なぜこうなるのでしょう? この遅延はあなたのサーバのDNSリゾルバに原因があることがほとんどです。クライアントが接続するとき、Postfixは接続してきたクライアントのIPアドレスのホスト名を検索しようとします。リゾルバがちゃんと設定されていなかったりDNSサーバの応答が遅いと遅延が起こります。キャッシュのみのDNSサーバをPostfixサーバと同じシステムで動かすとよいでしょう。 リゾルバの設定ミスで最もよくあるのは、smtpdサービスがchrootされて動いていて、必要な設定ファイルが全てchrootの区画に揃っていないというものです。 30.SMTPD で外からの接続を受け付けないようにして Postfix を動かすことってできるの? できます。master.cf ファイルの 31.エイリアスにあるリストの最初のアドレスだけがメッセージを受け取れます。でも、それ以外は直接送られたメールは問題なく受け取れるのですが、エイリアスの一部になるとメッセージが届きません。 配送に外部プログラムを使ってるなら、それが同時に1アドレス以上を扱えないのではないでしょうか? そんな例が、例えば 32.このようなエイリアスで、 誰かがメッセージを できません。Postfixのアーキテクチャでは、こういう重複を検出するのはとても負荷が高いのです。これは高レベルのセキュリティとパフォーマンスを持つマルチコンポーネントシステムと、こういった重複を簡単に検出できるモノリシックシステムの間のトレードオフなのです。 33.あるリストから展開されるアドレスが何かを知るためにエイリアスリストのテストをしようとしています。他のメールサーバではEXPNコマンドを使って完全な受信者リストが得られたのに、Postfixでは動かないようです。 PostfixはEXPNをサポートしてません。Postfixのアーキテクチャとセキュリティ面での設計上、権限のないSMTPサーバはローカルエイリアスについて何も知らないのです。配送時に実際にエイリアスを展開するのは権限を持つローカル配送エージェントです。メーリングリストマネージャを使っているなら、リストに誰がいるかを知らせるコマンドがきっとあるでしょうし、そうでなければメールサーバシステムのエイリアスシステムをチェックする必要があるかもしれないですね。 34.メッセージを受け取れないようです。このエラーの意味は?:"<test@example.com>: mail for example.com loops back tomyself" PostfixはDNSの答があなたのサーバを示しているけど、サーバがそのドメイン宛のメールを扱うように設定されていない場合にこのエラーを報告します。Postfixは 35.なぜこんなメッセージがログに残っているの? そのファイルはみんな/etc にあるはずでしょ? Postfixのコンポーネントがchrootで動いていると、そのコンポーネントから見えるファイルシステムはqueue_directory(デフォルト:/var/spool/postfix) 以下のサブディレクトリに制限されてしまうのです。システムリソースのいくつかはchrootされたディレクトリにコピーしなきゃいけなくて、しかもPostfixはシステムのものとchroot環境のものの同期が取れているかどうかチェックします。 36.知らないユーザにメールが届くと、Postfixは "User unknown in(local|virtual|relay) recipient table." というメッセージを付けて拒否します。単にユーザが存在しないというようにすることはできない? それは、管理者としてのあなたに問題の解決策について役に立つ情報を提供しようという考えによるものです。単に "User unknown."とするために、 とすることもできます。 37.こんなのを受け取りました: 何が問題なの? ほぼ間違いなく、 38.必要ないって分かってるメールがキューにたまってるんだけど、何か消す方法はない? ALL はすべて大文字であること、そしてこのコマンドを実行してしまうとキューにある全てのメールを消してしまうことに注意が必要です。 39.mailq とpostqueueの間に奇妙な違いがあることがわかりました。mailqコマンドはキューには何もないって言うけど、 あなたが実行したmailq は Sendmail のものです。Postfixのインストールがどこかうまくいってません。Postfixは代替となるmailq コマンドをインストールします。Postfixのインストールを見直す必要があります。これはSendmailのmailq がPostfixの 40.メッセージが期限切れでバウンスされずにとどまっている時間って変えられないの? maximal_queue_lifetime パラメータが、配送できないと見なす前にメッセージがキューにとどまるべき時間を決めます。デフォルトは5日 (5d) です。 41.ある時間経ったら個々のメッセージを期限切れでキューから消すようにする方法ってないですか? それか、異なる配送先に対してキューの寿命を別々に持たせる方法は? キューファイルを明示的に期限切れにするようなオプションはありません。キューマネージャはメッセージの期限切れを、どれだけの間キューにいたかとmaximal_queue_lifetime の値(前の質問を参照) で判断します。キューにたまったメッセージには複数の受信者がいて単一の配送先じゃないかもしれないので、配送先ごとに別々のキュータイムを持たせることもできません。 また、Postfix の最近のバージョンでは 42.以前設定に問題がありました。今は直っていますが、システムは古い、間違った設定を使ったままでキューのメールを配送しようとしてしまいます。新しい設定を使わせるには何をしなきゃいけないのでしょう? postsuper -r コマンドで、もう一度メッセージをキューに入れてやる必要があります。 43.キューにたまっている大量のメールが、実際のemailアドレスではなく"MAILER-DAEMON"が作ったように見えるんだけど、これはどこから来たの? これらは、前に配送できなかったメールの元の送信者に配送できないという、あなたのサーバから来たバウンスメッセージです。あなたのサーバが存在しないユーザ宛のメッセージを受け取る場合に非常によく起こります。関連する質問 を読んでください。 すでに存在しないユーザ宛のメッセージを拒否しているのであれば、あなたのユーザの誰かがウィルスに感染しているために起こっているのかもしれません。元のメッセージがどこから来たのか確認するためにログをチェックしてください。 44.Postfixはどこに情報をログとして記録するのですか? Postfixはログのメッセージをシステムのsyslogdデーモンに記録します。実際のログファイルの場所を見つけるには、システムのドキュメントをチェックしてみてください。 45.To や From アドレスのような他の情報と一緒にメッセージのサブジェクトをPostfixにログとして記録させることはできますか? header_checks ファイルに、Subject:ヘッダに常にマッチしてその結果が 'WARN' となるようなエントリを加えると、サブジェクトをログに記録できます。 46.メールに何が起こっているのかを正確に知るための、デバッグオプションや冗長ログを記録するオプションのようなものってある? master.cf の特定のコンポーネントに、1つ、またはそれ以上-v オプションを加えて、ログを増やしてやることができます。 特定のサイトのトランザクションに関しての追加情報も、main.cf の 47.Fromアドレスに関するエントリが、私のログには見あたりません。どうなっているのでしょう? Fromアドレスはキューマネージャがログに記録します。 48.Postfixのログエントリを解析するのに便利なプログラムってない? PostfixのホームページにあるLogfile analysisを参照。 49.私が使っているウィルススキャンの方法では、すべてのメッセージがPostfixに再投入されますが、それだとすべて2回ログに記録されてしまいます。Postfixがある事柄だけログに記録しないような設定ってある? 本当にPostfixのログを制限したいわけじゃないよね? Postfixはいつか必要になるかもしれない全ての情報をログに記録するんです。その代わり、Unixには探している情報だけを取り出すための操作やフィルタリングなんかをおこなうツールがたくさんあります。例えば、もし2回目のメッセージ投入が 50.システム時計は正確なのに、メールログエントリは違う時刻になってしまいます。何が問題なの? chrootで動かしてますね。TIMEZONEを決めるのにシステムが使うファイルがchrootにあることを確認してください。 51.ホストが見つからないっていうエラーを受け取ったんだけど、検索してみたら答が返ってきました。なぜPostfixは見つけられないの? Postfix(のような全てのMTA)はメールをメール交換機(MX)に配送します。ドメインを探してDNSをチェックしているときに、MXレコードを検索していることを確かめてください。 52.私の場合、host -t MX example.com をやってみました。私は答を得られたのに、Postfixは"Host not found, try again" と文句を言うんです。 Postfixがchrootの中で動いているんでしょう。必要なファイルが全てchrootに揃っているか、確かめてください。特に 53.PostfixがMXレコードを無視してAレコードのシステムに直接配送しようとしているみたい。これって普通なの? main.cf で 54.バーチャルエイリアスでプログラムにメッセージを配送する方法ってある? 直接はできません。pipe配送やシステムのローカルアドレスに配送するように、virtual エイリアスを使ってアドレスを書き換える必要があります。 55.postmaster というアドレスのようなグローバルなバーチャルエイリアスをつくって、私の全てのドメインの 一言で言うと、できません。新しいドメインを追加するプロセスやスクリプトに必要なエイリアスを作るステップを入れることをおすすめできるだけです。 56.助けて! オープンリレーになってるみたい。ログにこんなメッセージがたくさん書かれてるのが見つかった: example.comなんて全然知らないんだけど。どうすればいいの? 落ち着いて。これはたぶん、あなたのシステムで配送できない偽装メッセージに対して、Postfixが送ろうとしているバウンス通知です。このログの前に、配送できない 57.助けて! オープンリレーになったかもしれない。どうやってチェックすればいいの? ネットワークの外にシステムにアクセスできるのであれば、それを使ってあなたのシステムを通して外部のアドレスに送るようなメッセージを送ってみてください。外部のシステムから、emailクライアントがあなたのシステムをSMTPサーバとして使うように設定します。それからあなたのシステムで宛先として扱わないアドレス宛にメールを送ってみます。これが配送されれば、オープンリレーで動かしてしまっています。 58.助けて! 間違いなくオープンリレーになってしまった。いろんなブラックリストに載っちゃったよ。Postfixの設定はあってるはずなのに。なぜ私のシステムは中継してしまったの? ファイアウォールのようなゲートウェイマシンやルータ、その他のメールシステムがインターネットとあなたのPostfixの間にある場合、その組み合わせでメールが自由に中継されるようになってしまっているかも。ゲートウェイシステムのIPアドレスが 59.エンベロープ送信者アドレスに何もないspamをたくさん受け取ったんだけど、これってブロックできない? リターンパスが空ということだけでメッセージをブロックしてはダメです。空のエンベロープアドレスを受け取ることは規格で要請されます。このテクニックはエラー通知がループするのを防ぐために使われます。なので、それ以外の手段でspamを区別する必要があります。 60.ある送信者アドレスをブロックするように制限しました。なぜ制限された送信者からのメッセージは、クライアントがMAILFROM コマンドを発行してすぐにブロックされないの? デフォルトでは、PostfixはRCPT TO コマンドを受け取るまではクライアントを拒否しません。そうしないと、拒否されたことを認識しないSMTPクライアントがあって、メッセージを送り続けようとしてしまい、本来より長く接続が続いてログが警告メッセージであふれてしまうことになるからです。デフォルトのもう一つの利点として、メッセージを拒否する前に、接続してきたクライアントの情報を完全にできるのです。デフォルトの動作は 61.header_checks や そんなことないです。多くの人がユニークな目印をRHSにつけて、ルールを識別します。簡単にナンバリングするのもよいでしょう。例えば、 とすると、このルールがメッセージを拒否するのに使われたときに、ログに "Message content rejected [182]" と書かれます。 62.応答しないサーバから存在しないユーザ宛のメールがたくさん来てしまい、存在しないサーバにバウンス通知を配送しようとして、キューが常にいっぱいになっちゃいます。これを防ぐ方法ってない? 存在しないユーザ宛のメールは受け取っちゃダメです。From アドレスはたいていニセモノなので、実際には送っていない人にメッセージをバウンスしてしまいます。そういったメールはキューに受け取らず、拒否 するように Postfix を設定しなければいけません。状況に応じてlocal_recipient_maps か 63.本体やヘッダのチェックを設定に加えて、あるサブジェクト行や添付ファイルをブロックするような正規表現を持つファイルを配置したけど、テストしてみたらブロックされるべきサブジェクトや添付ファイルを持つメッセージを送ることができてしまいました。私は何か間違ったことをしたのでしょうか? Postfixを再起動しました? それと、正規表現が期待した動作をするか確かめるために、postmap で正規表現をテストしてみる方がよいかも。 多くのemailクライアントで普通に表示されるものでも、エンコードされたメッセージ (base64等) はブロックできないことに気を付けて。メッセージが元々エンコードされてきたかどうかを知るには、Content-Transfer-Encoding: ヘッダを探してください。 64.たくさんのウィルスを止めるために、本体行チェックをいくつか設定に加えました。だいたいはうまくいくけど、時々使われてないようにみえるのはなぜ? すり抜けたメッセージはたぶんbase64か何かでエンコードされてます。前の質問を参照。 65.header_checks や あるユーザ宛だけののあるサブジェクトをブロックするように。 Postfix のヘッダ・本体チェックは同時に1行の論理メッセージしか考慮できないので、これはうまくいきません。簡単なチェックにしか使えないのです。もっとしっかりしたものが欲しければ、必要な賢さを持つコンテンツフィルタをセットアップするのがよいでしょう。 66.header_checks や ありません。ヘッダや本体のチェックは全てのメッセージにかけられるので、全てのメッセージに簡単に適用できるチェックにとどめるべきです。もっとしっかりしたものが欲しければ、必要な賢さを持つコンテンツフィルタをセットアップするのがよいでしょう。自分の所有するユーザ宛のコンテンツフィルタを無効にしたいだけなら、"TurningOff Body and Header Checks for Internal Users" を見てください。 自分専用のコンテンツフィルタを作りたいならそうすることもできるけど、SpamAssassin や Bogofilter なんていうスパムブロック用のツールもすでにたくさんあります。こういったツールはたいていホワイトリストルールを指定することもできます。Postfix Add-on Softwareページの "Virus/SPAM content filters" を見てください。 こちらも参照:$telnet mail.example.com 25Trying 192.168.100.11...Connected to 192.168.100.11.Escape character is '^]'.220 scallop.seaglass.com ESMTP PostfixEHLO localhost250-scallop.seaglass.com250-PIPELINING250-SIZE 10240000250-VRFY250-ETRN250-STARTTLS250-XVERP250 8BITMIMEquit
$ postconf -m
10025 inet n - n - - smtpd
/^received:.*192\.168\.144\.32/ IGNORE
luser_relay = infolocal_recipient_maps =
-o smtpd_recipient_restrictions=check_recipient_access hash:/etc/postfix/recipient_access
...-o smtpd_recipient_restrictions=check_recipient_access,hash:/etc/postfix/recipient_access
## main.cf#...other_restrictions = check_recipient_access hash:/etc/postfix/recipient_access reject_unknown_recipient_domain ...
## master.cf#...-o smtpd_recipient_restrictions=$other_restrictions
#smtp inet n - n - - smtpd
エイリアス
maildrop_destination_recipient_limit = 1
info: peter,heloise
エラー・警告メッセージ
warning: /var/spool/postfix/etc/services/services and /etc/services/services differwarning: /var/spool/postfix/etc/resolv.conf/resolv.conf and /etc/resolv.conf/resolv.conf differwarning: /var/spool/postfix/etc/hosts/hosts and /etc/hosts/hosts differwarning: /var/spool/postfix/etc/nsswitch.conf/nsswitch.conf and /etc/nsswitch.conf/nsswitch.conf differ
show_user_unknown_table_name = no
postfix/smtp[18860]: fatal: unknown service: smtp/tcp
メールキュー
#postsuper -d ALL
ロギング
/^subject:/ WARN
smtp inet n - n - - smtpd -v
debug_peer_list = example.comdebug_peer_level = 2
$grep -v "relay=vscan" maillog > analyze_log
DNS問題
example.com smtp:[mail.example.com]
バーチャルドメイン
UBEブロック
May 20 06:38:46 scallop postfix/smtp[21383]: connect to mail.example.com[10.11.12.13]: Connection refused (port 25)May 20 06:38:46 scallop postfix/smtp[21383]: 79AA4234A9: to=<jenny796@example.com>, relay=none, delay=55262, status=deferred (connect to mail.example.com[10.11.12.13]:Connection refused)
/freehotsex/ REJECT Message content rejected [182]
/^to: joey/ AND /^subject: hot deals/ REJECT
67.わかった。でもログからブロックされた文字列を含んだレポートを受け取れるようにしたいだけなんだけど。これを受け取れるようにできないの?
チェックをすり抜けるように、レポートを(base64なんかで)エンコードしたり、圧縮して添付として送ればいいんじゃない?
68.spamをブロックするためにブラックリストの一つを使ってて、それはうまくいってます。でもうちの顧客/パートナーでリストアップされてしまっているのがあって、うちのサーバは律儀にそこからのメッセージを拒否してしまうのです。ブラックリストを使ったままで、彼らのメッセージだけを許可する方法ってある?
あるアドレスやドメインからのメッセージを受け取るようにするホワイトリストを作ればよいかと。例:
## main.cf#smtpd_recipient_restrictions = permit_mynetworks reject_unauth_destination ...check_sender_access hash:/etc/postfix/whitelistreject_rbl_client dnsbl.njabl.org ...
## whitelist#@customer_domain.comOK
ホワイトリストが
69.header_checks や body_checks で作った正規表現って、どうやってテストすればいいの?
postmap コマンドを使ってやります。メッセージの1行を表す文字列を指定します:
$ postmap -q "Content-Type:..." regexp:/etc/header_checks
または、メッセージのコンテンツを持つファイルをリダイレクトしてやると、メッセージ全体をテストします:
$ postmap -q - regexp:/etc/body_checks < msg_file
postmap を使うのと実際にPostfixがメッセージをチェックするときで、気を付けないといけない違いが2つあります。postmapコマンドは複数行にまたがったヘッダ行を理解しないのと、
70.もし、accessマップであるドメインを
example.com REJECT No spam accepted
のようにブロックしたとすると、
parent_domain_matches_subdomains の設定によります。これが "smtpd_access_maps" を含んでいると、答は yes で、サブドメインはブロックされます。そうしたくなければ、
parent_domain_matches_subdomains = debug_peer_list,fast_flush_domains,mynetworks, permit_mx_backup_networks,qmqpd_authorized_clients, relay_domains
そうした場合でも、ピリオドで始まるエントリを加えてやれば、特定のドメインのサブドメインをブロックできます。
example.com REJECT No spam accepted.example.com REJECT No spam accepted
こうすると、
71.strict_7bit_headers = yes を設定している人はたいてい成功しているの?
このパラメータはかなり厳密になる傾向があって、たくさんのメールを拒否してしまいます。ヘッダにゴミのような文字がたくさんあるメッセージをブロックしたいだけなら、次の正規表現チェックを
/[^[:print:]]{7}/ REJECT Your mailer is not RFC 2047 compliantこれはヘッダに少なくとも表示できない文字が7文字あるメッセージをブロックします。
72.DNSでMXホストを2つ設定してます。1つ目のMXシステムでは完璧なスパムチェックを設定してるんだけど、プライマリサーバが使えるのに、バックアップMXに直接たくさんのスパムが配送されちゃいます。プライマリサーバが動いているときにはそっちに強制的にメールを送らせる方法ってない?
スパマーに配送先を強制する方法なんてありません。セカンダリMXシステムを動かしてるのなら、完全に同じUBEチェックを設定しているか確かめないと、それがメールを通しちゃいます。それを何らかの理由で同じ設定ができないのなら、使うのをやめるしかないです。多くのサイトで、まさにそんな理由で単一のメール交換機が動いてます。正規のメールだったらたいてい何日かは送り直そうとするので、メールサーバがかなり長い時間ダウンしている時にしかメールを失いません。
73.ある添付ファイルを、ファイル名の拡張子に基づいてブロックすることってできるの?
はい、header_checks を使って簡単なウィルスブロックができます。実行ファイルやその他の危険な拡張子を持つ添付ファイルがついたメッセージを拒否するようなチェックを設定します。こんなのからはじめたらどうでしょう (正規表現バージョン):
/^content-(type|disposition):.*name*=.*\.(exe|pif)/ REJECT We cannot accept executable attachments
そして pcre では:
/^content-(type|disposition):.*name\s*=.*\.(exe|pif)/ REJECT We cannot accept executable attachments
"exe" や "pif" の他に、あなたのユーザの環境で危険な拡張子の分 (ヒント: Windows にはたくさんあります)だけ追加すればよいでしょう。本当のウィルススキャンパッケージを使えばさらに幸せになれます。