Kodama's home / tips.

  1. postfix の SPAM 対策
  2. 設定ファイル
  3. タール坑(tarpitting)
  4. SMTP 接続の検査
  5. HELO メッセージの検査
  6. MAIL FROM メッセージの検査
  7. RCPT TO メッセージの検査
  8. ヘッダ検査
  9. 本文の検査
  10. data 後の検査
  11. 対策の結果

参考リンク:

  1. S25R 方式 この文書の元ネタ1.
  2. Hatuka*nezumi / log: Postfix この文書の元ネタ2.
  3. Postfix 設定パラメータ postconf (5) man ページの日本語訳.
  4. Postfixのぺーじ−ホーム

postfix の SPAM 対策

Postfix の設定で, サーバアドレスなどの条件によってメール受渡しをコントロールすることができます. これによって SPAM 業者からのメール送付を制限できます. 以下では, 部分的に S25R 方式を採り入れて SPAM を多少制限することを目的とします. IP アドレスなどの外的な条件が主なので, SPAM の判別が困難です. Postfix で本文や Subject の内容のチェックもできますが, これには SPAM 判別専用のソフトウェアを用いる方が管理の手間が省けます. ここで数を減らした上で, 本文について, ベイジアン フィルタなどで, SPAM 検査を行うのが良いでしょう.

S25R 方式(Selective SMTP Rejection)は, メールの受渡しのために接続した時点で, 接続元のサーバ名を検査して排除する方法です. ppp 接続など動的な接続から直接送られるメールを SPAM の可能性が高いとして排除します. また, DNS への登録の状況なども参照されます. そこで, エンドユーザが自分で手軽に構築したサーバなどでは, 排除されてしまう危険もあります.

サイト間のメールの受渡しでは, 送信ドメイン認証(通信者認証) が採用されつつあります. SPF/SenderID, DomainKeys や DKIM など DNS サーバを通じてメールサーバの正当性を検査します. 送信ドメイン認証はこの文書では扱いませんが, 大手ISPでは, エンドユーザが構築するメールサーバから直接メールを送信することを制限する方向にあります. このような状況で, エンドユーザがメールサーバを運用したい場合には, 他サイトへのメールはプロバイダのメールサーバを中継して送付すべきと思われます.

postfix でこのような設定を調整するには SMTP プロトコルとメールヘッダ について知っておく必要があります. メール受渡しの SMTP レベルでの検査などの箇所としては, 以下のようなものが考えられます..

  1. 接続を遅くする: タール坑(tarpitting)
  2. 接続元サーバ IP アドレスと DNS 逆引きサーバ名で制限: smtpd_client_restrictions で設定
  3. HELO メッセージのサーバ名で制限 : smtpd_helo_restrictions で設定
  4. MAIL FROM メッセージの差し出し人メールアドレスで制限 : smtpd_sender_restrictions で設定
  5. RCPT TO メッセージの宛先メールアドレスで制限 : smtpd_recipient_restrictions で設定
  6. DATA ヘッダ情報で制限 : header_checks で設定
  7. DATA 本文で制限 : body_checks で設定
  8. DATA コマンドで制限 : smtpd_data_restrictions で設定

設定ファイル

/etc/postfix/main.cf に記述してメール制限のデータファイルを読み込ませます. データファイルも /etc/postfix/ に置くことにします. 以下の説明では, データファイル内に # を付けたコメント形式で説明文を割り込ませていますが, 実際に使用する場合には, 和文のコメントを取り除くのが良いでしょう.
  1. main.cf : postfix に与える設定を書き込みます.
  2. master.cf : postfix システムを構成する各コマンドの起動条件を記述します. この文書では扱いません.
  3. その他のデータファイル : main.cf 内で読み込むデータファイル名をなどを決めます.
この文書では main.cf とそこで指示する データファイル の使いかたを扱います.

データ形式

データファイルは各行に次の形式になっています.
パターン   動作   メッセージ
#  行頭が # ならコメント行

使用できるパターンは postconf -m でしらべます. ここでは hash と pcre(Perl Compatible Regular Expressions) を用います. hash では固定文字列, pcre では正規表現によるマッチングを使えます.

$ postconf -m
btree
cidr
environ
hash
nis
pcre
proxy
regexp
sdbm
static
tcp
unix

