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:60000

smtpd制限は非常にわかりやすく、チェックのいずれかがメッセージを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

Share: X/Twitter LinkedIn

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

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