是否可以根据 IP 地址提供特定页面?

是否可以根据 IP 地址提供特定页面?

我拥有的两个 WordPress 网站都曾遭受过暴力攻击。攻击者使用老套的 XML-RPC 来增强暴力密码攻击的效果。幸运的是,我们的密码生成得非常好,所以我非常怀疑他能得逞。

我一直在使用 iptables 来阻止他的请求,无论何时他再次出现(总是来自同一个虚拟云提供商),但我更愿意修改服务器,以便每当他的 IP 地址请求任何页面,他收到一条回复,告诉他去生活。大多数请求都是 POST,因此我理想情况下只想修改响应标头,使其包含“下次好运!”之类的内容,或者其他同样令人满意的内容。

这可能吗?我远不是 Apache 专家,所以我不确定实现起来有多难。但即使这需要我几个小时,这种满足感也是无价的。

作为参考,我正在运行 Ubuntu 16.04.2 LTS,使用 Apache 2.4.18 托管 Wordpress 4.7.3。

答案1

只需安装失败2ban使用适当的 jail 并完成它。不要费心给出自定义响应,因为它很可能永远不会被看到。

答案2

有可能逆转可能的攻击,而且我们做了很多次。使用 iptables 将云提供商(地址范围)重定向到不同的端口 - 然后为攻击者提供响应,即使是在纯标头中。

在 Apache 中你可以通过以下示例修改标头:

Header set GetOut "Better luck next time!"

答案3

使用 ModSecurity(Apache 的第三方 WAF 模块)可以轻松实现这一点。不过这需要学习其规则语言语法。

您还可以使用 ModSecurity 来断开连接而不是根本不响应。

话虽如此,但仅仅为了这个目的而安装 ModSecurity,正如其他人所说的那样,很可能响应会被忽略,这可能是小题大做。

答案4

我会选择 fail2ban 并删除来自已知滥用位置的请求。如果您认为攻击者的服务提供商没有责任,请向他们的滥用电子邮件地址报告攻击。

如果你想花时间做一些可以减慢攻击者速度的事情,你可能想尝试做一个焦油坑。首先,您当然必须知道攻击来自哪里。然后,您可以使用 apache 将来自 ip(范围?)的请求重定向到特定脚本。可能会奏效,尽管我自己还没有尝试过。然后只需实现一个脚本,例如,每 15 秒打印出一个点(或来自 /dev/null 的某些内容),以无限期地保持攻击者的连接打开。

由于攻击者很可能使用脚本来攻击您的网站,因此可能需要一些时间才能注意到攻击已经停止,因为所有连接似乎都处于活动状态,不会出现超时并且请求不会被当场拒绝。

问题在于,你投入的时间和资源可能不如更重要的事情有用:保护你的登录名。如果你不知道从哪里攻击,攻击就很难进行。考虑以下几点:

  • 限制对登录页面的访问(仅限您的内联网?IP 范围?VPN?其他?)。
  • 添加重新验证或其他验证问题来登录。
  • 使用多重身份验证
  • 隐藏您的登录页面。如果可能,不要从主页链接到该页面,也不要使用 /login 或其他明显位置。

相关内容