Postfix 3.4 [迷惑メール対策 SpamAssassin] CentOS7 (マルチドメイン)
↑こちらもご覧ください。記事が新しいです。
Postfix3.3 迷惑メール対策 SpamAssassin(スパムアサシン)設定その2 (2018/10/27 追加)
Postfix3.3 迷惑メール対策 SpamAssassin(スパムアサシン)[ユーザ毎の設定] (2018/11/01 追加)
SpamAssassin(スパムアサシン)とは
SpamAssassin(スパムアサシン)とは、届いたメールが、迷惑メールかどうかを判定してくれるツールです。
2018-09-16に最新版の、3.4.2がリリースされています。
誤判定もありますが、それなりに、「迷惑メール(スパム)」と判定してくれます。
有名レンタルサーバーでも、組み込んでいるところがあります。
というか、迷惑メール判定をサーバー側で行うお手軽ツールは、この、SpamAssassinぐらいしか聞きません。
サーバー側で留意すべきは、「誤判定をフォローする」ということ。
・ホワイトリストの登録(ブラックリストへの登録)
・迷惑メールフォルダから、「取り出す」(振り分けていたら)
・迷惑メールになったことを告知(もしくは、閲覧できるようにする)
などの救済策が必要かと思っています。
サーバー屋さんは、大変です(笑)
そして、お客さんから「メールが届かない!」と連絡が来ます。
「迷惑メールに分類されている」という事がよくあります・・・
迷惑メールと「誤判定」をしてしまうのは、「送信側」にも、問題がある場合があります。
ただ、送信側では「問題」と思っていない事が多いので、やっかいです。
一応、届きますので・・・
SpamAssassin ダウンロード
# wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//spamassassin/source/Mail-SpamAssassin-3.4.2.tar.gz
2018年10月25時点の最新版をダウンロードします。
SpamAssassin 関連モジュールインストール
# tar xzvf Mail-SpamAssassin-3.4.2.tar.gz # cd Mail-SpamAssassin-3.4.2/ # perl Makefile.PL
(略) REQUIRED module missing: Digest::SHA REQUIRED module missing: HTML::Parser REQUIRED module missing: Net::DNS REQUIRED module missing: NetAddr::IP REQUIRED module missing: Archive::Tar REQUIRED module missing: IO::Zlib optional module missing: Digest::SHA1 optional module missing: DB_File optional module missing: Mail::SPF optional module missing: Geo::IP optional module missing: Net::CIDR::Lite optional module missing: Razor2 optional module missing: IO::Socket::IP optional module missing: IO::Socket::INET6 optional module missing: IO::Socket::SSL optional module missing: Compress::Zlib optional module missing: Mail::DKIM optional module missing: DBI optional module missing: LWP::UserAgent optional module missing: HTTP::Date optional module missing: Encode::Detect::Detector optional module missing: Net::Patricia optional module missing: Net::DNS::Nameserver optional module missing: BSD::Resource optional binary missing or nonfunctional: fetch optional binary missing or nonfunctional: re2c (略)
と、perlモジュールが足りないよ。
というエラーが出てきます。
これらのperlモジュールを入れます。
# yum install perl-Digest-SHA # yum install perl-HTML-Parser # yum install perl-Net-DNS # yum install perl-NetAddr-IP # yum install perl-Archive-Tar # yum install perl-IO-Zlib # yum install perl-Digest-SHA1 # yum install perl-DB_File # yum install perl-Mail-SPF # yum install perl-Geo-IP # yum install perl-Net-CIDR-Lite # yum install perl-IO-Socket-IP # yum install perl-IO-Socket-INET6 # yum install perl-IO-Socket-SSL # yum install perl-Compress-Zlib # yum install perl-Mail-DKIM # yum install perl-DBI # yum install perl-HTTP-Date # yum install perl-Net-Patricia # yum install perl-Net-DNS-Nameserver # yum install perl-BSD-Resource
↑ yum で、「perl-」をつけて、「:」を「-」に置き換えて、インストールします。
# yum install perl-LWP-UserAgent # yum install perl-Encode-Detect-Detector # yum install perl-Razor2
上記の3つは、「No package」と「ないよ」とエラーになります
前半2つは、
# yum install perl-libwww-perl # yum install perl-Encode-Detect
で、入ります。
「Razor2」 は、ソースからインストールします。
http://razor.sourceforge.net/
から
razor-agents-2.84.tar.bz2
razor-agents-sdk-2.07.tar.bz2
をダウンロード
# tar xvjf razor-agents-2.84.tar.bz2 # cd razor-agents-2.84/ # perl Makefile.PL # make # make test # make install
上記は、うまくいきますが、
# tar xvjf razor-agents-sdk-2.07.tar.bz2 # razor-agents-sdk-2.07/ # perl Makefile.PL # make # make test (略) t/test-harness......ok 1/208Can't kill a non-numeric process ID at t/sample-tests/taint_warn line 9. # No tests run! # Failed test (t/test-harness.t at line 511) # got: '0' # expected: '1' # Failed test (t/test-harness.t at line 514) # Structures begin differing at: # $got->{ok} = '0' # $expected->{ok} = '1' t/test-harness......NOK 173# Looks like you failed 2 tests of 208. t/test-harness......dubious Test returned status 2 (wstat 512, 0x200) DIED. FAILED tests 171, 173 Failed 2/208 tests, 99.04% okay (less 56 skipped tests: 150 okay, 72.12%) t/version...........ok Failed Test Stat Wstat Total Fail Failed List of Failed ------------------------------------------------------------------------------- t/test-harness.t 2 512 208 2 0.96% 171 173 1 test and 56 subtests skipped. Failed 1/18 test scripts, 94.44% okay. 2/553 subtests failed, 99.64% okay. make[1]: *** [test_dynamic] Error 255 make[1]: Leaving directory `/root/src/razor-agents-sdk-2.07/Test-Harness-2.52-MODIFIED' make: *** [subdirs-test] Error 2
と、エラーになります(涙)。
このエラーを解決する方法が、見つからず、今回、「Razor」のDBでのスパム判定は、見送ります。
字句解析の「re2c」を入れます。
http://re2c.org/install/install.html
から、ダウンロード
# https://github.com/skvadrik/re2c/releases/download/1.1.1/re2c-1.1.1.tar.gz # tar xzvf re2c-1.1.1.tar.gz # cd re2c-1.1.1/ # ./configure # make # make install
↑「re2c」が、入りました。
SpamAssassin インストール
# cd Mail-SpamAssassin-3.4.2/ # perl Makefile.PL (略) optional module missing: Razor2 optional binary missing or nonfunctional: fetch warning: some functionality may not be available, please read the above report before continuing! Checking if your kit is complete... Looks good Writing Makefile for Mail::SpamAssassin Makefile written by ExtUtils::MakeMaker 6.68
↑ 「Razor2」 と、「fetch」は、見送り、他は、認識されました。
# make # make install (略) /usr/bin/perl -e "map unlink, </usr/local/share/spamassassin/*>" /usr/bin/perl build/preprocessor -Mvars -DVERSION="3.004002" -DPREFIX="/usr/local" -DDEF_RULES_DIR="/usr/local/share/spamassassin" -DLOCAL_RULES_DIR="/etc/mail/spamassassin" -DLOCAL_STATE_DIR="/var/lib/spamassassin" -DINSTALLSITELIB="/usr/local/share/perl5" -DCONTACT_ADDRESS="the administrator of that system" -DRE2C_BIN="re2c" -m644 -Irules -O/usr/local/share/spamassassin user_prefs.template languages sa-update-pubkey.txt chmod 755 /usr/local/share/spamassassin
インストール成功!
SpamAssassin と、postfixの連携
# vi /etc/postfix/master.cf smtp inet n - n - - smtpd -o content_filter=spamassassin
↑2行目を加えます。
spamassassin unix - n n - - pipe flags=R user=spamd argv=/usr/local/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
↑も、master.cf の最後のほうに加えます。
SpamAssassin 起動
# /usr/sbin/useradd spamd # yum install perl-Sys-Syslog
↑「spamd」というユーザで起動させるため、ユーザ登録をして、起動に必要な、Sys::Syslogのperlモジュールを入れます。
# cp spamd/redhat-rc-script.sh /etc/rc.d/init.d/spamd # chmod 755 /etc/rc.d/init.d/spamd
↑起動スクリプトをコピーします。
# /etc/rc.d/init.d/spamd start # ps ax 19999 ? Ss 0:01 /usr/bin/perl -T -w /usr/local/bin/spamd -d -c -m5 -H -r /var/run/spamd.pid 20003 ? S 0:00 spamd child 20005 ? S 0:00 spamd child
起動されました。
SpamAssassin テスト
外部から、メールを送ってみます。
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) X-Spam-Level: X-Spam-Status: No
↑ 迷惑メール(スパム)ではない、メールのヘッダ
X-Spam-Flag: YES X-Spam-Level: ************* X-Spam-Status: Yes, score=13.4 required=5.0
↑ 迷惑メール(スパム)なメールを送ってみたところ、迷惑メール(スパム)と判定されました。
SpamAssassin 課題
SpamAssassinの基本組み込みはできましたが、各メールアドレス毎に、以下の事が必要です。
・迷惑メール(スパム)と判定された場合、題名に「*** SAPM ***」などと入れる。
・迷惑メール(スパム)と判定された場合、受信フォルダ(Maildir/new)には、入れないで、違うフォルダに入れる。
そして、救済(取り出すこと)ができるようにする。
・ブラックリスト、ホワイトリストを、登録できる。
・迷惑メール(スパム)の判定基準(score required) を設定できるようにする。
・迷惑メール(スパム)になった、リストを送付する。
けっこう、大変ですね(汗)。
qmail + procmailでは、作っていましたが・・・・(笑)
SpamAssassin(スパムアサシン)設定、その2
Postfix3.3 迷惑メール対策 SpamAssassin(スパムアサシン)設定その2(2018/10/27 追加)