介绍
防止服务器发送垃圾邮件的最有效方法是首先阻止它。 在本文中,我们提供了几种技术来防止服务器发送不需要的垃圾邮件或垃圾邮件。 通常,不需要的和不请自来的垃圾邮件通常会批量发送给不分青红皂白的收件人列表。 垃圾邮件通常用于商业目的,但可以通过僵尸网络或受感染计算机网络大量发送。
- 确保为服务器上的每个域使用所需的 DNS 条目,这应该是强制性的,以提高电子邮件安全性。
- 防晒指数
- DKIM
- DMARC
- 始终在服务器上的每个 cPanel 和电子邮件帐户上使用强密码。 如果您使用默认所需的密码强度设置,我们建议将其值设置为 60 或更大。
- 保持每个网站上的插件、主题和软件都是最新的,以避免任何妥协或漏洞。
- 当网站使用联系表单时,请使用 ReCaptcha 测试。 Recaptcha 是一种图灵测试,用于判断提交者是人类还是机器人。 强烈建议使用此方法,因为它可以防止自动化软件提交信息,这可能会导致不必要的请求淹没服务器。
采取的行动
即使采取了这些措施,您的服务器仍可能会发送垃圾邮件。 如果您的客户无法发送或接收电子邮件,或者他们的电子邮件最终出现在其他人的垃圾邮件文件夹中,您可以怀疑正在发生这种情况。 如果发生这种情况,我们建议采取本文中的以下步骤来消除该问题。
首先,必须追踪垃圾邮件的来源。 在大多数情况下,它是现有的电子邮件帐户或已位于服务器上的特定 PHP 邮件脚本。 找到垃圾邮件帐户后,立即更改该帐户的密码。 如果脚本导致了问题,请在找到它在服务器上的确切位置后禁用该脚本。 检测垃圾邮件源的过程详述如下。 您需要访问 WHM 或 Interworx 才能完成调查。
cPanel 服务器
方法 1:使用 WHM 中的“邮件队列管理器”进行检测
从 WHM 导航到邮件队列管理器(主页 » 电子邮件 » 邮件队列管理器)并输入搜索条件。 最好选择在过去 24 小时左右发送的电子邮件。 在大多数情况下,这将揭示垃圾邮件发送者。
提供搜索结果后,检查不断重复的邮件或发件人。 此时,通过单击放大镜图标(查看消息)更仔细地检查该消息。
重点关注消息标头中包含的以下部分:
- 从
- 主题
- 到
Received: from username by mydomain.com with local (Exim 4.93) (envelope-from <[email protected]>) id 1l0Oht-000623-I8 for [email protected]; Fri, 15 Jan 2021 18:30:01 +0530 From: "[email protected]> To: [email protected] Subject: Additional and easy income to earn today X-PHP-Script: mydomain.com/index.php for xxx.xxx.xxx.xxx X-PHP-Originating-Script: 1153:class-phpmailer.php Content-Type: text/plain; charset=UTF-8
步骤 1:禁用垃圾邮件帐户
如果 From 中的电子邮件帐户名称和邮件主题听起来像垃圾邮件,您将需要尽快更改该电子邮件帐户的密码。 更改相关电子邮件帐户的密码后,如果不是立即,持续外发垃圾邮件应在更改后的几分钟内停止。
步骤 2:禁用邮件脚本
如果 From 中的信息为空或未提供来自服务器的电子邮件地址,请查看 X-PHP-Originating-Script 或 X-PHP-Script 命令。 请付钱 close 请注意邮件标头中看起来显示与垃圾邮件脚本相关联的域名和特定 IP 地址的部分。
X-PHP-Script: mydomain.com/index.php for xxx.xxx.xxx.xxx
标题的这一部分给出了相关恶意脚本的具体名称。
X-PHP-Originating-Script: xxx:class-mailer.php
下一步是在服务器上找到该脚本的确切位置。 最好的方法是从 WHM 菜单中选择终端,输入以下命令(根据您正在处理的信息进行更改),然后按 Enter.
find /home/username/public_html -type f -name 'class-phpmailer.php'
确保:
- 调整 /home/username/public_html 以适应服务器上域的文档根目录。
- 调整 class-phpmailer.php 以匹配您之前发现的脚本名称。
提供命令的输出后,您可以继续并通过在终端中使用以下命令将权限限制为 0 来禁用该脚本。
chmod 000 /path/to/script
确保调整 /path/to/script 以匹配您运行的上一个命令给出的确切脚本位置。 请注意,此命令将禁用脚本的功能。 虽然这可能会导致网站出现问题,但整个重点是阻止垃圾邮件。
步骤 3:清除邮件队列
垃圾邮件停止后,您可以继续从邮件队列中清除来自该特定电子邮件地址的邮件,方法是返回邮件队列管理器,选中要删除的每封电子邮件的复选框。
方法二:在终端使用Exim命令检测
步骤 1:确定冻结电子邮件的数量
我们首先需要找出有多少邮件被冻结在电子邮件队列中。 如果服务器主动发送垃圾邮件,则队列中可能有数千条消息。 要继续,请通过 SSH 连接到服务器或使用 WHM 的终端选项。 输入以下命令并按 Enter. 输出应该是队列中的电子邮件数量。 记下此编号以供以后参考。
exim -bpc
第 2 步:确定垃圾邮件发送者
现在,我们想找出这些消息的发送者是谁。 在同一个终端中使用以下命令并按 Enter.
exim -bpr | grep "<" | awk {'print $4'} | cut -d "<" -f 2 | cut -d ">" -f 1 | sort -n | uniq -c | sort -rn
该命令的输出将类似于下面的示例,并显示每个发件人有多少冻结的消息。
430 [email protected] 225 25 [email protected] 4 [email protected] 4 [email protected] 1 [email protected] 1 [email protected]
忽略任何缺少发件人电子邮件地址的行,因为它们代表通常位于冻结队列中的系统消息。 使用上面输出的信息,我们看到 [email protected] 电子邮件帐户发送了多条消息,这需要进一步调查。
第 3 步:调查垃圾邮件发送者
使用以下命令生成从 [email protected] 发送的队列中前十封电子邮件的列表。
exim -bp | grep '[email protected]' | head 10
您会注意到几个类似的输出。 一串符号 1l06xA-00014u-J8 表示消息 ID。
13h 2.5K 1l06xA-00014u-J8 <> *** frozen *** [email protected]
接下来,使用以下命令检查消息的标题。
exim -Mvh <message-id>
输出将包含大量信息,但重点关注以下部分。
From Subject To
如果邮件的主题听起来很垃圾,那么这很可能是垃圾邮件。 如果您确定该主题听起来不像常规邮件,则发件人下列出的电子邮件帐户很可能就是您要查找的垃圾邮件发送者,因此您应该停止其正在进行的活动。
要阻止垃圾邮件发送者,您需要尽快更改 [email protected] 的密码。 如果不是立即更改密码,则连续外发垃圾邮件应在更改密码后的几分钟内停止。 如果发件人、auth_sender 或 auth_id 为空,请参考上面关于停止垃圾邮件脚本的“方法 1 步骤 2:禁用邮件脚本”部分。
现在是时候通过再次运行 exim 命令来检查冻结邮件的数量是否与邮件队列中的原始数量相比发生了变化
exim -bpc
通过多次使用此命令,您可以确定消息是否已停止到达队列。 在我们确定垃圾邮件已停止后,从电子邮件队列中删除垃圾邮件,最好通过 WHM 中的“邮件队列管理器”清除它们。 如果您希望使用命令行清除所有消息,使用以下命令之一即可完成此任务。
exim -bp | awk '/^ *[0-9]+[mhd]/{print "exim -Mrm " $3}' | bash or exim -bp | exiqgrep -i | xargs exim -Mrm
InterWorx 服务器
方法 1:使用终端检测垃圾邮件
步骤 1:确定冻结电子邮件的数量
在 InterWorx 服务器上消除垃圾邮件的第一步是找出队列中存在多少冻结的邮件。 要找出答案,请以 root 用户身份运行以下命令。
/var/qmail/bin/qmail-qstat
qmail-stat 命令提供了一个人类可读的邮件队列中不同位置的邮件数量细分。 qmail-qstat 必须以 root 或使用组 ID qmail 运行。
您会注意到类似于下面看到的输出。
messages in queue: 76 messages in queue but not yet preprocessed: 0
如果此命令打印出队列中的 0 条消息,或者在某些情况下,不打印其下的任何内容,则表示电子邮件队列中没有任何消息。 如果结果是一个数字,那么这就是在服务器的冻结队列中等待传送的消息数。 在这种情况下,我们希望更彻底地检查该队列。
步骤 2:调查消息
如果队列不为空,您接下来要做的就是使用 qmail-read 命令查找有关每条消息的更多信息。 此命令查看队列中的所有消息,并向我们显示信封发件人、创建时间、队列 ID 以及每个收件人的当前传递状态。 现在,运行此命令。
/var/qmail/bin/qmail-qread
这将提供与此类似的行的输出。
30 Jan 2021 03:34:30 GMT #3676617 525 <[email protected]>
我们需要在行尾记录发件人的电子邮件地址,以便进一步排除故障。 “”符号内的电子邮件和以井号“#”符号开头的消息 ID 是需要注意的主要属性。
队列列出了所有可用的消息。 包含最多邮件的发件人电子邮件帐户是我们将审查的第一个帐户。 下面的命令将向我们展示如何详细查看每条消息的头信息。 运行此命令以在服务器上定位消息。 用消息 ID 替换井号,然后按 Enter.
find /var/qmail/queue/mess/ -iname #
例子:
find /var/qmail/queue/mess/ -iname 3676617
此命令提供服务器上的位置,类似于下面看到的。
/var/qmail/queue/mess/22/3676617
最后一步是使用 cat 命令检查文件。
cat /var/qmail/queue/mess/22/3676617
示例输出:
Received: (qmail 24703 invoked by uid 1153); 30 Jan 2021 10:06:42 -0500 To: [email protected] Subject: Thank You for Signing Up X-PHP-Originating-Script: 1153:class-phpmailer.php X-PHP-Script: mydomain.com/index.php for xxx.xxx.xxx.xxx Date: Sat, 30 Jan 2021 15:06:42 +0000 From: mary <[email protected]> Reply-To: [email protected] Message-ID: <[email protected]> X-Mailer: PHPMailer 5.2.22 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8
检查主题和发件人输出。 如果您发现主题类似于典型的垃圾邮件,请查看发件人电子邮件帐户。 如果我们看到大量类似的电子邮件,我们应该更改电子邮件帐户密码。这将阻止任何活动垃圾邮件离开服务器。
方法 2:使用邮件队列管理器
使用终端检测垃圾邮件发送者可能很复杂,因此这里是有关使用 Interworx 邮件队列管理器的说明。 登录到服务器的 Nodeworx 仪表板后,请按照以下步骤操作:
- 单击系统服务,然后单击邮件服务器,然后单击邮件队列。
- 找到队列部分。
- 从下拉列表中选择远程、本地、待办事项或远程+本地。
- 如果给定队列中没有消息,您将看到队列中没有消息。
- 如果给定队列中有消息,它们将显示在队列部分表中。
- 接下来,我们需要查看消息的内容。 这就是我们根据发件人/收件人确定邮件是否为垃圾邮件的方式。 在消息 ID 列中,单击要查看的消息编号。 该消息将显示在新窗口中。 如果您注意到来自同一用户的多条消息,您将需要更仔细地检查这些消息。 单击“查看消息”并关注每条消息的主题以及发件人。
- 如果“主题”听起来像垃圾邮件,则此邮件的发件人很可能是垃圾邮件帐户。 要阻止垃圾邮件,请尽快更改电子邮件帐户密码。
- 最后一步是通过检查和“删除”您选择的内容来删除队列中不需要的消息。
无论您选择采用哪种方法,如果一切顺利,服务器最终应该没有垃圾邮件。 我们还建议在之后短暂监控服务器以验证您已成功消除垃圾邮件问题。
结论
如果没有合适的工具,控制垃圾邮件可能既困难又耗时。 我们希望这些信息能够为管理员提供一种更好的方法来开始解决外发垃圾邮件的问题。
我们以成为 Hosting™ 中最有帮助的人而自豪! 我们的支持团队由经验丰富的 Linux 技术人员和才华横溢的系统管理员组成,他们对多种网络托管技术(尤其是本文中讨论的技术)有着深入的了解。 如果您对此信息有任何疑问,我们将始终一年 365 天、每周 7 天、每天 24 小时回答与本文相关问题的任何询问。