CrowdSec 门卫被设计成可以包括在一切 PHP 应用软件中,以协助阻止攻击者。
PHP 是 Web 上普遍采用的一种计算机语言,据统计有近 80% 的网址应用它。我还在 CrowdSec 的精英团队决策,大家必须为服务器管理人员给予一个 PHP 门卫,以协助抵挡这些很有可能尝试与 PHP 文档互动交流的智能机器人和不良分子。
CrowdSec 门卫可以在运用栈的不同方面上完成设定:Web 服务器、服务器防火墙、CDN 这些。文中关心的是此外一个层级:立即在使用方面设定防范措施。
因为多种缘故,立即在应用软件中开展弥补是有幫助的:
它为不确定性的安全性危害给予了领域模型上的回答。
它保证了有关怎么看待安全隐患的随意。
尽管 CrowdSec 早已公布了一个 WordPress 门卫,但这一 PHP 库被设计成可以包括在一切 PHP 运用中(例如 Drupal)。该门卫有利于阻止攻击者,用短信验证码挑戰她们,让人们根据,与此同时阻止智能机器人。
前提条件
本实例教程假设你在 Linux 服务器上运作 Drupal,并应用 Apache 做为 Web 服务器。
第一步是在你的服务器上 安裝 CrowdSec。你能用 官方网安裝脚本制作 来进行。假如你应用的是 Fedora、CentOS 或相近系统软件,立即下载 RPM 版本:
https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.rpm.sh
在 Debian 和根据 Debian 的系統上,免费下载 DEB 版本:
https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh
这种脚本制作非常简单,因此认真阅读你下载的脚本制作,以认证它是不是导进了 GPG 密匙并配备了一个新的储存库。如果你明白了它的功效后,就实行它,随后安裝。
CrowdSec 会自身检验到全部目前的服务项目,因此不用进一步的配备就可以马上获得一个能充分发挥作用的设定。
检测原始设定
如今你早已安装使用了 CrowdSec,运行一个 Web 运用渗透测试工具,例如 Nikto,看一下它的表現怎样:
$ ./nikto.pl -h http://<ip_or_domain>
nikto scan
该 IP 详细地址已被检验到开启了各种各样情景,最后一个是 crowdsecurity/http-crawl-non_statics:
detected scan
殊不知,CrowdSec 只检验问题,必须一个门卫来运用防范措施。这就是 PHP 门卫充分发挥的地区。
用 PHP 门卫开展弥补
如今你能检验到故意个人行为了,你需要在网址方面上阻止 IP。在这个时候,沒有用以 Drupal 的门卫可以用。殊不知,你能立即应用 PHP 门卫。
它是怎样作业的?PHP 门卫(和别的门卫一样)对 CrowdSec 的 API 开展启用,并检验是不是应当禁止入内的 IP,向她们发送验证码,或是容许她们根据。
Web 服务器是 Apache,因此你能应用 Apache 的安裝脚本制作:
$ cd cs-php-bouncer/
$ ./install.sh --apache
apache install script
门卫的配置是拿来维护全部网站。可以利用调节 Apache 的配置维护网站的一个特殊一部分。
尝试浏览网站
PHP 门卫早已安裝并配置好。因为以前的互联网漏洞扫描行为,你被严禁了,你可以尝试浏览该网站看一下:
site access attempt
门卫取得成功阻拦了你的总流量。假如你在过去的 Web 漏洞扫描后沒有被严禁,你可以用提升一个手动式管理决策:
针对其他的检测,删除当前的管理决策:
更进一步
我封禁了尝试毁坏 PHP 网站的 IP。这非常好,但这些尝试扫描仪、抓取或 DDoS 的 IP 该怎么办?这种类别的检验很有可能会造成乱报,那麼为什么不回到一个短信验证码挑戰来检验它是不是一个真正意义上的客户(而不是一个机器人),而不是封禁 IP?
检验网络爬虫和扫码器
我不太喜欢网络爬虫和坏的客户代理商,在 Hub 上面有各种各样方法可以用于发觉他们。
保证用 cscli’ 安装了 Hub 上的base-http-scenarios` 结合:
crowdsecurity/base-http-scenarios ✔️ enabled /etc/crowdsec/collections/base-http-scenarios.yaml
要是没有寻找,请安裝它,并重新加载 CrowdSec:
$ sudo systemctl reload crowdsec
用短信验证码弥补
因为检验 DDoS、网络爬虫或虚假的客户代理商很有可能会造成乱报,我更偏向于对一切开启这种状况的 IP 详细地址回到一个短信验证码,以防止阻拦真真正正的客户。
为了更好地达到这一点,请改动 profiles.yaml 文档。
在 /etc/crowdsec/profiles.yaml 中的配置文件的开始加上这一 YAML 块:
# /etc/crowdsec/profiles.yaml
name: crawler_captcha_remediation
filter: Alert.Remediation == true && Alert.GetScenario() in ["crowdsecurity/http-crawl-non_statics", "crowdsecurity/http-bad-user-agent"]
decisions:
- type: captcha
duration: 4h
on_success: break
拥有这一配置文档,一切开启 crowdsecurity/http-crawl-non_statics 或 crowdsecurity/http-bad-user-agent 情景的 IP 详细地址都是会被申请强制执行一个短信验证码(不断 4 钟头)。
下面,重新加载 CrowdSec:
试着自定的补救措施
重启 Web 漏洞扫描器会触发许多场景,因此你最后会再度被禁止。反过来,你能立即制做一个触发 bad-user-agent 场景的进攻(已经知道的坏客户代理列表在 这儿)。一定要注意,你务必激话该标准2次才可以被禁止。
$ curl -I -H "User-Agent: Cocolyzebot" http://example.com
HTTP/1.1 200 OK
Date: Tue, 05 Oct 2021 09:35:43 GMT
Server: Apache/2.4.41 (Ubuntu)
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Cache-Control: no-cache, must-revalidate
X-Content-Type-options: nosniff
Content-Language: en
X-Frame-Options: SAMEORIGIN
X-Generator: Drupal 7 (http://drupal.org)
Content-Type: text/html; charset=utf-8
自然,你能见到,你的手段会被把握住。
detected scan
假如你尝试浏览该网址,不容易被简易的被阻拦,反而是会得到一个短信验证码:
CAPTCHA prompt
一旦你解决了这一短信验证码,你也就可以再次浏览网址了。
下面,再度公开自身:
运行漏洞扫描器:
与之前不一样的是,你如今能够看见,你早已触发了好多个管理决策:
scan detected
当尝试浏览站点时,禁止管理决策具备所有权:
site access attempt
汇总
这是一个协助阻拦网络攻击进到 PHP 网址和程序的更快方式。文中只包括一个事例。补救措施可以比较容易地拓展,以融入附加的要求。要认识更多的有关安裝和应用 CrowdSec 代理商的信息内容,查询这一方式手册 来逐渐。
要免费下载 PHP 保安,请到 CrowdSec Hub 或 GitHub。