動作

  1. OK 許可
  2. REJECT エラーを返す:
    相手サーバに拒否にメッセージを返します
  3. DISCARD だまって捨てる:
    相手サーバからメールを受け取っておいて, 黙ってメールを廃棄します

"メッセージ" は接続しているサーバへのメッセージ(エラーメールのメッセージ)や mail.log への記録に使用されます.

Makefile の利用

postmap でハッシュ化しておく必要がありますが, make を使うと楽です. 以下の Makefile を用意しておいて make と打つと, postmap してくれます.
# /etc/postfix/Makefile 
# Rules for Postfix data files.

# all: makedb

all : reload

reload: makedb
	/usr/sbin/postfix reload

makedb: transport.db client_access.db helo_access.db sender_ns.db sender_mx.db 

transport.db : transport
	/usr/sbin/postmap hash:/etc/postfix/transport

client_access.db : client_access
	/usr/sbin/postmap hash:/etc/postfix/client_access

helo_access.db : helo_access
	/usr/sbin/postmap  hash:/etc/postfix/helo_access

sender_ns.db : sender_ns
	/usr/sbin/postmap hash:/etc/postfix/sender_ns

sender_mx.db : sender_mx
	/usr/sbin/postmap hash:/etc/postfix/sender_mx
以下で hash を併用しているので postmap が必要だが, pcre を使うなら, postmap は不要になる.

タール坑(tarpitting)

タール坑(tarpitting) というのは, わざと動作を遅くすることを意味します. 待ち時間を嫌う大量送信スクリプトなどはこれで避けられる場合があります. このようにして接続に時間をかけると, 同時に実行するプロセス数や使用ポート数が, 待ち時間数に比例して増えてしまいます. postfix の負荷の調査とチューニング を参考に制限を広げる必要がでるかもしれません.

smtpd_error_sleep_time を使う方法

smtpd_soft_error_limit < (接続中のエラー数) < smtpd_hard_error_limit の場合, SMTP コマンド毎に smtpd_error_sleep_time 休止します.

/etc/postfix/main.cf に以下を書き込みます.

# /etc/postfix/main.cf
# tarpitting
smtpd_soft_error_limit = 2
smtpd_error_sleep_time = 30s
smtpd_hard_error_limit = 10

smtpd_client_restrictions で sleep を使う方法

smtpd_helo_restrictions, smtpd_sender_restrictions, smtpd_recipient_restrictions でも使用できます. 休止のタイミングは smtpd_delay_reject = yes の場合, RCPT TO コマンドの後になります.

使用例:

smtpd_client_restrictions= 
    permit_mynetworks,
    reject_unauth_pipelining,
    reject_multi_recipient_bounce,
    sleep 100
休止の入る条件を調整できるので, 可能な限り 許可/不許可を振り分けたあと, 残っているものに対して 一時休止すると良いでしょう. 振り分けの条件が多く入っている smtpd_sender_restrictions の最後にいれるのが良いかも知れません.

待ち時間つきのスクリプトを呼び出す方法

master.cf から待ち時間つきのスクリプトを呼び出す方法もあります. この方法だと, 無差別に接続開始の時点で休止が入ってしまいます.

まず, 次のようなスクリプトを /usr/libexec/postfix/slowsmtpd.sh として作成し, chmod で実行可能にしておきます.

#!/bin/sh 
/usr/bin/sleep 70
/usr/libexec/postfix/smtpd $@
## end of the script ##
次に /etc/postfix/master.cf の smtp の項で上のスクリプトを呼び出すようにします.
#  smtp の該当行を修正
smtp      inet  n       -       n       -       200       slowsmtpd.sh
#smtp      inet  n       -       n       -       -       smtpd
/usr/sbin/postfix reload します.

確認試験の方法: SMTP プロトコルとメールヘッダ を参考に手動で smtp のポートにアクセスしてみます.

$ telnet localhost smtp
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.              
                                                         : ここで待ち時間が入る
220 mail.receive.ac.jp ESMTP Postfix (Debian/GNU)        : 受信サーバ名
quit
221 2.0.0 Bye
Connection closed by foreign host.
$

SMTP 接続

接続要求があった時点で, 相手側の IPアドレス を元にして動作を決める. ここで使用するサーバ名は IPアドレス から DNS の逆引きで求めたもの.

main.cf の smtpd_client_restrictions 部分

# /etc/postfix/main.cf
# smtp connection

