歡迎光臨
每天分享高質量文章

用 Apache 伺服器模組保護您的網站免受應用層 DOS 攻擊 | Linux 中國

透過配置普通的網頁伺服器,可以保護網頁免受應用層攻擊,至少是適度的防護。防止這種形式的攻擊是非常重要的,因為 Cloudflare 最近 報告稱 網路層攻擊的數量正在減少,而應用層攻擊的數量則在增加。
— Elliot Cooper


本文導航
編譯自 | https://bash-prompt.net/guides/mod_proxy/ 
 作者 | Elliot Cooper
 譯者 | jessie-pang

有多種可以導致網站下線的攻擊方法,比較複雜的方法要涉及資料庫和程式設計方面的技術知識。一個更簡單的方法被稱為“拒絕服務Denial Of Service”(DOS)攻擊。這個攻擊方法的名字來源於它的意圖:使普通客戶或網站訪問者的正常服務請求被拒絕。

一般來說,有兩種形式的 DOS 攻擊:

☉ OSI 模型的三、四層,即網路層攻擊
☉ OSI 模型的七層,即應用層攻擊

第一種型別的 DOS 攻擊——網路層,發生於當大量的垃圾流量流向網頁伺服器時。當垃圾流量超過網路的處理能力時,網站就會宕機。

第二種型別的 DOS 攻擊是在應用層,是利用合法的服務請求,而不是垃圾流量。當頁面請求數量超過網頁伺服器能承受的容量時,即使是合法訪問者也將無法使用該網站。

本文將著眼於緩解應用層攻擊,因為減輕網路層攻擊需要大量的可用頻寬和上游提供商的合作,這通常不是透過配置網路伺服器就可以做到的。

透過配置普通的網頁伺服器,可以保護網頁免受應用層攻擊,至少是適度的防護。防止這種形式的攻擊是非常重要的,因為 Cloudflare[1] 最近 報告稱[2] 網路層攻擊的數量正在減少,而應用層攻擊的數量則在增加。

本文將介紹如何使用 zdziarski[3] 開發的 Apache2 的模組 mod_evasive[4]

另外,mod_evasive 會阻止攻擊者透過嘗試數百個使用者名稱和密碼的組合來進行猜測(即暴力攻擊)的企圖。

mod_evasive 會記錄來自每個 IP 地址的請求的數量。當這個數字超過相應 IP 地址的幾個閾值之一時,會出現一個錯誤頁面。錯誤頁面所需的資源要比一個能夠響應合法訪問的線上網站少得多。

在 Ubuntu 16.04 上安裝 mod_evasive

Ubuntu 16.04 預設的軟體庫中包含了 mod_evasive,名稱為 “libapache2-mod-evasive”。您可以使用 apt-get 來完成安裝:

  1. apt-get update

  2. apt-get upgrade

  3. apt-get install libapache2-mod-evasive

現在我們需要配置 mod_evasive。

它的配置檔案位於 /etc/apache2/mods-available/evasive.conf。預設情況下,所有模組的設定在安裝後都會被註釋掉。因此,在修改配置檔案之前,模組不會幹擾到網站流量。

  1. mod_evasive20.c>

  2.   #DOSHashTableSize    3097

  3.   #DOSPageCount        2

  4.   #DOSSiteCount        50

  5.   #DOSPageInterval     1

  6.   #DOSSiteInterval     1

  7.   #DOSBlockingPeriod   10

  8.   #DOSEmailNotify      you@yourdomain.com

  9.   #DOSSystemCommand    "su - someuser -c '/sbin/... %s ...'"

  10.   #DOSLogDir           "/var/log/mod_evasive"

第一部分的引數的含義如下:

◈ DOSHashTableSize - 正在訪問網站的 IP 地址串列及其請求數的當前串列。
◈ DOSPageCount - 在一定的時間間隔內,每個頁面的請求次數。時間間隔由 DOSPageInterval 定義。
◈ DOSPageInterval - mod_evasive 統計頁面請求次數的時間間隔。
◈ DOSSiteCount - 與 DOSPageCount 相同,但統計的是來自相同 IP 地址對網站內任何頁面的請求數量。
◈ DOSSiteInterval - mod_evasive 統計網站請求次數的時間間隔。
◈ DOSBlockingPeriod - 某個 IP 地址被加入黑名單的時長(以秒為單位)。

如果使用上面顯示的預設配置,則在如下情況下,一個 IP 地址會被加入黑名單:

◈ 每秒請求同一頁面超過兩次。
◈ 每秒請求 50 個以上不同頁面。

如果某個 IP 地址超過了這些閾值,則被加入黑名單 10 秒鐘。

這看起來可能不算久,但是,mod_evasive 將一直監視頁面請求,包括在黑名單中的 IP 地址,並重置其加入黑名單的起始時間。只要一個 IP 地址一直嘗試使用 DOS 攻擊該網站,它將始終在黑名單中。

