服务器被用来发送垃圾邮件。 我如何调查?

问题

我认为我的服务器被用来发送垃圾邮件与sendmail,我得到了很多邮件排队,我不认识,我的mail.log和syslog越来越大。

我closures了sendmail,所以没有一个出来,但我不能确定它来自哪里。

调查到目前为止:

我已经在下面的博客post中尝试了解决scheme,并在此线程中显示 。

这意味着从邮件添加的地方添加一个头,并将所有的邮件都logging到文件中,所以我在我的php.ini文件中更改了以下几行:

mail.add_x_header = On mail.log = /var/log/phpmail.log 

但是没有任何内容出现在phpmail.log中。

我在这里使用命令来调查所有用户的cron作业,但是没有什么不合适的地方。 唯一正在运行的cron是该网站的cron。

然后我提出了在过去30天内被修改过的所有php文件,但没有一个看起来可疑。

我还能做些什么来find这是从哪里来的?

Mail.log报告

第二次打开sendmail。 以下是报告的一小部分:

 Jun 10 14:40:30 ubuntu12 sm-mta[13684]: s5ADeQdp013684: from=<>, size=2431, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1] Jun 10 14:40:30 ubuntu12 sm-msp-queue[13674]: s5ACK1cC011438: to=www-data, delay=01:20:14, xdelay=00:00:00, mailer=relay, pri=571670, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (s5ADeQdp013684 Message accepted for delivery) Jun 10 14:40:30 ubuntu12 sm-mta[13719]: s5ADeQdp013684: to=<[email protected]>, delay=00:00:00, xdelay=00:00:00, mailer=local, pri=32683, dsn=2.0.0, stat=Sent Jun 10 14:40:30 ubuntu12 sm-mta[13684]: s5ADeQdr013684: from=<[email protected]>, size=677, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1] Jun 10 14:40:31 ubuntu12 sm-msp-queue[13674]: s5AC0gpi011125: to=www-data, ctladdr=www-data (33/33), delay=01:39:49, xdelay=00:00:01, mailer=relay, pri=660349, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (s5ADeQdr013684 Message accepted for delivery) Jun 10 14:40:31 ubuntu12 sm-mta[13721]: s5ADeQdr013684: to=<[email protected]>, ctladdr=<[email protected]> (33/33), delay=00:00:01, xdelay=00:00:00, mailer=local, pri=30946, dsn=2.0.0, stat=Sent Jun 10 14:40:31 ubuntu12 sm-mta[13684]: s5ADeQdt013684: from=<[email protected]>, size=677, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1] Jun 10 14:40:31 ubuntu12 sm-msp-queue[13674]: s5ACF2Nq011240: to=www-data, ctladdr=www-data (33/33), delay=01:25:29, xdelay=00:00:00, mailer=relay, pri=660349, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (s5ADeQdt013684 Message accepted for delivery) Jun 10 14:40:31 ubuntu12 sm-mta[13723]: s5ADeQdt013684: to=<[email protected]>, ctladdr=<[email protected]> (33/33), delay=00:00:00, xdelay=00:00:00, mailer=local, pri=30946, dsn=2.0.0, stat=Sent Ju 

进一步的调查

在过去一天注册的4个垃圾邮件帐户,这是可疑的,但都具有正常的用户权限。

网站上没有联系表单,有多种表单,可以是过滤的文本input或纯文本input。

邮件仍在排队,把网站切换到维护模式,这阻止了每个人,但pipe理员。

确定更多的调查,它看起来像电子邮件正在发送我的网站cron每5分钟运行一次。 然而,我没有设置任何cron工作,每小时运行一次以上,并在网站上显示日志,所以大概有人设法编辑我的cron。

问题在:

结果大部分是我的无知。 Cron试图在运行时发送电子邮件。 因为cron是由www-data运行的,所以试图把它发送到www-data。 奇怪的地址是因为我从来没有改变我的dnshostname从服务器默认,这是一个奇怪的原因是pcsmarthosting.co.uk。 (奇怪,因为它跟我的主人没有任何关系。)

我发现www-data的默认地址的格式是hostname @ dnshostname。