smtpd_delay_reject = yes
# 評価の開始時点を RCPT TO  まで遅らせるが, 評価の順序は
# smtpd_client_restrictions, smtpd_helo_restrictions, smtpd_sender_restrictions, smtpd_recipient_restrictions となる.
# smtpd_data_restrictions はこれとは無関係に DATA の後になります.

disable_vrfy_command = yes
# VRFY コマンドは使わせない

smtpd_client_restrictions= 
    permit_mynetworks,
    #自ネットワークからの要求は許可
    reject_unauth_pipelining,
    #  いわゆる「同期エラー」が発生したら拒否。
    reject_multi_recipient_bounce,
    #bounce (envelope sender が <>) が複数の recipient を含むことはありえない
     check_client_access hash:/etc/postfix/client_access,
     check_client_access pcre:/etc/postfix/client_access_S25R,
###     reject_unknown_client
### クライアントの IP アドレスが DNS に PTR (アドレスから名前への) レコードを持たない場合や、
### その PTR レコードがマッチする A (名前からアドレスへ) レコードを持たない場合に拒否

送信元サーバの制限(1)

検査の対象は サーバアドレス と 逆引きサーバ名. PCRE でまとめる方が良いかも. 全て PCRE でやっても良いのだが, 旧版からの移行もあってなんとなく...
# hash:/etc/postfix/client_access

202.66.133 DISCARD client_access
202.66.134 DISCARD client_access
202.134.72 DISCARD client_access
202.134.81 DISCARD client_access
202.134.98 DISCARD client_access
202.134.106 DISCARD client_access
dyxnet.com DISCARD client_access

58.180.196 DISCARD client_access
58.180.197 DISCARD client_access
58.180.199 DISCARD client_access
58.180.217 DISCARD client_access
221.207.172  DISCARD client_access
221.207.173  DISCARD client_access

# jp
ac.jp OK
ad.jp OK
go.jp OK
mixi.jp OK
#co.jp
yahoo.co.jp OK
vh.plala.or.jp OK
# ne.jp
m2.home.ne.jp OK
softbank.ne.jp OK
ezweb.ne.jp OK
so-net.ne.jp OK
eonet.ne.jp OK
docomo.ne.jp OK
vodafone.ne.jp OK
zaq.ne.jp OK

# com
nifty.com OK
# ppp.infoweb.ne.jp 
hotmail.com OK
google.com OK
yahoo.com OK
data-hotel.net OK
verisign.net OK
edu OK

unknown   REJECT reverse_lookup_failure
# DNS 逆引きが無い場合

送信元サーバの制限(2)

検査の対象は サーバアドレス と 逆引きサーバ名. 正規表現によるマッチングを行います.
# pcre:/etc/postfix/client_access_S25R
# S25R client permission specifications for Postfix
# c.f.    http://gabacho.reto.jp/anti-spam/anti-spam-system.html

#  To check /var/log/mail.log:
#   grep ': client=' mail.log|gawk '{print $8}'|sort|uniq -c|sort -n
#   grep ': from=' mail.log|gawk '{print $8}'|sort|uniq -c|sort -n

####################################
# S25R White list 
# 許可を出しておきたいものはここに記述


/\.hotmail\.com$/   OK

####################################
# S25R  GENERIC PROTECTION
# 動的な接続と思われるものを排除する.
# これは, 避けて個々に調整する方が良いかも. とりあえずコメントアウト.
#
# [rule 0]
/^unknown$/  REJECT  reverse_lookup_failure
#
# [rule 1]
# ex: evrtwa1-ar3-4-65-157-048.evrtwa1.dsl-verizon.net
# ex: a12a190.neo.rr.com

#/^[^.]*[0-9][^0-9.]+[0-9]/  REJECT  client_access_S25R_gen1

#
# [rule 2]
# ex: pcp04083532pcs.levtwn01.pa.comcast.net

#/^[^.]*[0-9]{5}/  REJECT  client_access_S25R_gen2

#
# [rule 3]
# ex: 398pkj.cm.chello.no
# ex: host.101.169.23.62.rev.coltfrance.com

#/^([^.]+\.)?[0-9][^.]*\.[^.]+\..+\.[a-z]/  REJECT  client_access_S25R_gen3

#
# [rule 4]
# ex: wbar9.chi1-4-11-085-222.dsl-verizon.net

#/^[^.]*[0-9]\.[^.]*[0-9]-[0-9]/  REJECT  client_access_S25R_gen4

