自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用 CrowdSec 保護你的 PHP 網(wǎng)站不受機器人攻擊

安全 黑客攻防
我在 CrowdSec 的團隊決定,我們需要為服務器管理員提供一個 PHP 門衛(wèi),以幫助抵御那些可能試圖與 PHP 文件互動的機器人和不良分子。

CrowdSec 門衛(wèi)被設計成可以包含在任何 PHP 應用程序中,以幫助阻止攻擊者。

PHP 是 Web 上廣泛使用的一種編程語言,據(jù)估計有近 80% 的網(wǎng)站使用它。我在 CrowdSec 的團隊決定,我們需要為服務器管理員提供一個 PHP 門衛(wèi),以幫助抵御那些可能試圖與 PHP 文件互動的機器人和不良分子。

CrowdSec 門衛(wèi)可以在應用棧的各個層面上進行設置:Web 服務器、防火墻、CDN 等等。本文關注的是另外一個層次:直接在應用層面設置補救措施。

由于各種原因,直接在應用程序中進行補救是有幫助的:

它為潛在的安全威脅提供了業(yè)務邏輯上的答案。

它提供了關于如何應對安全問題的自由。

雖然 CrowdSec 已經(jīng)發(fā)布了一個 WordPress 門衛(wèi),但這個 PHP 庫被設計成可以包含在任何 PHP 應用中(例如 Drupal)。該門衛(wèi)有助于阻止攻擊者,用驗證碼挑戰(zhàn)他們,讓人類通過,同時阻止機器人。

先決條件

本教程假定你在 Linux 服務器上運行 Drupal,并使用 Apache 作為 Web 服務器。

第一步是在你的服務器上 安裝 CrowdSec。你可以用 官方安裝腳本 來完成。如果你使用的是 Fedora、CentOS 或類似系統(tǒ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

這些腳本很簡單,所以仔細閱讀你下載的腳本,以驗證它是否導入了 GPG 密鑰并配置了一個新的存儲庫。當你清楚了它的作用后,就執(zhí)行它,然后安裝。

$ sudo dnf install crowdsec || sudo apt install crowdsec

CrowdSec 會自己檢測到所有現(xiàn)有的服務,所以不需要進一步的配置就可以立即得到一個能發(fā)揮功能的設置。

測試初始設置

現(xiàn)在你已經(jīng)安裝了 CrowdSec,啟動一個 Web 應用漏洞掃描器,比如 Nikto,看看它的表現(xiàn)如何:

$ ./nikto.pl -h http://<ip_or_domain>

$ ./nikto.pl -h http://<ip_or_domain>

nikto scan

該 IP 地址已被檢測到觸發(fā)了各種場景,最后一個是 crowdsecurity/http-crawl-non_statics:

detected scan

然而,CrowdSec 只檢測問題,需要一個門衛(wèi)來應用補救措施。這就是 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)用,并檢查是否應該禁止進入的 IP,向他們發(fā)送驗證碼,或者允許他們通過。

Web 服務器是 Apache,所以你可以使用 Apache 的安裝腳本:

    $ git clone https://github.com/crowdsecurity/cs-php-bouncer.git
$ cd cs-php-bouncer/
$ ./install.sh --apache

apache install script

門衛(wèi)的配置是用來保護整個網(wǎng)站??梢酝ㄟ^調(diào)整 Apache 的配置保護網(wǎng)站的一個特定部分。

嘗試訪問網(wǎng)站

PHP 門衛(wèi)已經(jīng)安裝并配置好。由于之前的網(wǎng)絡漏洞掃描行動,你被禁止了,你可以嘗試訪問該網(wǎng)站看看:

site access attempt

門衛(wèi)成功阻止了你的流量。如果你在以前的 Web 漏洞掃描后沒有被禁止,你可以用增加一個手動決策:

$ cscli decisions add -i <your_ip>


對于其余的測試,刪除當前的決策:

$ cscli decisions delete -i <your_ip>

更進一步

我封鎖了試圖破壞 PHP 網(wǎng)站的 IP。這很好,但那些試圖掃描、爬取或 DDoS 的 IP 怎么辦?這些類型的檢測可能會導致誤報,那么為什么不返回一個驗證碼挑戰(zhàn)來檢查它是否是一個真正的用戶(而不是一個機器人),而不是封鎖 IP?

檢測爬蟲和掃描器

我不喜歡爬蟲和壞的用戶代理,在 Hub 上有各種方案可以用來發(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

如果沒有找到,請安裝它,并重新加載 CrowdSec:

    $ sudo cscli collections install crowdsecurity/base-http-scenarios
$ sudo systemctl reload crowdsec

用驗證碼補救

由于檢測 DDoS、爬蟲或惡意的用戶代理可能會導致誤報,我更傾向于對任何觸發(fā)這些情況的 IP 地址返回一個驗證碼,以避免阻止真正的用戶。

為了實現(xiàn)這一點,請修改 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

有了這個配置文件,任何觸發(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" 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

當然,你可以看到,你的行為會被抓住。

$ sudo cscli decisions list

detected scan

如果你試圖訪問該網(wǎng)站,不會被簡單地被阻止,而是會收到一個驗證碼:

CAPTCHA prompt

一旦你解決了這個驗證碼,你就可以重新訪問網(wǎng)站了。

接下來,再次解禁自己:

$ cscli decisions delete -i

啟動漏洞掃描器:

$ ./nikto.pl -h http://example.com

與上次不同的是,你現(xiàn)在可以看到,你已經(jīng)觸發(fā)了幾個決策:

scan detected

當試圖訪問網(wǎng)站時,禁止決策具有優(yōu)先權:

site access attempt

總結

這是一個幫助阻止攻擊者進入 PHP 網(wǎng)站和應用程序的快速方法。本文只包含一個例子。補救措施可以很容易地擴展,以適應額外的需求。要了解更多關于安裝和使用 CrowdSec 代理的信息,查看這個方法指南 來開始。

要下載 PHP 門衛(wèi),請到 ??CrowdSec ???Hub 或 GitHub。

責任編輯:未麗燕 來源: Linux中國
相關推薦

2021-08-13 16:15:51

僵尸機器人攻擊bot攻擊網(wǎng)絡攻擊

2023-05-19 14:34:03

2022-06-19 23:30:16

iOS蘋果功能

2022-08-01 11:36:57

黑客

2021-07-31 21:08:53

工業(yè)機器人機器人編程語言

2020-10-15 15:42:00

人工智能

2021-09-03 16:12:52

機器人人工智能編程

2022-05-13 16:07:01

機器人養(yǎng)老人工智能

2015-12-10 21:49:32

IM機器人

2013-11-07 09:31:22

2022-12-12 09:42:10

2024-04-12 12:05:03

2021-07-22 10:17:55

加密機器人加密貨幣機器人

2023-05-23 09:56:14

機器人谷歌

2021-08-19 15:44:20

機器人人工智能機器學習

2015-07-28 09:36:11

機器人

2017-11-16 10:25:25

2024-07-09 14:15:48

AIAgent機器人

2021-01-20 12:48:26

機器人技術崗位

2023-11-24 11:20:20

點贊
收藏

51CTO技術棧公眾號