其餘的引數是:

◈ DOSEmailNotify - 用於接收 DOS 攻擊資訊和 IP 地址黑名單的電子郵件地址。
◈ DOSSystemCommand - 檢測到 DOS 攻擊時執行的命令。
◈ DOSLogDir - 用於存放 mod_evasive 的臨時檔案的目錄。

配置 mod_evasive

預設的配置是一個很好的開始,因為它不會阻塞任何合法的使用者。取消配置檔案中的所有引數(DOSSystemCommand 除外)的註釋,如下所示:

  1. mod_evasive20.c>

  2.   DOSHashTableSize   3097

  3.   DOSPageCount       2

  4.   DOSSiteCount       50

  5.   DOSPageInterval    1

  6.   DOSSiteInterval    1

  7.   DOSBlockingPeriod  10

  8.   DOSEmailNotify       JohnW@example.com

  9.   #DOSSystemCommand    "su - someuser -c '/sbin/... %s ...'"

  10.   DOSLogDir            "/var/log/mod_evasive"

必須要建立日誌目錄並且要賦予其與 apache 行程相同的所有者。這裡建立的目錄是 /var/log/mod_evasive ,並且在 Ubuntu 上將該目錄的所有者和組設定為 www-data ,與 Apache 伺服器相同:

  1. mkdir /var/log/mod_evasive

  2. chown www-data:www-data /var/log/mod_evasive

在編輯了 Apache 的配置之後,特別是在正在執行的網站上,在重新啟動或重新載入之前,最好檢查一下語法,因為語法錯誤將影響 Apache 的啟動從而使網站宕機。

Apache 包含一個輔助命令,是一個配置語法檢查器。只需執行以下命令來檢查您的語法:

  1. apachectl configtest

如果您的配置是正確的,會得到如下結果:

  1. Syntax OK

但是,如果出現問題,您會被告知在哪部分發生了什麼錯誤,例如:

  1. AH00526: Syntax error on line 6 of /etc/apache2/mods-enabled/evasive.conf:

  2. DOSSiteInterval takes one argument, Set site interval

  3. Action 'configtest' failed.

  4. The Apache error log may have more information.

如果您的配置透過了 configtest 的測試,那麼這個模組可以安全地被啟用並且 Apache 可以重新載入:

  1. a2enmod evasive

  2. systemctl reload apache2.service

mod_evasive 現在已配置好並正在運行了。

測試

為了測試 mod_evasive,我們只需要向伺服器提出足夠的網頁訪問請求,以使其超出閾值,並記錄來自 Apache 的響應程式碼。

一個正常併成功的頁面請求將收到如下響應:

  1. HTTP/1.1 200 OK

但是,被 mod_evasive 拒絕的將傳回以下內容:

  1. HTTP/1.1 403 Forbidden

以下指令碼會盡可能迅速地向本地主機(127.0.0.1,localhost)的 80 埠傳送 HTTP 請求,並打印出每個請求的響應程式碼。

你所要做的就是把下麵的 bash 指令碼複製到一個檔案中,例如 mod_evasive_test.sh

  1. #!/bin/bash

  2. set -e

  3. for i in {1..50}; do

  4.        curl -s -I 127.0.0.1 | head -n 1

  5. done

這個指令碼的部分含義如下:

◈ curl - 這是一個發出網路請求的命令。

◈ -s - 隱藏進度表。
◈ -I - 僅顯示響應頭部資訊。
◈ head - 列印檔案的第一部分。

◈ -n 1 - 只顯示第一行。

然後賦予其執行許可權:

  1. chmod 755 mod_evasive_test.sh

在啟用 mod_evasive 之前,指令碼執行時,將會看到 50 行 “HTTP / 1.1 200 OK” 的傳回值。

但是,啟用 mod_evasive 後,您將看到以下內容:

  1. HTTP/1.1 200 OK

  2. HTTP/1.1 200 OK

  3. HTTP/1.1 403 Forbidden

  4. HTTP/1.1 403 Forbidden

  5. HTTP/1.1 403 Forbidden

  6. HTTP/1.1 403 Forbidden

  7. HTTP/1.1 403 Forbidden

  8. ...

前兩個請求被允許,但是在同一秒內第三個請求發出時,mod_evasive 拒絕了任何進一步的請求。您還將收到一封電子郵件(郵件地址在選項 DOSEmailNotify 中設定),通知您有 DOS 攻擊被檢測到。

mod_evasive 現在已經在保護您的網站啦!


via: https://bash-prompt.net/guides/mod_proxy/

作者:Elliot Cooper[6] 譯者:jessie-pang 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

LCTT 譯者

jessie-pang ? ?
共計翻譯:6 篇
貢獻時間:18 天


推薦文章

< 左右滑動檢視相關文章 >

點選圖片、輸入文章 ID 或識別二維碼直達

贊(0)

分享創造快樂

© 2024 知識星球   網站地圖