使用libModSecurity将对WordPress登录页面的访问限制为特定IP
在本教程中,我们将学习如何使用libModSecurity将对WordPress登录页面的访问限制为特定的IP。 libModSecurity也称为 ModSecurity 3.0版。
ModSecurity是Trustwave的SpiderLabs开发的开源,跨平台Web应用程序防火墙(WAF)模块。它被称为WAF的“瑞士军刀”,它使Web应用程序防御者能够了解HTTP(S)流量,并提供电源规则语言和API来实施高级保护。
它具有强大的基于事件的编程语言,可提供针对Web应用程序的多种攻击保护,并允许HTTP流量监视,日志记录和实时分析。
ModSecurity可以做什么?
- 实时应用程序安全监控和访问控制
- 完整的HTTP流量记录
- 持续的被动安全评估
- Web应用强化
- 由于它具有解析XML和应用XPath表达式的能力以及代理请求的能力,因此可以用作XML Web服务路由器。
- HTTP协议保护
- 实时黑名单查询
- HTTP拒绝服务保护
- 通用Web攻击防护
- 错误检测与隐藏
使用libModSecurity将对WordPress登录页面的访问限制为特定IP
WordPress登录页面始终受到暴力攻击,恶意行为者始终会尝试对您的WordPress尝试使用多种身份验证凭据的任意组合,以获取对它的访问权限。
您可以使用多种方法来保护WordPress登录页面免受这些攻击,包括;
- 启用基本的Web服务器HTTP身份验证。
- 限制从Web服务器配置上的特定IP地址访问WordPress目录
- 使用可屏蔽WordPress身份验证URL的插件
- 对任何用户帐户使用非常见用户名(例如admin)
- 等等
所有这些方法都很好。但是,您也可以使用ModSecurity保护WordPress登录页面免受这些攻击,而这正是本教程的全部内容。
安装和设置WordPress网站
好吧,您可以保护不存在的东西。因此,您需要启动并运行WordPress网站。您可以点击以下链接,了解如何在CentOS 8系统上使用Nginx和MySQL 8安装和设置WordPress网站。
在CentOS 8上使用Nginx和MySQL 8安装WordPress
在CentOS 8上安装和设置LibModSecurity
在我们的演示中,我们的WordPress在CentOS 8上运行。我们在先前的教程中还介绍了如何使用Apache或Nginx Web服务器安装和设置LibModSecurity。根据您网站托管的Web服务器的类型,请按照下面的任何链接安装WordPress。
在CentOS 8上使用Apache配置LibModsecurity
在CentOS 8上使用Nginx配置LibModsecurity
使用libModSecurity将对WordPress登录页面的访问限制为特定IP
现在您已经有了ModSecurity WAF,让我们继续进行配置,以限制从特定IP地址访问WordPress登录页面。
设置ModSecurity时,我们已经安装了OWASP ModSecurity核心规则集(CRS),它提供了一组通用的攻击检测规则。
我们在ModSecurity规则文件中指定了这些规则的位置, /etc/httpd/conf.d/modsecurity.d/rules.conf
。
less /etc/httpd/conf.d/modsecurity.d/rules.conf
Include "/etc/httpd/conf.d/modsecurity.d/modsecurity.conf" Include "/etc/httpd/conf.d/modsecurity.d/owasp-crs/crs-setup.conf" Include "/etc/httpd/conf.d/modsecurity.d/owasp-crs/rules/*.conf"
创建自定义规则以限制对WordPress登录页面的访问
创建一个自定义规则配置文件;
vim /etc/httpd/conf.d/modsecurity.d/custom.conf
创建一个规则,以允许从特定IP地址访问WordPress登录页面(URI,wp-login.php)。
见下文;
ModSecurity规则是使用 SecRule
指示。 SecRule由4部分组成:
- 变数 –指示要查看的ModSecurity(有时称为目标)。
- 经营者 –指示ModSecurity何时触发比赛。
- 转变 –指示ModSecurity如何标准化变量数据。
- 动作 –指示ModSecurity如果规则匹配该怎么办
该规则的语法为;
SecRule VARIABLES "OPERATOR" "TRANSFORMATIONS,ACTIONS"
进一步了解此内容 制定ModSecurity规则。
有关配置指令,请检查 参考手册。
因此,我们的规则看起来像;
SecRule REQUEST_URI "@eq /wp-login.php"
"chain,
id:'2000',
phase:1,
log,
pass"
SecRule REMOTE_ADDR "@ipMatch 192.168.57.1,192.168.57.21"
ctl:ruleEngine=DetectionOnly
将规则分解为多个部分;
的 变数:
- REQUEST_URI:此变量保存完整的请求URL,包括不带域部分的查询字符串dataREQUEST_URI。例如,
/wp-login.php
。 - REMOTE_ADDR:此变量保存远程客户端的IP地址。如果Apache指令HostnameLookups设置为On,则可以使用 远程主机 包含通过DNS解析的远程主机名的变量。
的 操作员:
- @eq:执行数字比较,如果输入值等于提供的参数,则返回true
- @ipMatch:执行REMOTE_ADDR变量数据的快速ipv4或ipv6匹配。多个地址可以用逗号分隔。
的 动作:
- 链:将当前规则与紧随其后的规则链接在一起,从而创建规则链。规则链可以模拟 逻辑与。仅当所有变量检查均返回肯定命中时,才会触发链式规则第一部分中指定的破坏性操作。
- ID:为出现的规则或链分配唯一的ID。该值必须是数字。 1–99,999:保留供本地(内部)使用。
- 相:将规则或链条放入五个可用处理阶段之一。
- 请求标头(阶段1):首先分析请求标头。
- 请求主体(阶段2):请求主体阶段是主要的请求分析阶段,在收到并处理了完整的请求主体之后立即进行。
- 响应头(阶段3):响应头阶段发生在响应头可用之后,但在读取响应主体之前。
- 响应主体(阶段4):主要的响应分析阶段。
- 记录(阶段5):您无法阻止的唯一阶段。
- 日志:表示需要记录规则的成功匹配。
- 通过:尽管匹配成功,仍继续使用下一条规则进行处理。
- ctl:在每次交易的临时基础上更改ModSecurity配置。使用此操作进行的任何更改将仅影响执行该操作的事务。 ruleEngine = DetectionOnly,为此特定规则更改ModSecurity的操作模式。
因此,基本上,该规则接受每个HTTP请求并提取等于的URI部分 wp-login.php
,它会为规则分配一个唯一的ID 2001,将该规则放置在请求标头阶段,在成功匹配的情况下记录该规则,将该规则与下一个规则进行链接,继续处理下一个检查请求IP的规则地址与指定的地址匹配,如果为true,则将ModSecurity设置为仅检测(允许)模式。
创建规则以拒绝对WordPress登录页面的任何访问
接下来,您需要阻止对WordPress登录页面的所有其他访问。因此,创建一个拒绝访问的规则。将规则放在上面规则之后的同一文件中;
SecRule REQUEST_URI "@contains wp-login" "id:2001,phase:1,t:lowercase,log,deny,msg:'Warning, Access to WordPress Login page is Restricted'"
现在,我们的一般规则是:
SecRule REQUEST_URI "@eq /wp-login.php" "chain, id:'2000', phase:1, log, pass" SecRule REMOTE_ADDR "@ipMatch 192.168.57.1,192.168.57.21" ctl:ruleEngine=DetectionOnly SecRule REQUEST_URI "@contains wp-login" "id:2001,phase:1,t:lowercase,log,deny,msg:'Warning, Access to WordPress Login page is Restricted'"
配置ModSecurity以处理自定义规则
现在我们已经准备好规则,配置ModSecurity来处理该规则。
在我们的设置中 /etc/httpd/conf.d/modsecurity.d/rules.conf
是我们的主要ModSecurity规则配置文件。
因此,我们需要在主规则文件中包含我们的自定义规则配置文件。
echo 'Include "/etc/httpd/conf.d/modsecurity.d/custom.conf"' >> /etc/httpd/conf.d/modsecurity.d/rules.conf
我们的主要规则配置文件如下所示;
less /etc/httpd/conf.d/modsecurity.d/rules.conf
Include "/etc/httpd/conf.d/modsecurity.d/modsecurity.conf" Include "/etc/httpd/conf.d/modsecurity.d/owasp-crs/crs-setup.conf" Include "/etc/httpd/conf.d/modsecurity.d/owasp-crs/rules/*.conf" Include "/etc/httpd/conf.d/modsecurity.d/custom.conf"
重新启动Apache
要进行更改,请重新启动Apache;
systemctl restart httpd
测试对WordPress登录的访问权限
要验证我们的规则是否有效,只需尝试从IP地址不属于上述白名单地址的来源访问WordPress。
在我们的例子中,我们正在从IP地址为 192.168.57.22
。
如果一切正常,在浏览器上,您将收到此错误;
在日志上,您应该看到这样的日志条目。
tail -f /var/log/httpd/modsec_audit.log
... ---pnERTMML---A-- [11/Jul/2020:15:33:58 +0300] 159447083849.637890 192.168.57.22 48084 wp.kifarunix-demo.com 0 ---pnERTMML---B-- GET /wp-login.php?redirect_to=http%3A%2F%2Fwp.kifarunix-demo.com%2Fwp-admin%2F&reauth=1 HTTP/1.1 Host: wp.kifarunix-demo.com User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0 Cookie: wordpress_test_cookie=WP+Cookie+check Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive Upgrade-Insecure-Requests: 1 ---pnERTMML---D-- ---pnERTMML---F-- HTTP/1.1 403 ---pnERTMML---H-- ModSecurity: Access denied with code 403 (phase 1). Matched "Operator `Contains' with parameter `wp-login' against variable `REQUEST_URI' (Value: `/wp-login.php?redirect_to=http://wp.kifarunix-demo.com/wp-admin/&reauth=1' ) [file "/etc/httpd/conf.d/modsecurity.d/custom.conf"] [line "8"] [id "2001"] [rev ""] [msg "Warning, Access to WordPress Login page is Restricted"] [data ""] [severity "0"] [ver ""] [maturity "0"] [accuracy "0"] [hostname "wp.kifarunix-demo.com"] [uri "/wp-login.php"] [unique_id "159447083849.637890"] [ref "o1,8v4,83t:lowercase"] ...
还有其他许多方法可以保护WordPress免受攻击。因此,阻止对wp-login.php页面的访问有助于遏制蛮力攻击。
这标志着我们指南的结尾,该指南介绍了如何使用libModSecurity将对WordPress登录页面的访问限制为特定IP。我们希望这是有益的。请享用。
。