我的Drupal站点上发现有很多@sina.com的垃圾注册。虽然已经开启了honeypot模块,没有屏蔽住此类注册。
分析:
攻击者可能比较熟悉honeypot的工作机制,可以自己编写相应的脚本实现恶意注册。
在Drupal系统中,默认情况下,用户注册都会有日志记录,保存在watchdog表中。通过分析watchdog表中的关于用户的日志的情况,可以统计出相应的信息供参考。
然后通过user block模块或其他相应模块屏蔽该恶意IP的注册。
解决步骤:
在任意mysql客户端执行如下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段的屏蔽访问;这种方式对系统资源消耗较小。缺陷是配置比较麻烦,需要登录服务器进行操作。
这里再推荐一款中国验证码模板,如果你的Drupal站点是面向中文用户的话:
https://www.drupal.org/project/chinese_captcha