Postfix設定 · 3 min read · Nov 14, 2025

Postfix スパムフィルターの設定 - ページ 2

2 Postfix の設定

Postfix のソースコードからサンプルファイルが必要です。ここで取得するソースコードは、Ubuntu/Debian パッケージメンテナによって変更される前のオリジナルのソースコードです。

cd /usr/local/src  
  
wget http://us.archive.ubuntu.com/ubuntu/pool/main/p/postfix/postfix_2.3.3.orig.tar.gz  
  
tar xzvf postfix_2.3.3.orig.tar.gz

Postfix を停止します:

postfix stop

“overwrite?” に対して “n” と答えることを確認してください。各セクションを個別に実行します:

cp -i /usr/share/postfix/main.cf.debian /etc/postfix/main.cf  
  
cp -i /usr/local/src/postfix-2.3.3/conf/* /etc/postfix  
  
cp -i /etc/postfix/header_checks /etc/postfix/body_checks  
  
cp -i /etc/postfix/access /etc/postfix/sender_access

2.1 master.cf の編集

ところで、/etc/postfix フォルダーにある 2 つの Postfix 設定ファイルに注意してください。多くの管理者が master.cf と main.cf を混同しています!

まず、現在の master.cf をバックアップします:

cp /etc/postfix/master.cf /etc/postfix/master.cf-orig

master.cf を編集します:

vi /etc/postfix/master.cf

pickup サービスタイプの下に 2 つの項目を追加する必要があります。pickup サービスはローカルメール(ローカルは「このマシン上」を意味します)を「ピックアップ」して配信します。後で、このボックスが私たちにメールする日次/週次レポートを作成します。このレポートには、レポート自体をスパムとして分類する内容が含まれるため、このマシンによって生成されたメールのコンテンツフィルタリングを回避する方法です。

‘pickup’ サービスタイプのすぐ下にこれを追加します:

         -o content_filter=
         -o receive_override_options=no_header_body_checks

完了すると、次のようになります:

pickup    fifo  n       -       -       60      1       pickup
         -o content_filter=
         -o receive_override_options=no_header_body_checks

2.2 main.cf の編集

これは Postfix のメイン設定ファイルです。詳細については、main.cf ファイルのコメント、/usr/local/src/postfix-2.3.3/README_FILES のドキュメント、または Postfix ウェブサイト http://www.postfix.org/documentation.html をお読みください。

まず、main.cf ファイルをバックアップする必要があります。

cp /etc/postfix/main.cf /etc/postfix/main.cf-orig

スパムフィルターを設定してすべてのメールを別のサーバーに中継するため、Postfix が「リレードメインアドレスクラス」と考えるものを使用します。これは本質的に、Postfix の 300 以上の設定可能なパラメータの中から、私たちの目的に最も適した小さなグループのパラメータを使用することを意味します。このアドレスクラスについては、ここに説明されています: http://www.postfix.org/ADDRESS_CLASS_README.html#relay_domain_class。私たちは別のサーバーのためにプライマリ MX としても機能しているので、適切なセクションをお読みください: http://www.postfix.org/STANDARD_CONFIGURATION_README.html#backup。

Postfix では、アイテムをルックアップテーブルに保存することが一般的です。Postfix が使用するデータを保存するために、いくつかのハッシュテーブルを使用します。これらのテーブルにプレーンテキストデータがあると、postmap コマンドを使用して、Postfix が最終的にデータを取得するために使用するバイナリファイル(Berkeley DB 形式)を作成します。たとえば、「sampletext」というファイルがあり、sampletext を postmap すると、新しいファイル「sampletext.db」が作成されます。Postfix は「sampletext.db」からデータを取得し、「sampletext」からは取得しません。Postfix がデータを保存するために使用できる他のタイプのデータファイルは 1 ダース以上あります。ハッシュテーブルは、私たちが使用するいくつかのテーブルに適した選択肢であり、pcre(Perl 互換正規表現)は、コンテンツフィルタリングデータを保持するために使用するいくつかのテーブルに適しています。最も単純な形では、ハッシュテーブルは 2 つのデータ、キーと値で構成されます。通常、キー/値ペアと呼ばれます。キーと値はホワイトスペース(通常はスペースまたはタブ)で区切られます。Postfix で使用する典型的なテーブルのデータは次のようになります:

[email protected] OK
[email protected] OK
[email protected] OK

推奨読書: http://www.postfix.org/DATABASE_README.html。

main.cf を編集するために postconf を使用します。ファイルにパラメータを vi で入力するのではなく、コマンドボックスに表示されるように、”” マークが必要です。

2.2.1 alias_maps

ここでデフォルト設定を修正する必要があります:

postconf -e "alias_maps = hash:/etc/aliases"

エイリアスファイルを作成します:

newaliases

/ etc/ ディレクトリに aliases.db ファイルが作成されたことがわかります。これが Postfix が通常読み取るものです。適切なエイリアスファイルがあるため、すべてのメールを中継するようにシステムを構成するため、エイリアスファイルは Postfix によって無視されます。代わりに、アドレスリダイレクトのために virtual_alias_maps を設定します。/etc/aliases ファイルが欠落していると、他のプログラムが正しく動作しない場合があるため、削除しないでください。

2.2.2 myorigin

このマシンで作成されたメールのドメイン名が表示されます。たとえば、cron が “[email protected]” にメールを送信すると、それは “[email protected]” から送信されたように見えます。

postconf -e "myorigin = example.com"

もちろん、上記のすべてのコマンドで、”example.com” のような例のパラメータを自分の特定の値に置き換えてください。

2.2.3 myhostname

Postfix システムを実行しているマシンの完全修飾ドメイン名 (FQDN) です。

postconf -e "myhostname = sfa.example.com"

2.2.4 mynetworks

これらは私が信頼するマシンであり、任意の宛先にメールを中継します。一般的には、これは私の LAN に設定されているか、1 台または数台の信頼できる内部メールサーバーに設定されます。relay_domains とともに、これは「オープンリレー」になる可能性を避けるために正しく設定することが重要です。言い換えれば、あなたのボックスは、ビジネス上の理由がないドメインにメールを受け入れて転送する可能性があります。オープンリレーになることは深刻な問題であり、さまざまなインターネットのアンチスパムリストによってブラックリストに載る原因となる可能性があります。他の問題もあります。単一のコンピュータ、複数の個々のコンピュータ、または指定されたネットワーク上の任意のコンピュータを指定できます。また、IP アドレスの前に感嘆符を付けることで、ネットワーク内の特定のホストを除外することもできます。複数の内部メールサーバーを扱う場合や、複数のマシンやサブネットがこのサーバーを通じて中継されることを許可したい場合(注意!)、CIDR 形式でこのパラメータに追加し、ネットワークを次のように区切ります:

postconf -e "mynetworks = 127.0.0.0/8, 222.222.222.222/24, 10.10.10.10/24"

上記は、ネットワーク 222.222.222.222/24 および 10.10.10.10/24 上のマシンがこのボックスを通じて smtp メールを中継できるようにします。127.0.0.0/8 は、ローカルサーバーが送信できるようにするために必要です。これを少なくとも入れておく必要があります。単一のコンピュータの IP アドレスを指定することもできます。ドット付きの十進法のネットマスク(例: 255.255.255.240)のみを知っていて、それを CIDR 形式に変換する必要がある場合は、http://www.wildpackets.com/products/free_utilities/ipsubnetcalc/overview を試してください。(ネットワーク上の IP アドレスを入力し、サブネット情報タブを選択し、サブネットマスクを選択すると、ネットワークはサブネット ID/マスクビットになります。)または、http://www.belchfire.net/webtools/cidr_conversion_table.html を見てください。

このサーバーを通じて中継されるネットワークやコンピュータがない場合は、127.0.0.0/8 アドレスのみでこのコマンドを実行します。

2.2.5 message_size_limit

Postfix が「フロントドア」で許可する最大サイズのメールです。

postconf -e "message_size_limit = 10485760"

上記は、最大 10MB のメールを許可します。値はバイト単位です(1010241024)。これを超えるメールは、アンチウイルススキャナー(ClamAV)によってバイパスされる可能性があります。10MB より大きなファイルをスキャンするように ClamAV を設定する場合は、これを増やすことができます。10MB より大きなメッセージを許可する場合は、RAM に注意してください。

2.2.6 local_transport

ローカル配信の試行に対してエラーメッセージを返します。

postconf -e "local_transport = error:No local mail delivery"

2.2.7 mydestination

空の mydestination は、Postfix にこのマシンが最終目的地ではないことを伝えます。

postconf -e "mydestination = "

2.2.8 local_recipient_maps

空の local_recipient_maps は、Postfix にローカルメールボックスがないことを伝えます。

postconf -e "local_recipient_maps = "

2.2.9 virtual_alias_maps

私たちのスパムフィルターは postmaster@yourIP のメールを受信できる必要があります。報告によると、実際にこの機能が存在することを期待するものがあります。また、abuse@yourIP へのメールも許可します。ローカルメール配信を許可しないため、スパムフィルターの IP アドレスに宛てられたメールはエラーメッセージで拒否されます。virtual_alias_maps を設定することで、これら 2 つのアカウントへのメールを内部アドレスに転送できるようになります。Exchange サーバーが「root」、「postmaster」、および「abuse」に宛てられたメッセージを受信するように設定されていることを確認してください。

仮想ファイルへの参照を設定します:

postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"

次に、仮想ファイルを編集します:

vi /etc/postfix/virtual

仮想ファイルの先頭に次の 2 行を追加します:

postmaster [email protected]
abuse [email protected]

ファイルを保存して終了し、Postfix が使用するバイナリファイルを作成します:

postmap /etc/postfix/virtual

2.2.10 relayhost

/etc/postfix/relayhost は、スパムフィルターがどのように送信メールを送信するかを示します。relayhost には、送信メールに使用するメールサーバーの IP または FQDN が含まれます。言い換えれば、ローカルでないメール、私たちのドメイン以外のドメインに向けられたメールです。/etc/postfix/transport ファイルと混同しないでください。transport は、私たちのローカルドメインのいずれかに向けられた受信メールをルーティングするために使用されます。transport については後で説明します。

relayhost が空白または未設定の場合、私たちのスパムフィルターがその目的に使用されます。

注意: このコマンドでは、ブラケット [] が必要です。
postconf -e "relayhost = [mymailserver.example.com]"

オプションとして、スパムフィルターを送信 SMTP サーバーとして設定できますが、まず逆引き DNS レコードを設定し、もちろん「A」レコードと「MX」レコードを設定して、インターネット上の他のサーバーがあなたのメールを受け入れるようにする必要があります。クライアントや他の SMTP サーバーを再構成して、送信メールにスパムフィルターを使用するようにすると、そのメールは受信メールと同じスキャンプロセスを経ます(それを防ぐための特別な調整を見つけない限り)。これらがまだ設定されていない場合は、現在の作業中の送信メールサーバーで relayhost を一時的に設定することが非常に便利です。

また、指定した relayhost がこのマシンからのメールを受け入れるように設定されていることを確認し、そのマシンがこのマシンを送信メールに使用していないことを確認してください(「ループ」と言えますか?)。

2.2.11 relay_recipient_maps

私たちは、受け入れるすべてのドメインのすべてのユーザーのテーブルを構築します。このテーブルは、私たちのドメインに存在しないユーザーに宛てられたメールを拒否するために使用されます。まだ慌てないでください… 現時点では、テーブルの構造を設定するだけです。Exchange を使用している場合、relay_recipients テーブルを構築するプロセスを自動化する方法が記載された HOWTO が利用可能です。最近、スパマーが辞書攻撃を仕掛けることが非常に一般的になっています。偽のユーザー名を使用してドメインに数千のメッセージを送信します。relay_recipients テーブルに有効なユーザーを入れない限り、私たちのスパムフィルターはこれらすべてを処理しなければなりません。これの重要性を過小評価しないでください。このファイルの変更方法を知っているのはあなたの組織の中であなた一人ではないことを確認してください。スパムフィルターが機能するようになったら、自動化について戻ってきます。管理可能な数のユーザーがいる場合は、手動で入力してください。

データを保存するために作成するファイルへの参照を設定します:

postconf -e "relay_recipient_maps = hash:/etc/postfix/relay_recipients"

次に relay_recipients を編集します:

vi /etc/postfix/relay_recipients

今のところ、私たちのドメインで受け入れるすべてのユーザーのメールを受け入れるので、次の形式で受け入れるメールの各ドメインを入力します:

@example.com OK
@example2.com OK
@example3.com OK

次に、Postfix が使用するバイナリファイルを作成します:

postmap /etc/postfix/relay_recipients

上記のエントリは一時的なものです。これは、あなたのドメインへのメールを許可するワイルドカードです。近い将来、上記のエントリを削除し、あなたの有効な受信者のメールアドレスをすべて置き換える必要があります。relay_recipients ファイルに各ユーザーを個別に入力する準備ができたら、まず、ドメイン内のすべてのユーザーへのメールを許可するデータを削除(またはコメントアウト)し、次に各ユーザーを個別に次の形式でリストします:

[email protected] OK
[email protected] OK
[email protected] OK

実際には、この特定のファイルでは、各ユーザーの後にリストされている値「OK」は何のためにも使用されませんが、ハッシュテーブルにはキーの後に値が必要です。注意してください。このファイルから [email protected] を削除することで、インターネットのユーザーが [email protected] にメールを送信するのを防ぐことができますが、あなたのサーバーのいくつかがこのマシンを使用して root にメールを送信する必要がある場合は、これを行わないでください。Exchange を使用している場合、こちらに HOWTO があります。Exchange を使用していなくても、ファイル転送に関する情報が役立ちました。http://www2.origogeneris.com:4000/relay_recipients.html - http://www-personal.umich.edu/~malth/gaptuning/postfix/ - http://www.unixwiz.net/techtips/postfix-exchange-users.html - http://postfix.state-of-mind.de/patrick.koetter/mailrelay/ - http://doc.nettools.ru/Unix/Postfix&intserver/

2.2.12 transport_maps

Postfix に transport ファイルを探す場所を指示します。transport ファイルを使用して、Postfix に私たちのドメインの有効なメールをどこに転送するかを指示します。transport の設定は relay_recipients の設定に似ています。

main.cf にそれへの参照を作成します:

postconf -e "transport_maps = hash:/etc/postfix/transport"

次に transport を編集します:

vi /etc/postfix/transport

メールを処理する各ドメインについて 1 行を追加します。以下の例に似ています。IP アドレスは、私たちのドメインに宛てられたメッセージの最終目的地のサーバーのものです(私たちの Exchange サーバー)。これらのアイテムをファイル内のどこに配置しても構いませんが、私はそれらを上部に配置するのが好きです。

example1.com smtp:[10.10.10.100]
example2.com smtp:[10.10.10.101]
example3.com smtp:[10.10.10.102]

これらの行にはブラケットを含めてください!)。IP アドレスの代わりに FQDN ホスト名を使用することもできます(例: smtp:[exchange1.example.com])。

次に、Postfix が使用するバイナリファイルを作成します:

postmap /etc/postfix/transport

2.2.13 relay_domains

このシステムがメールを中継する宛先ドメイン(およびそのサブドメイン)です。ここには、メールを受け入れる責任があるドメインのみをリストする必要があります。これらのドメインへのメールを中継することを許可するだけでなく、この設定は、ここにリストされていないドメインへのメールを中継しないことを示唆しているため、スパムフィルターがオープンリレーになるのを防ぐための重要なコンポーネントです。

postconf -e "relay_domains = hash:/etc/postfix/relay_domains"

relay_domains を編集します:

vi /etc/postfix/relay_domains

メールを処理する各ドメインについて 1 行を追加します。以下の例に似ています:

example1.com OK
example2.com OK
example3.com OK

このファイルは現在 relay_recipients と非常に似た形式を持っているため、2 つを混同しないでください。このファイルには、ドメイン名の前に ‘@’ を含めることはできません。ちょっと言っておきたかったのですが、非常に賢い人々がこれを行ったことが知られています…

次に、Postfix が使用するバイナリファイルを作成します:

postmap /etc/postfix/relay_domains
注意: relay_recipients、relay_domains、および transport は、非常に親密になるファイルです。ドメインにユーザーを追加する必要があるたびに、ドメインを追加またはリストから削除する必要があるたびに、これら 3 つのファイルに移動して編集する必要があります。編集後、各ファイルで postmap を実行し、'postfix reload' で Postfix を再起動します。最後のページには、一般的なタスクのクイックリファレンスとしてスパムフィルターにコピーできる README が含まれる「メンテナンス」部分があります。

2.2.14 recipient_delimiter

現在の SMTP/POP3/IMAP サーバーがアドレス拡張を使用するように設定されている場合(たとえば、 [email protected])は、recipient_delimiter を現在使用している区切り文字に合わせて設定する必要があります。これは、メールクライアント (MUA) を使用してメールを送信する際に、複数の人を区切るために使用しているコンマとは関係ありません(例: [email protected], [email protected], [email protected])。GMail を使用している場合は、これに慣れているかもしれません。GMail アカウントがある場合、次の形式でメールを送信できます。たとえば、[email protected] として、GMail でフィルターを設定して、宛先アドレスに ‘testtag’ を付けて受信トレイをスキップすることができます。最近、この機能の一般的な使用法は、任意の Web サービスにサブスクリプションを登録する際にこれらのタグを使用し、その後タグに従ってフィルタリングすることです。とにかく、これを持っている場合は、私が何を言っているのかわからない場合は、「受信者区切り文字を使用しない」手順に従ってください。

3 典型的な設定 - 1 つを選択してください。

  1. 受信者区切り文字を使用しない:
postconf -e "recipient_delimiter = "
  1. 現在プラス記号を使用:
postconf -e "recipient_delimiter = +"
  1. 現在マイナス記号を使用:
postconf -e "recipient_delimiter = -"

2.2.15 NAT/プロキシ設定(オプション)

(そして、あなたが提示する IP アドレスがスパムフィルターの IP アドレスでない場合、あなたが NAT ファイアウォールまたはプロキシサーバーの背後で実行するように設定されている場合のみ)次の 2 行を main.cf に追加し、proxy_interfaces をコメント解除して設定してください(60.50.40.30 は公開 IP アドレスを表します):

# ここにあなたの NAT/プロキシの外部アドレスを指定してください。
#proxy_interfaces = 60.50.40.30
Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。