關於 PHP, Linux, Open Source 及個人生活記載的網誌。
RSS icon
  • Apache 防止 DDoS 攻擊

    Posted on March 4th, 2009 Sam Tang No comments

    DDoS (distributed denial-of-service) 及 DoS (denial-of-service) 在網路上十分常見,而 DoS 攻擊所傳送的請求跟正常的請求一樣,分別在於每秒鐘發出大量請求到伺服器,使伺服器的負載增加,最常見的情況是伺服器暫停服務。

    而 mod_evasive 則是一個預防 Apache 遭受 DDos 攻擊的模組,可以防止同一個 IP 對相同 URI 發出的大量請求,可設定的選項有:

    – 限制同一個 IP 在一定秒數內請求一個頁面或檔案的次數。
    – 限制同一個 IP 一秒內只可發出 50 個請求。
    – 設定被禁止的 IP 封鎖時間。

    以下是 mod_evasive 的安裝方法:

    1. 先將原來的 httpd.conf 備份起來。

    2. 到 http://www.zdziarski.com/projects/mod_evasive/ 下載 mod_evasive。

    3. 在指令模式解壓及編譯 mod_evasive:

    tar zxvf mod_evasive_1.10.1.tar.gz
    cd mod_evasive/
    apxs -cia mod_evasive20.c

    以上的 apxs 會放在 Apache 的 bin 目錄內;如果 Apache 版本是 1.3 的話,指令要改為:

    apxs -cia mod_evasive.c

    安裝好 mod_evasive 後,便要修改 httpd.conf 內容。

    4. 開啟 httpd.conf,加入以內容:

    DOSHashTableSize 3097
    DOSPageCount 5
    DOSSiteCount 100
    DOSPageInterval 2
    DOSSiteInterval 2
    DOSBlockingPeriod 10
    DOSBlockingPeriod 600

    DOSHashTableSize — 這是佔用記憶體的大小,如果伺服器比較繁忙,這個數值要設定大一點。
    DOSPageCount — 同一 IP 在一個時段內可以存取同一頁面的次數,超過會被禁止。
    DOSSiteCount — 同一 IP 在一個網站內可以佔用多少 Object,超過會禁止。
    DOSPageInterval — DOSPageCount 內的時段設定。
    DOSSiteInterval — DOSSiteCount 的時間設定,以秒為單位。
    DOSBlockingPeriod — 當發現疑似攻擊後,使用者會收到 403 Forbidden,這是設定封鎖的時間,以秒為單位。

    5. 最後重新啟動 Apache 即可。


    Leave a reply

    *
    To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
    Click to hear an audio file of the anti-spam word