邮件副本:

 V8 T1402410301 K1402411201 N2 P120349 I253/1/369045 MDeferred: Connection refused by [127.0.0.1] Fbs $_www-data@localhost ${daemon_flags}cu Swww-data [email protected] MDeferred: Connection refused by [127.0.0.1] C:www-data rRFC822; [email protected] RPFD:www-data H?P?Return-Path: < g> H??Received: (from www-data@localhost) by ubuntu12.pcsmarthosting.co.uk (8.14.4/8.14.4/Submit) id s5AEP13T015507 for www-data; Tue, 10 Jun 2014 15:25:01 +0100 H?D?Date: Tue, 10 Jun 2014 15:25:01 +0100 H?x?Full-Name: CronDaemon H?M?Message-Id: <[email protected]> H??From: root (Cron Daemon) H??To: www-data H??Subject: Cron <www-data@ubuntu12> /usr/bin/drush @main elysia-cron H??Content-Type: text/plain; charset=ANSI_X3.4-1968 H??X-Cron-Env: <PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin> H??X-Cron-Env: <COLUMNS=80> H??X-Cron-Env: <SHELL=/bin/sh> H??X-Cron-Env: <HOME=/var/www> H??X-Cron-Env: <LOGNAME=www-data> 

正如“外星生命表”所指出的那样,这封邮件看起来是源于www-data用户。 您没有提供足够的信息来断定问题是否是“编码不良的联系表”。

很可能是某个Web应用程序被滥用,或者configuration错误,正试图告诉你。 电子邮件的内容应该清楚。 查看邮件缓冲区中的几个文件,如果不容易获取副本。

这些条目的频率非常高,值得注意的是,www-data似乎是邮件本身。 这是一个邮件循环? 如果你没有另外处理每秒多个php请求的话,那就更是如此。 此外www数据似乎不是最有可能的目标垃圾邮件。

确保www-data帐户的别名是明智的。 比如你可以使用/ etc / aliases(并在编辑该文件后运行newaliases)。 根据您的发行版本,可能位于不同的位置,如/ etc / mail / aliases。

如果这个问题不是一个邮件循环,那么你大概会有与请求生成的邮件相关的高速networking请求。 你可以使用tcpdump捕获一些networkingstream量,并通过它查看(例如,可能用wireshark)来查找涉及的web请求(例如,当时查找来自电子邮件的一些内容)。 除非通过https传送,否则您将拥有原始IP和URL。

根据请求的时间,您也可能会从您的http访问日志中获取IP和URL。 那里有多less个url每秒访问多less次? 除非你有一个非常高的stream量服务器,这可能比捕获stream量更容易。 它也可能允许您快速排除networking访问是电子邮件的来源。

我看到你评论过外星生命表的答案,即邮件每5分钟左右排队一次,比你提供的日志要less得多。 考虑到这一点,我希望通过访问日志中的相同URL访问这些邮件提交的时间(尤其是查看POST请求,因为它们更可能)。

请求是否每5分钟一次? 你有5分钟的cron工作吗?

了解一下电子邮件的内容将有助于了解首先要寻找哪些东西。

垃圾邮件以99%的信心来自于托pipe网站上部署的联系表单不佳的情况。 该

 ctl-addr=www-data 

行是一个死的赠品(提示:万维网数据是用户的名称运行的networking服务器,它将是一个类似RH的机器上的Apache)。

closuresnetworking服务器,看看它的日志,找出是谁打的联系表格。 这可能是更复杂的(命令/ SQL注入)或一个完整的网站劫持/破解,但这是我第一件事,检查,缺席其他证据。

我期望debugging这个问题的命令和有用的地方(除了上面给出的答案中的所有内容)

添加标题到PHP来跟踪此博客文章中显示的所有电子邮件和此服务器故障线程 。

使用此处显示的命令检查所有正在运行的cron作业。

您可以在/var/spool/mqueue/var/spool/mqueue-clientfind所有的sendmails电子邮件

您可以使用mail -q查看您的邮件队列。

sendmail电子邮件的发件人地址(如果从www-data发送的话)可能是您的计算机hostname @ dnshostname的命令:

 hostname dnshostname 

您可以通过添加>/dev/null 2>&1来结束cronjob中的所有电子邮件:例如

 */5 * * * * /usr/bin/drush @main elysia-cron >/dev/null 2>&1 

testing它来自哪里。

你可以设置variables

 MAILTO="[email protected]" 

在一个cron工作的顶部,把来自该特定cron的所有电子邮件发送给你。