CrowdSec 門衛(wèi)被設(shè)計成可以包含在任何 PHP 應(yīng)用程序中,以幫助阻止攻擊者。
PHP 是 Web 上廣泛使用得一種編程語言,據(jù)估計有近 80% 得網(wǎng)站使用它。我在 CrowdSec得團隊決定,我們需要為服務(wù)器管理員提供一個 PHP 門衛(wèi),以幫助抵御那些可能試圖與 PHP 文件互動得機器人和不良分子。
CrowdSec 門衛(wèi)可以在應(yīng)用棧得各個層面上進行設(shè)置:Web 服務(wù)器、防火墻、CDN等等。感謝得是另外一個層次:直接在應(yīng)用層面設(shè)置補救措施。
由于各種原因,直接在應(yīng)用程序中進行補救是有幫助得:
它為潛在得安全威脅提供了業(yè)務(wù)邏輯上得答案。它提供了關(guān)于如何應(yīng)對安全問題得自由。雖然 CrowdSec 已經(jīng)發(fā)布了一個 WordPress 門衛(wèi),但這個 PHP 庫被設(shè)計成可以包含在任何 PHP 應(yīng)用中(例如 Drupal)。該門衛(wèi)有助于阻止攻擊者,用驗證碼挑戰(zhàn)他們,讓人類通過,同時阻止機器人。
先決條件本教程假定你在 Linux 服務(wù)器上運行 Drupal,并使用 Apache 作為 Web 服務(wù)器。
第壹步是在你得服務(wù)器上 安裝 CrowdSec。你可以用自家安裝腳本來完成。如果你使用得是 Fedora、CentOS 或類似系統(tǒng),請下載 RPM 版本:
$ curl -s packagecloud.io/install/repositories/crowdsec/crowdsec/script.rpm.sh
在 Debian 和基于 Debian 得系統(tǒng)上,下載 DEB 版本:
$ curl -s packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh
這些腳本很簡單,所以仔細閱讀你下載得腳本,以驗證它是否導(dǎo)入了 GPG 密鑰并配置了一個新得存儲庫。當(dāng)你清楚了它得作用后,就執(zhí)行它,然后安裝。
$ sudo dnf install crowdsec || sudo apt install crowdsec
CrowdSec 會自己檢測到所有現(xiàn)有得服務(wù),所以不需要進一步得配置就可以立即得到一個能發(fā)揮功能得設(shè)置。
測試初始設(shè)置現(xiàn)在你已經(jīng)安裝了 CrowdSec,啟動一個 Web 應(yīng)用漏洞掃描器,比如 Nikto,看看它得表現(xiàn)如何:
$ ./nikto.pl -h
該 IP 地址已被檢測到觸發(fā)了各種場景,蕞后一個是 crowdsecurity/http-crawl-non_statics
:
然而,CrowdSec 只檢測問題,需要一個門衛(wèi)來應(yīng)用補救措施。這就是 PHP 門衛(wèi)發(fā)揮作用得地方。
用 PHP 門衛(wèi)進行補救現(xiàn)在你可以檢測到惡意行為了,你需要在網(wǎng)站層面上阻止 IP。在這個時候,沒有用于 Drupal 得門衛(wèi)可用。然而,你可以直接使用 PHP 門衛(wèi)。
它是如何工作得?PHP 門衛(wèi)(和其他門衛(wèi)一樣)對 CrowdSec 得 API 進行調(diào)用,并檢查是否應(yīng)該禁止進入得 IP,向他們發(fā)送驗證碼,或者允許他們通過。
Web 服務(wù)器是 Apache,所以你可以使用 Apache 得安裝腳本:
$ git clone github/crowdsecurity/cs-php-bouncer.git$ cd cs-php-bouncer/$ ./install.sh --apache
門衛(wèi)得配置是用來保護整個網(wǎng)站。可以通過調(diào)整 Apache 得配置保護網(wǎng)站得一個特定部分。
嘗試訪問網(wǎng)站PHP 門衛(wèi)已經(jīng)安裝并配置好。由于之前得網(wǎng)絡(luò)漏洞掃描行動,你被禁止了,你可以嘗試訪問該網(wǎng)站看看:
門衛(wèi)成功阻止了你得流量。如果你在以前得 Web 漏洞掃描后沒有被禁止,你可以用增加一個手動決策:
$ cscli decisions add -i
對于其余得測試,刪除當(dāng)前得決策:
$ cscli decisions delete -i
更進一步
我封鎖了試圖破壞 PHP 網(wǎng)站得 IP。這很好,但那些試圖掃描、爬取或 DDoS 得 IP 怎么辦?這些類型得檢測可能會導(dǎo)致誤報,那么為什么不返回一個驗證碼挑戰(zhàn)來檢查它是否是一個真正得用戶(而不是一個機器人),而不是封鎖 IP?
檢測爬蟲和掃描器我不喜歡爬蟲和壞得用戶代理,在 Hub上有各種方案可以用來發(fā)現(xiàn)它們。
確保用 cscli’ 下載了 Hub 上得
base-http-scenarios` 集合:
$ cscli collections list | grep base-http-scenarioscrowdsecurity/base-http-scenarios ?? enabled /etc/crowdsec/collections/base-http-scenarios.yaml
如果沒有找到,請安裝它,并重新加載 CrowdSec:
$ sudo cscli collections install crowdsecurity/base-http-scenarios$ sudo systemctl reload crowdsec
用驗證碼補救
由于檢測 DDoS、爬蟲或惡意得用戶代理可能會導(dǎo)致誤報,我更傾向于對任何觸發(fā)這些情況得 IP 地址返回一個驗證碼,以避免阻止真正得用戶。
為了實現(xiàn)這一點,請修改 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: captcha duration: 4hon_success: break
有了這個配置文件,任何觸發(fā) crowdsecurity/http-crawl-non_statics
或crowdsecurity/http-bad-user-agent
場景得 IP 地址都會被強制執(zhí)行一個驗證碼(持續(xù) 4 小時)。
接下來,重新加載 CrowdSec:
$ sudo systemctl reload crowdsec
嘗試自定義得補救措施
重新啟動 Web 漏洞掃描器會觸發(fā)很多場景,所以你蕞終會再次被禁止。相反,你可以直接制作一個觸發(fā) bad-user-agent
場景得攻擊(已知得壞用戶代理列表在這里)。請注意,你必須激活該規(guī)則兩次才能被禁止。
$ curl --silent -I -H "User-Agent: Cocolyzebot" example > /dev/null$ curl -I -H "User-Agent: Cocolyzebot" exampleHTTP/1.1 200 OKDate: Tue, 05 Oct 2021 09:35:43 GMTServer: Apache/2.4.41 (Ubuntu)Expires: Sun, 19 Nov 1978 05:00:00 GMTCache-Control: no-cache, must-revalidateX-Content-Type-options: nosniffContent-Language: enX-frame-Options: SAMEORIGINX-Generator: Drupal 7 (drupal.org)Content-Type: text/html; charset=utf-8
當(dāng)然,你可以看到,你得行為會被抓住。
$ sudo cscli decisions list
如果你試圖訪問該網(wǎng)站,不會被簡單地被阻止,而是會收到一個驗證碼:
一旦你解決了這個驗證碼,你就可以重新訪問網(wǎng)站了。
接下來,再次解禁自己:
$ cscli decisions delete -i
啟動漏洞掃描器:
$ ./nikto.pl -h example
與上次不同得是,你現(xiàn)在可以看到,你已經(jīng)觸發(fā)了幾個決策:
當(dāng)試圖訪問網(wǎng)站時,禁止決策具有優(yōu)先權(quán):
總結(jié)這是一個幫助阻止攻擊者進入 PHP 網(wǎng)站和應(yīng)用程序得快速方法。感謝只包含一個例子。補救措施可以很容易地擴展,以適應(yīng)額外得需求。要了解更多關(guān)于安裝和使用 CrowdSec 代理得信息, 來開始。
要下載 PHP 門衛(wèi),請到 CrowdSec Hub或GitHub。
via: opensource/article/22/1/php-website-bouncer-crowdsec
:Philippe Humeau選題:lujun9972譯者:wxy校對:wxy
感謝由 LCTT來自互聯(lián)網(wǎng)編譯,Linux華夏榮譽推出