Postfix設定 · 1 min read · Nov 12, 2025
Postfix設定を使用してスパムと戦う方法
Postfix設定を使用してスパムと戦う方法
このガイドでは、デフォルトのFalkoメールガイドを調整して、SPAMと戦うためのPostfix(+Auth SMTP + Quota)設定を学びます。 https://www.howtoforge.com/virtual_postfix_mysql_quota_courier これは、古いQmailシステムの後方互換性を少し許可します。
それでは始めましょう…
HowtoForgeガイドはすべてにおいて素晴らしいですが、もしあなたが毎分1000通のメッセージを処理する非常に忙しいメールサーバーを運営している場合、Spam AssasinはCPUを圧迫します。最良の答えは、RBL(リアルタイムブラックリスト)やRHBL(同様だが異なる)、グレイリスティング、Heloチェックの範囲で、メールがSpam Assasinに到達する前に停止させることです。
まず最初に、既存のsmtpd制限を変更し、/etc/postfix/main.cfに新しいチェックを追加して、システムが受け入れるメールの量を減らす必要があります。
### 不正な形式のメールを削除するためのチェック
smtpd_helo_required = yes
strict_rfc821_envelopes = yes
disable_vrfy_command = yes
unknown_address_reject_code = 554
unknown_hostname_reject_code = 554
unknown_client_reject_code = 554
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, regexp:/etc/postfix/helo.regexp, permit
### sender_checksを変更する際は、このファイルをpostmap を使用して再生成する必要があります。
smtpd_recipient_restrictions =
check_client_access hash:/etc/postfix/helo_client_exceptions
check_sender_access hash:/etc/postfix/sender_checks,
reject_invalid_hostname,
### Auth SMTPに問題を引き起こす可能性があるため、注意してください!
reject_non_fqdn_hostname,
##################################
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
permit_mynetworks,
reject_unauth_destination,
# RBL例外をここに追加します。rbl_client_exceptionsを変更する際は、このファイルをpostmap を使用して再生成する必要があります。
check_client_access hash:/etc/postfix/rbl_client_exceptions,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client sbl-xbl.spamhaus.org,
reject_rbl_client bl.spamcop.net,
reject_rhsbl_sender dsn.rfc-ignorant.org,
check_policy_service inet:127.0.0.1:60000
permit 次に説明しますが、まずいくつかのファイルを作成する必要があります。
最初に作成したいファイルは/etc/postfix/helo.regexpで、これには以下が含まれます:
/^subdomain\.host\.com$/ 550 自分のホスト名を使用しないでください
/^xxx\.yyy\.zzz\.xxx$/ 550 自分のIPアドレスを使用しないでください
/^\[xxx\.yyy\.zzz\.xxx\]$/ 550 自分のIPアドレスを使用しないでください
/^[0-9.]+$/ 550 あなたのソフトウェアはRFC 2821に準拠していません
/^[0-9]+(\.[0-9]+){3}$/ 550 あなたのソフトウェアはRFC 2821に準拠していませんこれだけで、HELOコマンドを送信し、IPまたはホスト名でメールを受信するサーバーを偽装しようとするスパマーを追い払うことができ、RFC 2821の準拠に満たないメールも追い払います。
次に、/etc/postfix/helo_client_exceptionsを作成する必要があります:
#これらのクライアントIPアドレスはfqdnチェックをバイパスすることが許可されています
# 以下のIPアドレスを識別するためのコメント
www.xxx.yyy.zzz OK このファイルは、悪い動作をするメールサーバーが正しいHELOを送信できず、そのソースからのメールを受け入れる必要がある場合に必要です。私の経験では、スタンドアロンデバイスやCCTVカメラなどは基準に従うのが苦手なので、これに対して例外を作成する必要があるかもしれません。
このファイルの変更が有効になる前に、次のコマンドを実行する必要があります。
postmap /etc/postfix/helo_client_exceptions
これにより、/etc/postfix/helo_client_exceptions.dbというファイルが作成されます。
次に、/etc/postfix/sender_checksがあります。これは、さまざまなFQDNチェックをバイパスし、特定の送信者を通過させることを許可します。これは、会社がdomain.comのような内部メールネットワークを運営しているが、メールがint.domain.comで実行され、int.domain.comのDNSが設定されていない場合に特に便利です。これはセキュリティには優れていますが、外部DNSが内部構造を知らないため、Postfixはint.domain.comを拒否します。
[email protected] REJECT
[email protected] OK 再度、このファイルを変更した後は、Berkeley DBファイルを作成する必要があるため、次のコマンドを使用して作成します:
postmap /etc/postfix/sender_checks
次に、RBLチェックがあります。RBLに特化した多くのウェブサイトがありますが、記事の長さを短縮するために、これらのリストは常に更新され、スパマーがメールを中継するために使用しているIPやホスト名を提供します。あなたのメールサーバーにメールを送信しようとする各IPは、これらのリスト(上記で使用されている4つ)と照合され、IPがRBLにリストされていない場合、メールサーバーはメールを受け入れます。もちろん、サーバーは意図せずにこれらのリストに載ってしまったり、スパムの発生後にブラックリストに載ったIPを削除するのに24時間かかることがあるため、これらのチェックをバイパスする方法を持つことが常に最善です。
そのために、/etc/postfix/rbl_client_exceptionsというファイルを作成します:
## ランダムなコメント
www.xxx.yyy.zzz OK 再度、Berkeley DBファイルを生成するためにpostmapを実行する必要があります。
postmap /etc/postfix/rbl_client_exceptions
smtpd制限の最終行は、グレイリスティングフィルターです。これについては詳細を説明しませんが、howtoforgeにはすでにガイドがあります。 https://www.howtoforge.com/greylisting_postfix_postgrey ですが、グレイリスティングを使用したくない場合は、単に次の行を省略してください。
check_policy_service inet:127.0.0.1:60000smtpd制限は非常にわかりやすく、チェックのいずれかがメッセージをPostfixキューに通過させるためのグリーンフラグを出すまで、ほとんどの回答が不明な場合は、明示的なNOが与えられない限り、メッセージはチェックのリストを下に移動します。
QMAILレガシー
DJB(ダン・バーンスタイン)は、SMTPの代替としてQMQPを開発しました。これは、オーバーヘッドが少なく、より高速であると言われています。したがって、古いQmail MTAをPostfixに置き換える場合は、QMQPのサポートを有効にする必要があります。
これを行うには、/etc/postfix/main.cfに次の内容を追加します。
qmqpd_authorized_clients = $mynetworks
qmqpd_error_delay = 5s
qmqpd_timeout = 300s 現実的には、何に対しても認証できますが、私はmynetworksに対して認証することにしました。上記をmain.cfに追加した後、/etc/postfix/master.cfをさらに修正し、次の内容が含まれていることを確認する必要があります。
628 inet n - - - 100 qmqpd あとはPostfixを再起動するだけです。
/etc/init.d/postfix restart
新しいQMQP対応のPostfixを確認するには、次のコマンドを入力します。
telnet localhost 628
IPによる認証(MS Exchangeサーバーでのスマートホスト中継に最適)
次に、ガイドを少し修正して、mynetworksの設定を/etc/postfix/main.cfを通じてフラットファイルよりも簡単にします。
次の内容を含む/etc/postfix/mysql-mynetworks.cfを作成します。
user = mail_admin
password = password
dbname = mail
table = allowed_hosts
select_field = 'IP'
where_field = IP
hosts = 127.0.0.1
additional_conditions = and active='yes' この時点で、次のSQLが必要です。
CREATE TABLE allowed_hosts (active enum(‘yes’,’no’) NOT NULL default ‘1’,IP varchar(15) NOT NULL default ‘’,Client varchar(128) NOT NULL default ‘’,Comments text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
最後に、Postfixのmain.cfのmynetworks行を次のように変更してこれを有効にします。
mynetworks = 127.0.0.0/8, proxy:mysql:/etc/postfix/mysql-mynetworks.cf 最後に、変更を適用するためにPostfixを再起動します:
chmod o= /etc/postfix/mysql-mynetworks.cf
chgrp postfix /etc/postfix/mysql-mynetworks.cf
/etc/init.d/postfix restart
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。