文章

如何使用Cloudflare保护您的WordPress网站

用于保护WordPress的Cloudflare防火墙规则

本指南面向具有安全意识的网站管理员,他们在启用Cloudflare的域上运行WordPress网站或博客。在免费计划中,Cloudflare会授予五个默认为空的防火墙规则。

通过添加我在本页上描述的特定于WordPress的规则,您可以保护您的网站并阻止攻击,甚至阻止它们到达Web主机的服务器。

将您的IP地址列入白名单

在实施任何防火墙规则之前,应首先将自己的IP列入白名单。这样一来,如果您决定将WordPress管理区域拒之门外,您就不会受到影响(我将在稍后解释)。

可以通过访问Cloudflare仪表板并单击防火墙,然后 单击 工具,输入IP *,然后 在下拉菜单中选择 白名单来完成此操作.

*您可以按安全性从高到低的顺序选择几种方式:

  • 将您的确切 IP地址列入白名单 。ISP授予您静态IP的最佳选择。请注意,如果您的IP发生更改,则需要重新输入,以免被锁定在WordPress管理区域之外。
  • 将您的ISP的整个IP范围列入白名单。如果您拥有动态IP,则是不错的选择。
  • 将您的国家列入白名单。这不能保护您免受自己国家/地区内部的攻击,但是如果您经常出差并使用Wi-Fi连接到WordPress网站,这可能是一个方便的选择。

以这种方式列入白名单的IP地址或国家/地区将不受 所有 防火墙规则的限制,因此您无需为每个单独的规则添加例外。

1.阻止wp-login.php攻击

如果您查看服务器日志,可能会发现来自世界各地的大量IP试图访问wp-login.php文件。这是迄今为止对WordPress安装最常见的攻击。这些通常是自动扫描,不会带来很大的威胁,但是您仍然可以放心地将其阻止。

在Cloudflare仪表板中, 再次单击“ 防火墙”,然后按蓝色的“ 创建防火墙规则” 按钮。将其命名为任意名称,然后输入以下内容:

  • 栏位:URI路径
  • 运算符:包含
  • 值:/wp-login.php

[动作:封锁]

如果你做的没错,你应该看到下面的 表达式预览 部分:

1个(http.request.uri.path contains "/wp-login.php")

保存规则,它应该自动启用。现在,Cloudflare将开始阻止所有尝试连接到wp-login.php的尝试,但您列入白名单的IP除外。

这些蛮力尝试将从您的服务器日志中消失,但是如果您希望验证保护功能是否起作用,则可以在Cloudflare的“防火墙事件” 部分中进行跟踪 。

2.阻止xmlrpc.php攻击

在wp-login.php之后,xmlrpc.php是第二常见的攻击目标。XML-RPC具有合法用途,例如从智能手机撰写博客,或一次将内容发布到多个WordPress网站。但是,如果不需要它,则可以安全地将其阻止。遵循与之前相同的步骤,并创建规则:

  • 栏位:URI路径
  • 运算符:包含
  • 值:/xmlrpc.php

[动作:封锁]

您应该在“表达式预览” 部分中看到以下 内容:

1个(http.request.uri.path contains "/xmlrpc.php")

3.保护wp-admin区域

现在,让我们让您(只有您自己)可以访问您的管理区域。该规则稍微复杂一点,因为您需要做出两个例外。

首先是/wp-admin/admin-ajax.php,某些插件使用它来在您的网站上显示动态内容。因此,尽管位于/ wp-admin /文件夹中,但仍需要从外部对其进行访问。

第二个是/wp-admin/theme-editor.php,它在您每次通过内置编辑器通过对主页创建回送请求来编辑主题时都运行错误检查。如果不添加此例外,则检查将失败,并显示一条消息“无法与站点进行通讯以检查致命错误”,并且您的修改将不会保存。

继续并创建以下规则:

  • 栏位:URI路径
  • 运算符:包含
  • 值:/ wp-admin /

[和]

  • 栏位:URI路径
  • 运算符:不包含
  • 值:/wp-admin/admin-ajax.php

[和]

  • 栏位:URI路径
  • 运算符:不包含
  • 值:/wp-admin/theme-editor.php

[动作:封锁]

或者,只需点击 编辑表达 和粘贴以下:

1个(http.request.uri.path contains "/wp-admin/" and not http.request.uri.path contains "/wp-admin/admin-ajax.php" and not http.request.uri.path contains "/wp-admin/theme-editor.php")

4.阻止对插件的无引用请求

大多数WordPress网站都通过不安全的插件被黑客入侵。当然,最好的办法是不安装它们,但是您也可以创建防火墙规则来阻止直接访问/ wp-content / plugins /。

通过您的网站发出的合法请求带有“ http://yoursite.com/page”作为HTTP引用的内容,并且将被自动允许。您可能还希望允许已知的优秀漫游器(例如Google搜寻器)通过,以防它们试图在您的plugins文件夹中索引某些内容(例如图像)。

创建以下规则:

  • 栏位:URI路径
  • 运算符:包含
  • 值:/ wp-content / plugins /

[和]

  • 领域:推荐人
  • 运算符:不包含
  • 值:yoursite.com(替换为您的真实域名

[和]

  • 领域:已知机器人
  • 运算符:等于
  • 值:关

[动作:封锁]

或者,只需粘贴此直接表达(记得与实际地址来替换yoursite.com): 

1个(http.request.uri.path contains "/wp-content/plugins/" and not http.referer contains "yoursite.com" and not cf.client.bot)

5.通过阻止对wp-comments-post.php的直接请求来减少垃圾邮件

我会说实话:由于这些天的垃圾邮件机器人非常复杂,足以欺骗引荐来源,因此此规则的影响将很小。这只会阻止僵尸程序直接锤击wp-comments-post.php文件。尽管如此,WordPress Codex中也描述了相同的技巧(除非他们使用.htaccess规则而不是Cloudflare),因此,如果对他们足够好,对我也足够。

规则如下:

  • 栏位:URI路径
  • 运算符:等于
  • 值:/wp-comments-post.php

[和]

  • 字段:请求方法
  • 运算符:等于
  • 开机自检

[和]

  • 领域:推荐人
  • 运算符:不包含
  • 值:yoursite.com(替换为您的真实域名

[动作:封锁]

这是节省您时间的表达式:?

1个(http.request.uri.path eq "/wp-comments-post.php" and http.request.method eq "POST" and not http.referer contains "yoursite.com")

您的网站现在更加安全!

这五个规则应涵盖最常见的WordPress攻击,但可以根据需要进行调整和组合。

您在日志中看到的大多数攻击都来自自动漫游器,它们只是愚蠢地扫描网站的漏洞,但是如果白名单IP之外的人试图访问您的管理区域,则会收到类似“错误1020”的页面(您可以通过代理或VPN对其进行确认):