linux 安装wordpress 无故往外发送大量垃圾邮件 始末
表现出来的现象就是, 网站运行没多久,mysql服务就挂了,重启也无法启动起来,提示 No such file or dicrionary 但是很明显mysql是存在的,但是为什么出现这个提示,后来搜了一下,发现是因为磁盘空间不足。
然后运行 df -l 发现磁盘使用不到30% 怎么会不足呢。 继续搜, 发现原来是 inode 节点不足了。 使用命令 df -i 查看发现 inode节点使用100% 已经满了。
inode节点不足是怎么造成的呢,于是继续搜索。 然后发现是因为巨量的小文件导致 inode节点不足。 那这个巨量的小文件在哪呢,怎么查找,头疼。 毕竟菜鸟对linux命令不熟悉。
然后继续搜索,发现可以使用linux命令查找最近的文件,因为这个问题是最近几天才出现的,所以可以查找一下最近几天增加的文件有哪些。然后使用 find / mtime +2 即可查看最近2天新增的文件。 然后从列表中发现在 var/spool/postfix/maildrop/ 目录中发现有大量文件。 使用命令 ls -l |grep "^-"|wc -l 查看该目录下的文件个数,有30多万个,乖乖,问题找到了。
然后搜了一下 发现这个目录的文件之所以会有这么多 就是因为发送邮件失败后都会有文件被存放到这里,就类似于一个队列的感觉。 然后把这个目录的所有文件删除。 进入该目录后,使用 rm -rf * 发现提示命令超过最大长度。乖乖,删还费劲啊,然后继续搜索,删除巨量文件的linux命令
ls|xargs rm -f
光把这里删了还不行,还需要修改一下mail服务里面的配置,让它以后不再保存这些队列邮件了
解决方法:
修改“/etc/crontab”
将‘MAILTO=root’替换成‘MAILTO=""’修改之后没有成功,需要重启crond服务才可以 service crond restart
修改完以上内容后,开启邮件服务,然后 垃圾邮件还是继续发。 我就奇怪了,这到底是为啥呢。
然后以为网站中毒,于是逐个扫描病毒。 使用了360提供的 主机卫士 http://zhuji.360.cn/ 查杀网站后门文件。 清理完毕后仍然无效
再后来搜到一篇文章,说是空间被当作代理服务器发送邮件,因为没有屏蔽未经认证的域名。 然后在apche的配置文件中
httpd.conf 修改一下非允许域名不能解析到本空间地址。
<VirtualHost *:80> ServerName 你的IP地址 <Location /> Order Allow,Deny Deny from all </Location> </VirtualHost>
对允许的域名做如下设置,允许的域名这段代码放在上面禁止的代码之后:
<VirtualHost *:80> ServerName domain.com ServerAlias www.domain.com DocumentRoot /var/www/ <Directory "/var/www/"> Options Indexes FollowSymLinks AllowOverride all Order allow,deny Allow from all </Directory> </VirtualHost>
如果有多个域名,复制多个即可。
原文见这里 http://blog.itpub.net/59745/viewspace-611292/
上的设置已经完成,重启以观后效
后续补充:
经过一段时间测试后发现 maildrop又被塞满了,然后 使用crontab -e 对 root的crontab进行了编辑。 增加一行 MAILTO="" 再试试吧。