如何使用 ClamAV 和 SpamAssassin 添加防病毒和垃圾邮件防护到 Postfix 邮件服务器 - 第 3 部分
在本Postfix系列的前两篇文章中,您学习了如何通过 phpMyAdmin 设置和管理电子邮件服务器数据库,以及如何配置 Postfix 和 Dovecot 来处理传入和传出的邮件。此外,我们还解释了如何为之前创建的虚拟帐户设置邮件客户端,例如 Thunderbird。
- 使用 MariaDB 设置 Postfix 邮件服务器和 Dovecot – 第 1 部分
- 如何使用虚拟域用户配置 Postfix 和 Dovecot – 第 2 部分
- 在 Postfix 中使用虚拟用户安装和配置 RoundCube Webmail 客户端 – 第 4 部分
- 使用防病毒/反垃圾邮件网关 Sagator 来保护您的邮件服务器 – 第 5 部分
由于如果不采取病毒和垃圾邮件预防措施,任何电子邮件服务器设置都无法完成,因此我们将在当前文章中介绍该主题。
请记住,即使*nix-like操作系统通常被认为是无病毒的,使用其他操作系统的客户端也可能会连接到您的电子邮件服务器。
因此,您需要让他们相信您已采取必要措施来尽可能保护他们免受此类威胁。
为 Postfix 配置 SpamAssassin
在接收电子邮件的过程中,spamassassin 会站在外界与您服务器本身上运行的电子邮件服务之间。如果它根据其定义规则和配置发现传入消息是垃圾邮件,它将重写主题行以清楚地识别它。让我们看看如何。
主要配置文件是/etc/mail/spamassassin/local.cf
,我们应该确保以下选项可用(如果不存在则添加它们,如果需要则取消注释):
report_safe 0
required_score 8.0
rewrite_header Subject [SPAM]
- 当report_safe设置为0(推荐值)时,传入的垃圾邮件只能通过根据rewrite_header修改电子邮件标头来修改。如果设置为1,则消息将被删除。
- 要设置垃圾邮件过滤器的攻击性,required_score 后面必须跟一个整数或小数。数字越小,滤波器变得越灵敏。对于服务许多(~100s)的大型系统,建议将required_score设置为8.0和10.0之间的某个值电子邮件帐户。
保存这些更改后,启用并启动垃圾邮件过滤器服务,然后更新垃圾邮件规则:
systemctl enable spamassassin
systemctl start spamassassin
sa-update
有关更多配置选项,您可能需要通过在命令行中运行 perldoc Mail::SpamAssassin::Conf
来参考文档。
集成 Postfix 和 SpamAssassin
为了有效地集成 Postfix 和 spamassassin,我们需要创建一个专用的用户和组来运行垃圾邮件过滤器守护进程:
useradd spamd -s /bin/false -d /var/log/spamassassin
接下来,在 /etc/postfix/master.cf
底部添加以下行:
spamassassin unix - n n - - pipe flags=R user=spamd argv=/usr/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
并指出(在顶部)spamassassin 将充当 content_filter:
-o content_filter=spamassassin
最后,重新启动 Postfix 以应用更改:
systemctl restart postfix
为了验证 SpamAssassin 是否正常工作并检测传入的垃圾邮件,提供了称为 GTUBE(未经请求的批量电子邮件的通用测试)的测试。
要执行此测试,请从网络外部的域(例如 Yahoo!、Hotmail 或 Gmail)向您的电子邮件服务器中的帐户发送一封电子邮件。将主题行设置为您想要的任何内容,并在邮件正文中包含以下文本:
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
例如,从我的 Gmail 帐户发送邮件正文中的上述文本会产生以下结果:
并在日志中显示相应的通知:
journalctl | grep spam
如上图所示,这封电子邮件的垃圾邮件分数为 1002.3。此外,您可以直接从命令行测试 spamassassin:
spamassassin -D < /usr/share/doc/spamassassin-3.4.0/sample-spam.txt
上面的命令将产生一些非常详细的输出,其中应包括以下内容:
如果这些测试不成功,您可能需要参考 spamassassin 集成指南。
启动 ClamAV 并更新病毒定义
首先,我们需要编辑 /etc/clamd.d/scan.conf
。取消注释以下行:
LocalSocket /var/run/clamd.scan/clamd.sock
并注释掉或删除该行:
Example
然后启用并启动 clamav 扫描仪守护进程:
systemctl enable [email
systemctl start [email
并且不要忘记将 antivirus_can_scan_system SELinux 布尔值设置为 1:
setsebool -P antivirus_can_scan_system 1
此时,检查服务的状态是值得的:
如上图所示,我们的病毒签名已超过 7 天。为了更新它们,我们将使用一个名为 freshclam 的工具,该工具作为 clamav-update 包的一部分安装。
更新病毒定义的最简单方法是通过 cron 作业,根据需要执行多次(例如,每天一次,在凌晨 1 点服务器时间,如下例所示就足够了):
00 01 * * * root /usr/share/clamav/freshclam-sleep
您还可以手动更新病毒定义,但在此之前您还必须删除或注释掉 /etc/freshclam.conf
中的以下行。
Example
现在您应该能够运行:
freshclam
这将根据需要更新病毒定义:
测试 ClamAV 是否存在电子邮件中的病毒
为了验证 ClamAV 是否正常工作,我们将测试病毒(可以从 http://www.eicar.org/download/eicar.com 获取)下载到 [email 的 Maildir (位于/home/vmail/linuxnewz.com/howtoing/Maildir)来模拟作为邮件附件接收的受感染文件:
cd /home/vmail/linuxnewz.com/tecmint/Maildir
wget http://www.eicar.org/download/eicar.com
然后递归扫描/home/vmail/linuxnewz.com目录:
clamscan --infected --remove --recursive /home/vmail/linuxnewz.com
现在,请随意设置此扫描以通过cronjob运行。创建一个名为 /etc/cron.daily/dailyclamscan
的文件,插入以下行:
#!/bin/bash
SCAN_DIR="/home/vmail/linuxnewz.com"
LOG_FILE="/var/log/clamav/dailyclamscan.log"
touch $LOG_FILE
/usr/bin/clamscan --infected --remove --recursive $SCAN_DIR >> $LOG_FILE
并授予执行权限:
chmod +x /etc/cron.daily/dailyclamscan
上面的 cronjob 将递归地扫描邮件服务器目录,并在 /var/log/clamav/dailyclamscan.log
中留下其操作日志(确保 /var/log/clamav强> 目录存在)。
让我们看看当我们将 eicar.com 文件从 [email 发送到 [email 时会发生什么:
概括
如果您按照本教程和本系列前两篇文章中概述的步骤进行操作,您现在就拥有了一个具有垃圾邮件和防病毒保护功能的工作 Postfix 电子邮件服务器。
免责声明:请注意,服务器安全是一个广泛的主题,无法在这样的简短系列中充分涵盖。
因此,我强烈建议您熟悉本系列中使用的工具及其手册页。尽管我已尽力涵盖与本主题相关的基本概念,但不要认为在完成本系列之后您完全有资格在生产环境中设置和维护电子邮件服务器。
本系列旨在作为 Linux 中邮件服务器管理的起点,而不是详尽的指南。
您可能会想到其他可以丰富本系列的想法。如果是这样,请随时使用下面的评论表给我们留言。我们也欢迎您提出问题和其他建议——我们期待您的来信!