#
# [rule 5]
# ex: d5.GtokyoFL27.vectant.ne.jp

#/^[^.]*[0-9]\.[^.]*[0-9]\.[^.]+\..+\./  REJECT  client_access_S25R_gen5

#
# [rule 6]
# ex: dhcp0339.vpm.resnet.group.upenn.edu
# ex: dialupM107.ptld.uswest.net
# ex: PPPbf708.tokyo-ip.dti.ne.jp
# ex: dsl411.rbh-brktel.pppoe.execulink.com
# ex: adsl-1415.camtel.net
# ex: xdsl-5790.lubin.dialog.net.pl

#/^(dhcp|dialup|ppp|[achrsvx]?dsl)[^.]*[0-9]/   REJECT  client_access_S25R_gen6

##########################
# S25R Black list
# 止めたいものをここに明示的に記述する.

# pr86.internetdsl.tpnet.pl
# fq217.neoplus.adsl.tpnet.pl
# pa148.braniewo.sdi.tpnet.pl
/\.(internetdsl|adsl|sdi)\.tpnet\.pl$/   REJECT  client_access_S25R_black1
#
# user-0cetcbr.cable.mindspring.com
# user-vc8fldi.biz.mindspring.com
/^user.+\.mindspring\.com$/    REJECT  client_access_S25R_black2
#
# c9531ecc.virtua.com.br (hexadecimal used)
# c9066a60.static.spo.virtua.com.br (hexadecimal used)
/^[0-9a-f]{8}\.(.+\.)?virtua\.com\.br$/    REJECT  client_access_S25R_black3
#
# catv-5984bdee.catv.broadband.hu (hexadecimal used)
/\.catv\.broadband\.hu$/    REJECT  client_access_S25R_black4
#
# Edc3e.e.pppool.de
# BAA1408.baa.pppool.de
/[0-9a-f]{4}\.[a-z]+\.pppool\.de$/    REJECT  client_access_S25R_black5
#
# pD9EB80CB.dip0.t-ipconnect.de (hexadecimal used)
/\.dip[0-9]+\.t-ipconnect\.de$/     REJECT  client_access_S25R_black6
#
# pD9E799A1.dip.t-dialin.net (hexadecimal used)
/\.dip\.t-dialin\.net$/         REJECT  client_access_S25R_black7
#
# ool-43511bdc.dyn.optonline.net (hexadecimal used)
/\.dyn\.optonline\.net$/       REJECT  client_access_S25R_black8
#
# rt-dkz-1699.adsl.wanadoo.nl
# c3eea5738.cable.wanadoo.nl (hexadecimal used)
/\.(adsl|cable)\.wanadoo\.nl$/     REJECT  client_access_S25R_black9
#
# ACBBD419.ipt.aol.com (hexadecimal used)
/\.ipt\.aol\.com$/            REJECT  client_access_S25R_black10
#

HELO メッセージ

HELO または EHELO で送られる ホストデータによる動作.

main.cf の smtpd_helo_restriction 部分

# /etc/postfix/main.cf
# HELO/EHELO
smtpd_helo_required = yes
# HELO又はEHLOコマンドを送信してこない要求は拒否

smtpd_helo_restrictions =
   permit_mynetworks,
   reject_invalid_hostname, 
   # HELO または EHLO ホスト名の文法が不正な場合に拒否
# reject_non_fqdn_hostname,
# HELO(EHLO) ホスト名が RFC で要求されているような完全修飾ドメイン形式ではない場合に拒否
# reject_unknown_hostname,
# HELO または EHLO ホスト名の DNS A または MX レコードがない場合に拒否
   check_helo_access hash:/etc/postfix/helo_access
#  check_helo_access pcre:/etc/postfix/helo_access_pcre

HELO メッセージ(1)

検査の対象は helo で送られた相手サーバの自称.
# /etc/postfix/helo_access

# 外部から 自サイト名でアクセスされることは無い,と仮定する.
my-domain.ac.jp   DISCARD helo_access(my-domain.ac.jp)
.my-domain.ac.jp   DISCARD helo_access(my-domain.ac.jp)

HELO メッセージ(2)

検査の対象は helo で送られた相手サーバの自称.
# /etc/postfix/helo_access_pcre

