SpamAssassin
SpamAssassin 是一个邮件过滤器,用于识别垃圾邮件。
安装
安装 spamassassin 软件包。
在 /etc/mail/spamassassin
中创建一个 sa-update-keys 目录,并更改所有者和组
# mkdir -p /etc/mail/spamassassin/sa-update-keys /etc/mail/sa-update-keys # chown -R spamd:spamd /etc/mail/spamassassin /etc/mail/sa-update-keys # chmod 755 /etc/mail/spamassassin # chmod 700 /etc/mail/spamassassin/sa-update-keys
接下来 启动/启用 spamassassin.service
服务。
用法
浏览 /etc/mail/spamassassin/local.cf
并根据您的需求进行配置。
更新规则
更新 SpamAssassin 匹配模式并编译它们
[spamd]$ /usr/bin/vendor_perl/sa-update && /usr/bin/vendor_perl/sa-compile
您可能希望定期运行此操作,最好的方法是设置一个 systemd 定时器。
创建以下服务,它将运行这些命令
/etc/systemd/system/spamassassin-update.service
[Unit] Description=spamassassin housekeeping stuff After=network.target [Service] User=spamd Group=spamd Type=oneshot ExecStart=/usr/bin/vendor_perl/sa-update SuccessExitStatus=1 ExecStart=/usr/bin/vendor_perl/sa-compile ExecStart=!/usr/bin/systemctl -q --no-block try-restart spamassassin.service # uncomment the following ExecStart line to train SA's bayes filter # and specify the path to the mailbox that contains spam email(s) #ExecStart=/usr/bin/vendor_perl/sa-learn --spam <path_to_your_spam_mailbox>
然后创建定时器,它将每天执行之前的服务
/etc/systemd/system/spamassassin-update.timer
[Unit] Description=spamassassin house keeping [Timer] OnCalendar=daily Persistent=true [Install] WantedBy=timers.target
现在您可以 启动 和 启用 spamassassin-update.timer
。
设置最大扫描大小
默认最大扫描大小为 500 KB(参见 spamc(1p))。您可以修改它:创建 spamc 配置文件。例如
/etc/mail/spamassassin/spamc.conf
# spamc global configuration file # max message size for scanning = 1Mo -s 1000000
使用 SQL 数据库
SpamAssassin 可以从 SQL 数据库加载用户首选项、贝叶斯过滤器数据和自动白名单。 这对于虚拟用户邮件设置特别有用,在虚拟用户邮件设置中,用户没有带有 SpamAssassin 数据的 $HOME/.spamassassin
目录。
MySQL
安装 perl-dbd-mysql。 然后,创建数据库
$ mysql -u root -p
CREATE DATABASE <db_name>; GRANT ALL ON <db_name>.* TO '<db_user>'@'localhost' IDENTIFIED BY '<password>';
Git-clone SpamAssassin 的源代码。 在 sql/
目录下,您将找到创建数据库表所需的文件。 请注意,TYPE
在最近的 MySQL 版本中已被 ENGINE
替换,因此如果需要,请在使用的 .sql
文件中相应地替换它。
分别为用户首选项、贝叶斯过滤器数据和 TxRep 创建表
$ mysql -u root -p <db_name> < userpref_mysql.sql $ mysql -u root -p <db_name> < bayes_mysql.sql $ mysql -u root -p <db_name> < txrep_mysql.sql
TxRep 是可选的,如果您不使用它,请跳过它。 如果您想使用它但尚未配置它,请参阅 Mail::SpamAssassin::Plugin::TxRep(3)
确保您的配置文件中包含以下内容
/etc/mail/spamassassin/local.cf
## MySQL database setup # User scores user_scores_dsn DBI:mysql:<db_name>:localhost user_scores_sql_username <db_user> user_scores_sql_password <password> # Bayesian filter bayes_store_module Mail::SpamAssassin::BayesStore::MySQL bayes_sql_dsn DBI:mysql:<db_name>:localhost bayes_sql_username <db_user> bayes_sql_password <password> # TxRep plugin txrep_factory Mail::SpamAssassin::SQLBasedAddrList user_awl_dsn DBI:mysql:<db_name>:localhost user_awl_sql_username <db_user> user_awl_sql_password <password>
最后,重启 spamassassin.service
服务。
插件
ClamAV
按照 ClamAV 中的描述安装和设置 clamd。
按照上述说明之一从您的邮件系统内部调用 SpamAssassin。
安装 perl-cpanplus-dist-arch 软件包。 然后按如下方式安装 ClamAV perl 库
# /usr/bin/vendor_perl/cpanp -i File::Scan::ClamAV
将 https://wiki.apache.org/spamassassin/ClamAVPlugin 中的 2 个文件添加到 /etc/mail/spamassassin/
中。 编辑 /etc/mail/spamassassin/clamav.pm
并更新 $CLAMD_SOCK
以指向您的 Clamd 套接字位置(默认为 /run/clamav/clamd.ctl
)。
最后,重启 spamassassin.service
服务。
Razor
Vipul's Razor 是一个分布式的、协作的垃圾邮件检测和过滤网络。
确保您首先安装了 SpamAssassin,然后
注册 Razor。
# mkdir /etc/mail/spamassassin/razor # chown spamd:spamd /etc/mail/spamassassin/razor [spamd]$ cd /etc/mail/spamassassin/razor [spamd]$ /usr/bin/vendor_perl/razor-admin -home=/etc/mail/spamassassin/razor -register [spamd]$ /usr/bin/vendor_perl/razor-admin -home=/etc/mail/spamassassin/razor -create [spamd]$ /usr/bin/vendor_perl/razor-admin -home=/etc/mail/spamassassin/razor -discover
要告知 SpamAssassin 关于 Razor,请将以下行添加到 /etc/mail/spamassassin/local.cf
razor_config /etc/mail/spamassassin/razor/razor-agent.conf
要告知 Razor 关于自身,请将以下行添加到 /etc/mail/spamassassin/razor/razor-agent.conf
razorhome = /etc/mail/spamassassin/razor/
最后,重启 spamassassin.service
服务。
技巧与窍门
维护 TxRep SQL 表
建议定期清理 TxRep SQL 表中的陈旧数据,以提高性能和节省存储空间。 这是一个可以在定期计划中运行的示例查询
DELETE FROM txrep WHERE last_hit <= (now() - INTERVAL 120 day);