CrowdSecGatekeeper保护您的PHP网站免受机器人攻击CrowdSecGatekeeper旨在包含在任何PHP应用程序中,以帮助阻止攻击者。PHP是网络上广泛使用的编程语言,估计近80%的网站都在使用它。我在CrowdSec的团队决定,我们需要为服务器管理员提供PHP网守,以帮助抵御可能尝试与PHP文件交互的机器人和不良行为者。CrowdSecGatekeeper可以在应用程序堆栈的每个级别进行设置:Web服务器、防火墙、CDN等。本文重点关注另一个级别:直接在应用程序级别设置补救措施。出于多种原因,直接在应用程序中进行补救是有帮助的:它为潜在的安全威胁提供了业务逻辑答案。它提供了关于如何响应安全问题的自由。虽然CrowdSec发布了一个WordPress网守,但这个PHP库旨在包含在任何PHP应用程序(例如Drupal)中。这个看门人有助于阻止攻击者,用验证码挑战他们,让人类通过,同时阻止机器人。先决条件本教程假设您在Linux服务器上运行Drupal并使用Apache作为Web服务器。第一步是在您的服务器上安装CrowdSec。您可以使用官方安装程序脚本来完成。如果您使用的是Fedora、CentOS或类似软件,请下载RPM版本:$curl-shttps://packagecloud.io/install/repositories/crowdsec/crowdsec/script.rpm.sh在Debian和基于Debian的系统上,下载DEB版本:$curl-shttps://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh这些脚本很简单,所以请仔细阅读您下载的脚本以验证它是否导入了GPG密钥并配置了一个新的存储库。知道它的作用后,执行它,然后安装。$sudodnf安装crowdsec||sudoaptinstallcrowdsecCrowdSec将自我检测所有现有服务,因此无需进一步配置即可立即获得正常运行的设置。测试初始设置现在您已经安装了CrowdSec,启动Web应用程序漏洞扫描器(如Nikto)并查看其性能:$./nikto.pl-hhttp://$./nikto.pl-hhttp://niktoscan已检测到此IP地址会触发各种情况,最后一个是crowdsecurity/http-crawl-non_statics:detectedscan但是,CrowdSec仅检测问题并需要网守来应用补救措施。这就是PHP看门人发挥作用的地方。使用PHPGatekeeper修复现在您可以检测到恶意行为,您需要在网站级别阻止IP。目前,没有适用于Drupal的Gatekeeper可用。但是,您可以直接使用PHP网守。它是如何工作的?PHP网守(与任何其他网守一样)调用CrowdSec的API并检查是否应禁止传入IP、向它们发送验证码或允许它们通过。Web服务器是Apache,因此您可以使用Apache安装脚本:$gitclonehttps://github.com/crowdsecurity/cs-php-bouncer.git$cdcs-php-bouncer/$./install.sh--apache安装脚本网守配置用于保护整个网站。可以通过调整Apache的配置来保护网站的特定部分。尝试访问已安装和配置PHPGatekeeper的网站。您因之前的一次网页漏洞扫描操作被封禁,您可以尝试访问本站查看:siteaccessattemptGatekeeper成功拦截了您的流量。如果您在之前的网络漏洞扫描后没有被禁止,您可以添加一个手动决定:$csclidecisionsadd-i对于其余测试,删除当前决定:$csclidecisionsdelete-i更改此外,我阻止了试图破坏PHP网站的IP。这很好,但是尝试扫描、抓取或DDoS的IP怎么办?这些类型的检测可能会导致误报,那么为什么不返回验证码挑战来检查它是真实用户(而不是机器人),而不是阻止IP?检测爬虫和扫描器我不喜欢爬虫和不良用户代理,Hub上有各种解决方案可以找到它们。确保使用cscli在Hub上下载base-http-scenarios集合:$csclicollectionslist|grepbase-http-scenarioscrowdsecurity/base-http-scenarios??启用/etc/crowdsec/collections/base-http-scenarios。如果找不到yaml,请安装它并重新加载CrowdSec:$sudocsclicollectionsinstallcrowdsecurity/base-http-scenarios$sudosystemctlreloadcrowdsec使用Captcha修复由于检测到DDoS,爬虫或恶意用户代理可能会导致误报,我'd更愿意为触发这些的任何IP地址返回验证码,以避免阻止真实用户。为此,请修改profiles.yaml文件。在/etc/crowdsec/profiles.yaml中的配置文件开头添加此YAML块:---#/etc/crowdsec/profiles.yamlname:crawler_captcha_remediationfilter:Alert.Remediation==true&&Alert.GetScenario()in["crowdsecurity/http-crawl-non_statics","crowdsecurity/http-bad-user-agent"]decisions:-type:captchaduration:4hon_success:break使用此配置文件,任何触发crowdsecurity/http-crawl-non_statics或crowdsecurity/http-bad-user-agent场景中的IP地址将使用验证码强制执行(4小时)。接下来,重新加载CrowdSec:$sudosystemctlreloadcrowdsec尝试自定义补救措施重新启动Web漏洞扫描程序会触发许多情况,因此您最终会再次被禁止。相反,您可以直接设计一个触发不良用户代理场景的攻击(已知不良用户代理列表在此处)。请注意,您必须激活规则两次才能被禁止。$curl--silent-I-H"User-Agent:Cocolyzebot"http://example.com>/dev/null$curl-I-H"User-Agent:Cocolyzebot"http://example.comHTTP/1.1200OK日期:2021年10月5日星期二09:35:43GMT服务器:Apache/2.4.41(Ubuntu)到期时间:1978年11月19日星期日05:00:00GMT缓存控制:无缓存,必须重新验证X-Content-Type-options:nosniffContent-Language:enX-Frame-Options:SAMEORIGINX-Generator:Drupal7(http://drupal.org)Content-Type:text/html;charset=utf-8当然,如您所见,您的行为将被捕获。$sudocsclidecisionslistdetectedscan如果您尝试访问该站点,而不是简单地被阻止,您将收到一个验证码:CAPTCHA提示一旦您解决了这个验证码,您将能够重新访问该站点。接下来,再次解禁自己:$csclidecisionsdelete-i启动漏洞扫描器:$./nikto.pl-hhttp://example.com与上次不同,现在你可以看到你触发了几个决定:scandetectedWhen尝试访问该网站时,禁令决定具有优先权:站点访问尝试摘要这是帮助防止攻击者进入PHP网站和应用程序的快速方法。本文仅包含一个示例。Remedy可以轻松扩展以适应额外的需求。要了解有关安装和使用CrowdSec代理的更多信息,请查看此入门指南。要下载PHPGatekeeper,请转到CrowdSecHub或GitHub。