next up previous contents
Next: 實機操作測驗練習題 Up: Apache 2.4 HTTP Server Previous: 存取限制   Contents

AB test 及防止 DoS

  1. 在 Apache 套件工具有個叫 ab(ApacheBench) 的程式,專門用在做壓力測試。安裝 httpd 時應該也一併安裝起來了,如果沒有就安裝套件 httpd-tools。
    [root@kvm5 ~]# yum install httpd-tools
    
  2. 在本機 kvm5.cyut.edu.tw 本機直接進行壓力測試,同時 1000 個連線做 20 次,測試結果前 50% 完成連線需要 5ms, 100% 完成連線需要 12ms。
    [root@kvm5 ~]# ab -n 1000 -c 20 http://kvm5.deyu.wang/index.html
    This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
    Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Licensed to The Apache Software Foundation, http://www.apache.org/
    
    Benchmarking kvm5.deyu.wang (be patient)
    Completed 100 requests
    Completed 200 requests
    Completed 300 requests
    Completed 400 requests
    Completed 500 requests
    Completed 600 requests
    Completed 700 requests
    Completed 800 requests
    Completed 900 requests
    Completed 1000 requests
    Finished 1000 requests
    
    
    Server Software:        Apache/2.4.6
    Server Hostname:        kvm5.deyu.wang
    Server Port:            80
    
    Document Path:          /index.html
    Document Length:        7 bytes
    
    Concurrency Level:      20
    Time taken for tests:   0.238 seconds
    Complete requests:      1000
    Failed requests:        0
    Write errors:           0
    Total transferred:      265000 bytes
    HTML transferred:       7000 bytes
    Requests per second:    4208.83 [#/sec] (mean)
    Time per request:       4.752 [ms] (mean)
    Time per request:       0.238 [ms] (mean, across all concurrent requests)
    Transfer rate:          1089.20 [Kbytes/sec] received
    
    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:        0    0   0.2      0       2
    Processing:     3    4   0.9      4      11
    Waiting:        3    4   0.9      4      11
    Total:          3    5   1.0      5      12
    
    Percentage of the requests served within a certain time (ms)
      50%      5
      66%      5
      75%      5
      80%      5
      90%      5
      95%      6
      98%      8
      99%     11
     100%     12 (longest request)
    
  3. DDoS (distributed denial-of-service) 及 DoS (denial-of-service) 在網路上十分常見,而 DoS 攻擊所傳送的請求跟正常的請求一樣,分別在於每秒鐘發出大量請求到伺服器,使伺服器的負載增加,最常見的情況是伺服器暫停服務。
  4. mod_evasive 是一個預防 Apache 遭受 DDos 攻擊的模組,可以防止同一個 IP 對相同 URI 發出的大量請求,此模組 CentOS 7 預設並沒有,若使用 DYW Linux REPO 資料庫,可以直接以 yum 指令安裝。
    [root@kvm5 ~]# yum install mod_evasive
    
  5. 先使用 mod_evasive 模組預設的設定。
    [root@kvm5 ~]# vim /etc/httpd/conf.d/mod_evasive.conf 
    [root@kvm5 ~]# grep DOS /etc/httpd/conf.d/mod_evasive.conf 
        DOSHashTableSize    3097
        DOSPageCount        2
        DOSSiteCount        50
        DOSPageInterval     1
        DOSSiteInterval     1
        DOSBlockingPeriod   10
        #DOSEmailNotify      you@yourdomain.com
        #DOSSystemCommand    "su - someuser -c '/sbin/... %s ...'"
        #DOSLogDir           "/var/lock/mod_evasive"
        # Multiple DOSWhitelist commands may be used in the configuration.
        #DOSWhitelist   127.0.0.1
        #DOSWhitelist   192.168.0.*
    
  6. 設定選項說明:
    1. DOSHashTableSize:佔用記憶體的大小,如果伺服器比較繁忙,這個數值要設定大一點。
    2. DOSPageCount:同一 IP 在一個時段內可以存取同一頁面的次數,超過會被禁止。
    3. DOSSiteCount:同一 IP 在一個網站內可以佔用多少個請求,超過會禁止。
    4. DOSPageInterval:DOSPageCount 內的時段設定。
    5. DOSSiteInterval: DOSSiteCount 的時間設定,以秒為單位。
    6. DOSBlockingPeriod: 當發現疑似攻擊後,使用者會收到 403 Forbidden,這是設定封鎖的時間,以秒為單位。
    7. DOSWhitelist:白名單,不做限制。
  7. 重新啟動 httpd
    [root@kvm5 ~]# systemctl reload httpd.service
    
  8. 由於架設的網站過於簡單,且於內部網路內測試,在設定的每秒間隔內,同一 IP 的請求及存取頁面次數,都不會超過限制值。若要查看實際測試狀況可以參考 Linux 安全與資安工具



2015-12-04