记录一次解决Drupal站点用户恶意注册的过程

Submitted by admin on Thu, 05/14/2015 - 10:57

背景:

  在一个电子商务网站上发现有很多@sina.com的垃圾注册用户。虽然已经开启了honeypot模块,但是没有屏蔽住此类注册。

分析:

  攻击者可能比较熟悉honeypot的工作机制,可以自己编写相应的脚本实现恶意注册。

  在Drupal系统中,默认情况下,用户注册都会有日志记录,保存在watchdog表中。通过分析watchdog表中的关于用户的日志的情况,可以统计出相应的信息供参考。

  然后通过user block模块或其他相应模块屏蔽该恶意IP的注册。


解决步骤:

 在任意mysql客户端,或者phpmysql里面执行如下sql语句:

select count(hostname) as count, hostname from watchdog where type="user" group by hostname order by count desc;

可以得到类似如下的统计结果

| count | hostname        |
+-------+-----------------+
|    53 | 173.208.222.90  |
|    31 | 173.208.222.42  |
|    20 | 173.208.222.146 |
|     4 | 216.244.84.43   |
|     2 | 61.219.177.117  |
|     2 | 173.208.253.83  |
|     2 | 217.168.16.33   |
|     2 | 109.73.170.223  |
|     2 | 5.101.140.233   |
|     1 | 180.180.77.131  |
|     1 | 183.207.224.51  |
|     1 | 222.44.86.167   |

可以看到在173.208.222.0/24这个IP段有大量的访问,在www.ip138.com查询,得知该ip位于美国;由于网站主要面向中国用户,基本可以判断这就是恶意注册的ip来源。

Drupal默认的ip屏蔽策略不支持针对IP段的屏蔽。可以使用ip ranges模块实现基于ip段的屏蔽。


额外的思考:

  使用Drupal模块的方式进行屏蔽,可以仅通过鼠标点击的方式解决问题,比较轻松。同时可以开放权限给相关人员,减轻开发者负担。


  最好的方式,是在服务器层进行屏蔽,nginx与apache都有相应的配置可以实现针对指定IP与IP段的屏蔽访问;这种方式对系统资源消耗较小。缺陷是配置比较麻烦,需要登录服务器进行操作。

  如下是nginx与apache的屏蔽ip访问的官方文档。

  http://nginx.com/resources/admin-guide/restricting-access/

  http://httpd.apache.org/docs/2.2/howto/access.html