新聞中心
CrowdSec 門(mén)衛(wèi)被設(shè)計(jì)成可以包含在任何 php 應(yīng)用程序中,以幫助阻止攻擊者。

創(chuàng)新互聯(lián)專(zhuān)業(yè)為企業(yè)提供藍(lán)田網(wǎng)站建設(shè)、藍(lán)田做網(wǎng)站、藍(lán)田網(wǎng)站設(shè)計(jì)、藍(lán)田網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、藍(lán)田企業(yè)網(wǎng)站模板建站服務(wù),10余年藍(lán)田做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
PHP 是 web 上廣泛使用的一種編程語(yǔ)言,據(jù)估計(jì)有近 80% 的網(wǎng)站使用它。我在 CrowdSec 的團(tuán)隊(duì)決定,我們需要為服務(wù)器管理員提供一個(gè) PHP 門(mén)衛(wèi),以幫助抵御那些可能試圖與 PHP 文件互動(dòng)的機(jī)器人和不良分子。
CrowdSec 門(mén)衛(wèi)可以在應(yīng)用棧的各個(gè)層面上進(jìn)行設(shè)置:Web 服務(wù)器、防火墻、CDN 等等。本文關(guān)注的是另外一個(gè)層次:直接在應(yīng)用層面設(shè)置補(bǔ)救措施。
由于各種原因,直接在應(yīng)用程序中進(jìn)行補(bǔ)救是有幫助的:
- 它為潛在的安全威脅提供了業(yè)務(wù)邏輯上的答案。
- 它提供了關(guān)于如何應(yīng)對(duì)安全問(wèn)題的自由。
雖然 CrowdSec 已經(jīng)發(fā)布了一個(gè) WordPress 門(mén)衛(wèi),但這個(gè) PHP 庫(kù)被設(shè)計(jì)成可以包含在任何 PHP 應(yīng)用中(例如 Drupal)。該門(mén)衛(wèi)有助于阻止攻擊者,用驗(yàn)證碼挑戰(zhàn)他們,讓人類(lèi)通過(guò),同時(shí)阻止機(jī)器人。
先決條件
本教程假定你在 Linux 服務(wù)器上運(yùn)行 Drupal,并使用 Apache 作為 Web 服務(wù)器。
第一步是在你的服務(wù)器上 安裝 CrowdSec。你可以用 官方安裝腳本 來(lái)完成。如果你使用的是 Fedora、CentOS 或類(lèi)似系統(tǒng),請(qǐng)下載 RPM 版本:
$ curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.rpm.sh
在 Debian 和基于 Debian 的系統(tǒng)上,下載 DEB 版本:
$ curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh
這些腳本很簡(jiǎn)單,所以仔細(xì)閱讀你下載的腳本,以驗(yàn)證它是否導(dǎo)入了 GPG 密鑰并配置了一個(gè)新的存儲(chǔ)庫(kù)。當(dāng)你清楚了它的作用后,就執(zhí)行它,然后安裝。
$ sudo dnf install crowdsec || sudo apt install crowdsec
CrowdSec 會(huì)自己檢測(cè)到所有現(xiàn)有的服務(wù),所以不需要進(jìn)一步的配置就可以立即得到一個(gè)能發(fā)揮功能的設(shè)置。
測(cè)試初始設(shè)置
現(xiàn)在你已經(jīng)安裝了 CrowdSec,啟動(dòng)一個(gè) Web 應(yīng)用漏洞掃描器,比如 Nikto,看看它的表現(xiàn)如何:
$ ./nikto.pl -h http://
該 IP 地址已被檢測(cè)到觸發(fā)了各種場(chǎng)景,最后一個(gè)是 crowdsecurity/http-crawl-non_statics:
然而,CrowdSec 只檢測(cè)問(wèn)題,需要一個(gè)門(mén)衛(wèi)來(lái)應(yīng)用補(bǔ)救措施。這就是 PHP 門(mén)衛(wèi)發(fā)揮作用的地方。
用 PHP 門(mén)衛(wèi)進(jìn)行補(bǔ)救
現(xiàn)在你可以檢測(cè)到惡意行為了,你需要在網(wǎng)站層面上阻止 IP。在這個(gè)時(shí)候,沒(méi)有用于 Drupal 的門(mén)衛(wèi)可用。然而,你可以直接使用 PHP 門(mén)衛(wèi)。
它是如何工作的?PHP 門(mén)衛(wèi)(和其他門(mén)衛(wèi)一樣)對(duì) CrowdSec 的 API 進(jìn)行調(diào)用,并檢查是否應(yīng)該禁止進(jìn)入的 IP,向他們發(fā)送驗(yàn)證碼,或者允許他們通過(guò)。
Web 服務(wù)器是 Apache,所以你可以使用 Apache 的安裝腳本:
$ git clone https://github.com/crowdsecurity/cs-php-bouncer.git
$ cd cs-php-bouncer/
$ ./install.sh --apache
門(mén)衛(wèi)的配置是用來(lái)保護(hù)整個(gè)網(wǎng)站。可以通過(guò)調(diào)整 Apache 的配置保護(hù)網(wǎng)站的一個(gè)特定部分。
嘗試訪(fǎng)問(wèn)網(wǎng)站
PHP 門(mén)衛(wèi)已經(jīng)安裝并配置好。由于之前的網(wǎng)絡(luò)漏洞掃描行動(dòng),你被禁止了,你可以嘗試訪(fǎng)問(wèn)該網(wǎng)站看看:
門(mén)衛(wèi)成功阻止了你的流量。如果你在以前的 Web 漏洞掃描后沒(méi)有被禁止,你可以用增加一個(gè)手動(dòng)決策:
$ cscli decisions add -i
對(duì)于其余的測(cè)試,刪除當(dāng)前的決策:
$ cscli decisions delete -i
更進(jìn)一步
我封鎖了試圖破壞 PHP 網(wǎng)站的 IP。這很好,但那些試圖掃描、爬取或 DDoS 的 IP 怎么辦?這些類(lèi)型的檢測(cè)可能會(huì)導(dǎo)致誤報(bào),那么為什么不返回一個(gè)驗(yàn)證碼挑戰(zhàn)來(lái)檢查它是否是一個(gè)真正的用戶(hù)(而不是一個(gè)機(jī)器人),而不是封鎖 IP?
檢測(cè)爬蟲(chóng)和掃描器
我不喜歡爬蟲(chóng)和壞的用戶(hù)代理,在 Hub 上有各種方案可以用來(lái)發(fā)現(xiàn)它們。
確保用 cscli’ 下載了 Hub 上的base-http-scenarios` 集合:
$ cscli collections list | grep base-http-scenarios
crowdsecurity/base-http-scenarios ? enabled /etc/crowdsec/collections/base-http-scenarios.yaml
如果沒(méi)有找到,請(qǐng)安裝它,并重新加載 CrowdSec:
$ sudo cscli collections install crowdsecurity/base-http-scenarios
$ sudo systemctl reload crowdsec
用驗(yàn)證碼補(bǔ)救
由于檢測(cè) DDoS、爬蟲(chóng)或惡意的用戶(hù)代理可能會(huì)導(dǎo)致誤報(bào),我更傾向于對(duì)任何觸發(fā)這些情況的 IP 地址返回一個(gè)驗(yàn)證碼,以避免阻止真正的用戶(hù)。
為了實(shí)現(xiàn)這一點(diǎn),請(qǐng)修改 profiles.yaml 文件。
在 /etc/crowdsec/profiles.yaml 中的配置文件的開(kāi)頭添加這個(gè) 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
有了這個(gè)配置文件,任何觸發(fā) crowdsecurity/http-crawl-non_statics 或 crowdsecurity/http-bad-user-agent 場(chǎng)景的 IP 地址都會(huì)被強(qiáng)制執(zhí)行一個(gè)驗(yàn)證碼(持續(xù) 4 小時(shí))。
接下來(lái),重新加載 CrowdSec:
$ sudo systemctl reload crowdsec
嘗試自定義的補(bǔ)救措施
重新啟動(dòng) Web 漏洞掃描器會(huì)觸發(fā)很多場(chǎng)景,所以你最終會(huì)再次被禁止。相反,你可以直接制作一個(gè)觸發(fā) bad-user-agent 場(chǎng)景的攻擊(已知的壞用戶(hù)代理列表在 這里)。請(qǐng)注意,你必須激活該規(guī)則兩次才能被禁止。
$ curl --silent -I -H "User-Agent: Cocolyzebot" http://example.com > /dev/null
$ 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
當(dāng)然,你可以看到,你的行為會(huì)被抓住。
$ sudo cscli decisions list
如果你試圖訪(fǎng)問(wèn)該網(wǎng)站,不會(huì)被簡(jiǎn)單地被阻止,而是會(huì)收到一個(gè)驗(yàn)證碼:
一旦你解決了這個(gè)驗(yàn)證碼,你就可以重新訪(fǎng)問(wèn)網(wǎng)站了。
接下來(lái),再次解禁自己:
$ cscli decisions delete -i
啟動(dòng)漏洞掃描器:
$ ./nikto.pl -h http://example.com
與上次不同的是,你現(xiàn)在可以看到,你已經(jīng)觸發(fā)了幾個(gè)決策:
當(dāng)試圖訪(fǎng)問(wèn)網(wǎng)站時(shí),禁止決策具有優(yōu)先權(quán):
總結(jié)
這是一個(gè)幫助阻止攻擊者進(jìn)入 PHP 網(wǎng)站和應(yīng)用程序的快速方法。本文只包含一個(gè)例子。補(bǔ)救措施可以很容易地?cái)U(kuò)展,以適應(yīng)額外的需求。要了解更多關(guān)于安裝和使用 CrowdSec 代理的信息,查看這個(gè)方法指南 來(lái)開(kāi)始。
要下載 PHP 門(mén)衛(wèi),請(qǐng)到 CrowdSec Hub 或 GitHub。
網(wǎng)站欄目:用CrowdSec保護(hù)你的PHP網(wǎng)站不受機(jī)器人攻擊
轉(zhuǎn)載來(lái)于:http://www.dlmjj.cn/article/cdgdijc.html


咨詢(xún)
建站咨詢(xún)