/^[[]?[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+[]]?$/     REJECT  Not_Hostname
# IP アドレスであれば拒否.  アドレスリテラル ([x.x.x.x] の形式) も拒否
# 整備不良のサーバの可能性があるが...

!/\.(?:[a-z][a-z]|com|net|org|edu|gov|mil|int|info|biz|name|pro|museum|aero|coop)$/  REJECT  bad-FQDN.RFC2821_section4.1.1.1.
# インターネット上に存在し得るトップレベルドメインを持つホスト名でなければ拒否

MAIL FROM メッセージ

MAIL FROM メッセージによる動作.

main.cf の smtpd_sender_restrictions 部分

# /etc/postfix/main.cf
# envelope

strict_rfc821_envelopes = yes
# envelope FROM が不正な形式であれば拒否する。 

smtpd_sender_restrictions=
    permit_mynetworks,
    # 自ネットワークからの要求は許可
    check_sender_access pcre:/etc/postfix/sender_access_pcre,
    # メールアドレスによる制限
    check_sender_ns_access hash:/etc/postfix/sender_ns,
    # DNS サーバによる制限
    check_sender_mx_access  hash:/etc/postfix/sender_mx,
    # DNS MX による制限
    sleep 90
    # ここで休止
#  reject_non_fqdn_sender 
#MAIL FROM アドレスが RFC で要求されているような完全修飾ドメイン形式ではない場合に拒否
#  reject_unknown_sender_domain 
#MAIL FROM アドレスに DNS A または MX レコードがなく、Postfix がその送信者アドレスの最終配送先ではない場合に拒否

MAIL FROM による制限

検査の対象は MAIL FROM で送られたメールアドレス.
# /etc/postfix/sender_access_pcre

#    /^spammer@example.com/                     REJECT
#    /.*spammers.org/                            REJECT
/^.*@no.com/  DISCARD sender_access_pcre
/^.*nomorespam.nowhere.info/  DISCARD sender_access_pcre
/^.*pinkponk.com/  DISCARD sender_access_pcre
/^.*reject-all.my-deja.com/  DISCARD sender_access_pcre
mailq でバウンスを見ると, 捨てアドレスにバウンスするようなものが確認できる. 実在する第三者にバウンスするものはここでは対策できない.

DNS サーバ による制限

検査の対象は MAIL FROM で送られたメールアドレスの DNS サーバ.

dig ... ns して NS の名前を調べ調整.

# /etc/postfix/sender_ns
ns1.diyixian.com DISCARD sender_ns
ns2.diyixian.com DISCARD sender_ns
ds1.hkdom.net DISCARD sender_ns
ds2.hkdom.net DISCARD sender_ns
ns1.domainmanager.com DISCARD sender_ns
ns2.domainmanager.com DISCARD sender_ns
ns.buydomains.com DISCARD sender_ns
ns1.busiassist.net DISCARD sender_ns
ns1.busiassists.com DISCARD sender_ns
ns1.dehfs.com DISCARD sender_ns
ns1.dmfactory.net DISCARD sender_ns
ns1.dmfactorys.com DISCARD sender_ns
ns1.dmfactorys.net DISCARD sender_ns
ns1.dsfad.com DISCARD sender_ns
ns1.dufpv.net DISCARD sender_ns
ns1.dufqv.net DISCARD sender_ns
ns1.is-name.net DISCARD sender_ns
ns1.kim-name.net DISCARD sender_ns
ns1.magmagss.com DISCARD sender_ns
ns1.mr-bater.com DISCARD sender_ns
ns1.qrbyv.com DISCARD sender_ns
ns1.qrdvy.com DISCARD sender_ns
ns1.smagmag.net DISCARD sender_ns
ns1.sogobusi.com DISCARD sender_ns
ns1.toptjechnology.com DISCARD sender_ns
ns1.ttforever.net DISCARD sender_ns
ns1.zets-1.com DISCARD sender_ns
ns2.busiassist.net DISCARD sender_ns
ns2.busiassists.com DISCARD sender_ns
ns2.dehfs.com DISCARD sender_ns
ns2.dmfactory.net DISCARD sender_ns
ns2.dmfactorys.com DISCARD sender_ns
ns2.dmfactorys.net DISCARD sender_ns
ns2.dsfad.com DISCARD sender_ns
ns2.magmagss.com DISCARD sender_ns
ns2.mr-bater.com DISCARD sender_ns
ns2.smagmag.net DISCARD sender_ns
ns2.toptjechnology.com DISCARD sender_ns
ns2.ttforever.net DISCARD sender_ns
ns2.zets-1.com DISCARD sender_ns
s-name.net DISCARD sender_ns
this-domain-for-sale.com DISCARD sender_ns

DMS MX による制限

検査の対象は MAIL FROM で送られたメールアドレスのMXホスト. メール サーバ名による動作.
# /etc/postfix/sender_mx
nullmx.domainmanager.com DISCARD sender_mx
dig ... mx して MX の名前を調べ調整.
例:(mail.log から影響を調査)
grep relay /var/log/mail.log|gawk '{print $8}'|sort|uniq -c|sort -n

RCPT TO メッセージ

宛先メールアドレスによる制限. 最低限, 第三者転送を防ぐ. 第三者転送はデフォルトで禁止になっているはずだが, 転送条件をいじったあとは確認が必要.

main.cf の smtpd_recipient_restrictions 部分

# /etc/postfix/main.cf
# envelope rcpt to
smtpd_recipient_restrictions =
     permit_mynetworks, 
    #自ネットワークは素通し
    reject_non_fqdn_recipient,
    # RCPT TO アドレスが RFC で要求されているような完全修飾ドメイン形式ではない場合に拒否
    reject_unauth_destination
    #自ネットワーク以外への要求は拒否

ヘッダ検査

DATA で送られる内容のうちヘッダ部分について検査します.

main.cf の header_checks 部分

# /etc/postfix/main.cf
header_checks = pcre:/etc/postfix/header_check_pcre

ヘッダ検査の内容

大量送信 MTA や 怪しい Subject をチェックする.
# /etc/postfix/header_check_pcre
# filename extensions
#/^Content-Type: .*;\s*name="(.+\.(?:BAT|CMD|COM|CPL|EXE|HTA|JS|JSE|LNK|MSI|PIF|REG|SCR|VBE|VBS|WSF|WSH))"/  DISCARD header_check_file:$1
#/^Content-Disposition: .*;\s*filename="(.+\.(?:BAT|CMD|COM|CPL|EXE|HTA|JS|JSE|LNK|MSI|PIF|REG|SCR|VBE|VBS|WSF|WSH))"/ DISCARD header_check_file:$1
# MUA/MTA
/^X-Mail-Agent: (BSMTP) DLL .+ by Tatsuo Baba/  DISCARD header_check_mailer_$1
/^Received:  \((shiroyagi) .+ Release build .+\) ; .+ \(.+\)/   DISCARD header_check_mailer_$1
/^X-Mailer: .*(Achi-Kochi) Mail/          DISCARD header_check_mailer_$1
/^X-Mailer: .*(IM200[0-9]) Version/       DISCARD header_check_mailer_$1
/^Subject:.*!!!/                        DISCARD header_check_subject
/^Subject:.*( \$\$\$|\$\$\$ )/          DISCARD header_check_subject

本文の検査

本文の内容をしらべて動作を決めることができる. SPAM 対策専用ソフトの方が扱いやすいのでそちらを使う方が良い.

main.cf の body_checks 部分

# /etc/postfix/main.cf

#body_checks = pcre:/etc/postfix/body_check_pcre

本文チェックの内容

現在は空.
# /etc/postfix/body_check_pcre

data 後の検査

DATA コマンドの後に smtpd_data_restrictions が行われる. DATA 部分は smtpd_delay_reject とは無関係になります.
# smtpd_data_restrictions = sleep 90
# ここで一旦,遅延させる

対策の結果

SPAM を大きく2つのタイプにわけてみる. この文書の対策の結果 "辞書攻撃的" な SPAM は 1/100 に減らせた. "辞書攻撃的" な SPAM は存在しないユーザ名に送ることが多いので user unknown によるエラーが多くなる. 現在テストしているサイトでは, これらのメールは中継サーバに滞留する. mailq で見る滞留数が, 対策前の 数万通程度から, 対策後の 数百通程度まで減っている. また, mail.log のメッセージの計数からも推定できる.

一方, 有効な宛先名に送るタイプのメールは1/2 程度にしか減っていないように見える. こちらは, ユーザの聞き取り調査や mail.log の記録から推定する. こちらの方は, SPAM 対策の ベイジアン フィルタなどで, 検査を行い, ユーザの段階で振り分けなどで対処している.

個人的に云うと SPAM が 1/10 程度には減っている.


Kodama's home / tips.