在小弟的一個小型虛擬主機中,早前發現到有人擺放大量音樂的檔案,令伺服器流量大量增加(100Mb/s)。
小弟發其後在Apache Access Log (突然增大)中找到其帳號並刪降。
但是在過後幾天又再有流量暴增的情況,但這次就去到 Apache Error Log(突然增大)
查看Log入面都發覺是由(Referral)原有被刪的網站來的
節錄:
[Thu Jun 02 09:48:47 2011] [error] [client 66.249.68.49] File does not exist: /var/www/html/404.shtml
[Thu Jun 02 09:49:02 2011] [error] [client 110.255.52.51] File does not exist: /var/www/html/filestores
[Thu Jun 02 09:49:02 2011] [error] [client 110.255.52.51] File does not exist: /var/www/html/404.shtml
[Thu Jun 02 09:49:03 2011] [error] [client 110.255.52.51] File does not exist: /var/www/html/filestores
[Thu Jun 02 09:49:03 2011] [error] [client 110.255.52.51] File does not exist: /var/www/html/404.shtml
[Thu Jun 02 09:49:04 2011] [error] [client 110.255.52.51] File does not exist: /var/www/html/filestores
[Thu Jun 02 09:49:04 2011] [error] [client 110.255.52.51] File does not exist: /var/www/html/404.shtml
[Thu Jun 02 09:49:05 2011] [error] [client 66.249.68.49] File does not exist: /var/www/html/mmQVOD
[Thu Jun 02 09:47:24 2011] [error] [client 183.23.122.73] File does not exist: /var/www/html/filestores, referer: http://網址/
這算是DDos攻擊?小弟要逐個IP封鎖?
請各位大大賜教
封鎖IP可能沒那麼必要,
但是apache可以做其他的選擇處理。
一、直接deny某referer的請求:
參閱: Deny visitors by referrer
<pre class="c" name="code">RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} otherdomain\.com [NC]
RewriteRule .* - [F]
這樣就直接會在 任何client 進行query時,
在還未讀檔案系統有無此query檔案前,
在http的環境變數就判斷referer,
是否符何此規則,
就予以直接deny掉,
理論上是可能減少讀取檔案系統的資源吧。
二、不log某refferer的請求:
當然是在上述的設定成功後,
不想再看到這些log,
可參考: How To Tell Apache To Not Log Certain Requests In Its Access Log
簡言之在上述之前設定
<pre class="c" name="code">SetEnvIfNoCase Referer "othermydomain\.com" dontlog
並且把 CustomLog 改成類似像:
<pre class="c" name="code">CustomLog /var/log/apache2/access.log combined env=!dontlog
這樣就不會看到這盜連的log,
也減少web server的IO吧。
三、用 fail2ban 擋:
我不用 fail2ban,
但理論上可用此工具,
根據 error log 裡的 pattern 、特徵,
自動在防火牆上擋這些IP。
若用這個,不設前面的一、二兩項,
要讓error log 裡出現 referer 的項目,
然後參考此文:
http://www.fail2ban.org/wiki/index.php/Apache
在 fail2ban 設定 擋掉 有referer某特定網址 的規則。
這是理論上可這麼做,
但我未實作過。
四、安裝 ModSecurity:
也可參考此文的設定:
Block referer spam easily
就可在web server的最前面一道防線就做過濾的工作。
小結
誠如antijava所言,
其實不用去理會,
但若覺得不去處理,
總覺有什麼不對勁的話,
可用上述的可行步驟,
選擇進行。
或者試驗看看,
也可增進了解apache的功能。
非常感謝大大的指教
小弟這幾天試過用iptables加tc流量控制希望解決問題
如今有了以上的資料,馬上去試試看
小弟還有一個小問題:如果我看到一個apache在Linux的進程是經常在99.x%,可以有什麼方法查找到它是由那個VirtualHost/用戶(小弟用DirectAdmin)發起?理論上所有Web Request小弟在top都只看到apahce,但好像DA把每位用戶都開了一個用戶小弟的概念還不是很清晰
orange05提到:
如果我看到一個apache在Linux的進程是經常在99.x%,可以有什麼方法查找到它是由那個VirtualHost/用戶(小弟用DirectAdmin)發起?
試試看 apache-top 有無幫助?
這是偵測 apache 裡原有的 /server-status 的套件。
如果是下面有一堆 虛擬主機 的話,如果各log是分開的,應容易看出來流量吧?
或者根據log裡query的 hostname 來各別分析。
也許不是流量的問題,就好像是太陽大之前的某隻php程式迴圈,造成整個系統的資源耗盡。如果有提供php之類的功能給虛擬主機的話。