如何在 Ubuntu 下使用 mod_evasive 防止 Apache HTTP的DDoS

DDoS是一種阻斷式攻擊,可以在短時間內透過大量的連線來妨礙其他人無法取得伺服器的服務,對於一個伺服器來說,這是一場夢靨。幸好,Apache2有一個 mod_evasive 套件可以幫你阻絕 DDoS,並且擁有大量的數值可以讓你微調。

首先我們可以透過 apt-get install 來安裝此套件。

# apt-get install libapache2-mod-evasive

安裝完之後在 /etc/apache2/mods-enabled 目錄下多出兩個檔案,evasive.confevasive.load檔案,尤其evasive.conf是可以微調這些選項的組態檔案,內容為:

選項 解釋
DOSHashTableSize 處理雜湊表的大小,越大所需記憶體越大,需根據網站流量狀況來設定,建議流量越大,此數值就需要越大。
DOSPageCount 在DOSPageInterval所設定的時間內,同一個來源 IP 位址 存取同一個頁面的最大存取次數。
DOSSiteCount 在DOSSiteInterval所設定的時間內,同一個來源 IP 位址可同時發出 HTTP 存取的最大次數。
DOSPageInterval 設定 DOSPageCount 的時間區段,以秒為單位。
DOSSiteInterval 設定 DOSSiteCount 的時間區段,以秒為單位。
DOSBlockingPeriod 當某一IP 位址違反上述的DOSPageCount/DOSPageInterval或DOSSiteCount/DOSSiteInterval,將被block的秒數。
DOSmailNotify 管理者的 Email 位址,當有某個IP位址被阻斷時,會寄發警告信至此信箱中。
DOSSystemCommand 當發現有疑似攻擊,立即自動執行的指令。
DOSLogdir mod_evasive 的記錄檔位置,如果沒設定此值,預設存放記錄 的目錄為 /tmp。當有疑似攻擊時,會在該目錄下新增一個 dos_[ip] 的檔案。

然後把 /etc/apache2/mods-enabled/evasive.conf檔案的#去除掉之後填上自己所需要的數值,然後重新啟動 apache2 服務即可。

# service apache2 restart

但是要注意,如果你自己也安裝 ownCloud 私有雲的話,很有可能系統 ownCloud 會在短時間內上傳或是下載小的檔案,這就有可能會被 mods-evasive誤認為是一種DDoS行為而拒絕服務,所以裡面的數值自己要拿捏好,不然可能自己的 ownCloud 這一類程式會運作不正常。

改進 ownCloud 的效能

ownCloud 背景也有一些事情要做,例如隔幾天要把垃圾桶給清乾淨,一些例行事情如果沒有週期性的執行,那麼 ownCloud 就只能等每個指令來的時候偷偷檢查一下,這倒是增加了ownCloud 和系統的負擔,所以我們要把這些例行性事情改用 crontab 來做,而非預設的 AJAX 來做!

首先在命令列下一道指令。

# crontab -u www-data -e

然後就可以編輯 crontab ,在這個檔案後面加上

*/15 * * * * php -f /var/www/owncloud/cron.php

讓 ownCloud 的cron.php 每隔十五分鐘執行一次,也可以是三十分鐘執行一下。存檔後再到 ownCloud 管理網頁下查看一下是否已經更改為 cron 了呢?

1

如何在CubieTruck上的Ubuntu 14.04安裝 ownCloud 7

ownCloud是一種私有雲,配合Android APP ownCloud就可以讓享受到沒有限制的雲服務(APP要一美金)。在桌機上,也有免費的程式讓你把你自己私有雲空間下載到你的電腦上,當然也有網頁版的。所以相對於 Dropbox唯一的差別就是如果你家的頻寬大一點,那麼你的雲服務的空間基本上就沒有限制了。

在安裝 ownCloud 之前,建議你先把 Apache HTTP服務給先裝好(如果您不會架設,請參考這篇文章),再來這是在Ubuntu 14.04搭配 ownCloud 7版的才可以,不然你可以自己下載安裝包,解壓縮後直接丟到 /var/www 網頁入口目錄下也可以的。

首先先把 ownCloud 的 Key 下載回來,以方便之後可以用 apt-get 管理

# cd ~
# wget http://download.opensuse.org/repositories/isv:ownCloud:community/xUbuntu_14.04/Release.key
# apt-key add - < Release.key

然後把 ownCloud 下載位址加入 apt 的源地址。

#sh -c "echo 'deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/xUbuntu_14.04/ /' >> /etc/apt/sources.list.d/owncloud.list"

然後就可以用 apt-get 來安裝了

# apt-get update
# apt-get install owncloud

大約五分鐘之後就可以安裝完畢,之後我們要開始建立 ownCloud 的資料庫了,所以用 root 身分進入 mysql 來管理

# mysql -u root -p

這時候需要輸入你的root密碼,然後在 mysql 控制台輸入

CREATE DATABASE owncloud; ->建立資料庫
GRANT ALL ON owncloud.* to 'username'@'localhost' IDENTIFIED BY 'password'; ->帳號密碼權限
exit

你必須牢牢記住這個帳號密碼,之後我們就要用瀏覽器再進行資料庫設定需要這組帳號密碼,例如:https://www.example.org/owncloud(owncloud是必須要的),一開始登入的畫面是這樣的

1

點擊 Storage & database

2

這個過程大約會花個幾分鐘建立一些基本的資料庫,然後輸入剛剛建立的帳號密碼登入

5

然後按下 Finish Setup就大功告成了,成功後會跳轉到它的廣告畫面,然後就完成了!

6

7

優化 MySql 性能

自從裝上 owncloud 之後,就拼命往自己的雲端丟東西,反正硬碟也夠大,不像之前用 Dropbox 那般綁手綁腳了。但是我發現一個問題就是,如果同步大檔案時,速度沒有問題,端看你PC端的上傳速度和CubieTruck的下載速度。我在自己地方都可以達到 500-600KB以上,也許這就是頻寬的上限了。

凡事都有例外,我發現如果同步一些小的零碎檔案,速度很慢,觀察結果是大約每兩三秒才同步一個檔案(檔案大小只有20KB),這就有點不合理了。

所以我就用 top 去觀察,當然 apache 這個行程是榜上有名的(預期中),但 mysqld 這隻程式也常常出現,這就讓我想到是不是 ownload 在 query 和 update databases 時因為太多資料,所以拖慢了 ownload 同步小檔案的速度。所以我這裡優化了一下 mysql

修改 /etc/mysql/my.cnf的定義

max_connections = 50

原本是被 mark # 起來的 wait_timeout = 60 ; 沒有這行,必須新增然後重啟一下 mysql

service mysql restart

發現,速度一樣龜速,只好再安裝 mysqltuner

apt-get install mysqltuner

安裝完,檔案在 /usr/bin/mysqltuner 裡面,現在不比以前,必須用 perl 來執行,現在直接執行

mysqltuner

輸入帳號密碼,這樣就完成囉,記得還是要重啟 mysql

service mysql restart

發現 ownload 同步零碎小檔案速度快多了。