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/
# tar xzvf Mail-SpamAssassin-3.4.2.tar.gz
# cd Mail-SpamAssassin-3.4.2/
# perl Makefile.PL
# 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
(略)
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
(略)
(略)
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-HTTP-Date
# yum install perl-Net-Patricia
# yum install perl-Net-DNS-Nameserver
# yum install perl-BSD-Resource
# 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 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
# yum install perl-LWP-UserAgent
# yum install perl-Encode-Detect-Detector
# yum install perl-Razor2
# 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
# yum install perl-libwww-perl
# yum install perl-Encode-Detect
# 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
# 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-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
t/test-harness......ok 1/208Can't kill a non-numeric process ID at t/sample-tests/taint_warn line 9.
# Failed test (t/test-harness.t at line 511)
# Failed test (t/test-harness.t at line 514)
# Structures begin differing at:
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%)
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
# 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
# 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
# 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
# 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/
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...
Writing Makefile for Mail::SpamAssassin
Makefile written by ExtUtils::MakeMaker 6.68
# 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
# 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」は、見送り、他は、認識されました。
/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
# 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
# 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
# vi /etc/postfix/master.cf
smtp inet n - n - - smtpd
-o content_filter=spamassassin
# 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}
spamassassin unix - n n - - pipe
flags=R user=spamd argv=/usr/local/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
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
# /usr/sbin/useradd spamd
# yum install perl-Sys-Syslog
# /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
# cp spamd/redhat-rc-script.sh /etc/rc.d/init.d/spamd
# chmod 755 /etc/rc.d/init.d/spamd
# 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
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
# /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
# /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-Checker-Version: SpamAssassin 3.4.2 (2018-09-13)
X-Spam-Level:
X-Spam-Status: No
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13)
X-Spam-Level:
X-Spam-Status: No
↑ 迷惑メール(スパム)ではない、メールのヘッダ
X-Spam-Level: *************
X-Spam-Status: Yes, score=13.4 required=5.0
X-Spam-Flag: YES
X-Spam-Level: *************
X-Spam-Status: Yes, score=13.4 required=5.0
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 追加)