分析Apache log,5秒內抓出惡意網路爬蟲的方法

00 分析Apache log,5秒內抓出惡意網路爬蟲的方法 cover 1024x512
  • Post category:WordPress
  • Reading time:16 mins read

不論是用 XAMPP 安裝在 Windows 個人電腦上,或使用 VPS 主機 / 共享主機來架設網站,難免都要考慮網站資安的問題。而 Apache log 是什麼?簡單說,就是將所有連入網站的紀錄都儲存在 access.log 這個檔案中;同時也會把錯誤紀錄儲存在 error.log。所以, Apache log分析可以讓你在看完數據後,採取適當的保護措施,提高網站安全。

這篇文章中,以 XAMPP 安裝在 Windows 系統上的自架網站為例子,使用兩種免費的方法來分析Apache log(access.log),並將惡意連線 IP 抓出來,然後把這些 IP 輸入到防火牆的封鎖名單中,或著是利用 WordPress 外掛來封鎖 IP 。同時也會分享如何客製化 Apache log ,不會因為檔案容量過大,而拖慢主機速度。在最後,會提供程式碼範例方便大家直接使用或修改。

Apache log位置在哪裡?

在安裝 XAMPP 之後,預設的 access.log 與 error.log 檔案會儲存在:Z:\xampp\apache\logs\。假使沒有看到這兩個 log 檔案的話,就要檢查 Apache log 的功能是否有正常被啟動。檢查 1). httpd.conf 的內容;假使想要客製化 log 格式的話,可以在 2). httpd-ssl.conf 裡面修改。

1)、檔案 httpd.conf
預設路徑: Z:\xampp\apache\conf\
2)、檔案 httpd-ssl.conf
預設路徑: Z:\xampp\apache\conf\extra\

打開 1). httpd.conf 之後,搜尋【LoadModule log_config_module modules/mod_log_config.so】將最前面的【#】刪除,表示啟動的意思。接著再找到【CustomLog “logs/access.log” combined】這一行,把前面的【#】刪除。完整範例如下:

<IfModule log_config_module>
    #
    # The following directives define some format nicknames for use with
    # a CustomLog directive (see below).
    #
    #LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
	LogFormat "%h %l %u %{%Y-%m-%d %H:%M:%S}t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    #LogFormat "%h %l %u %t \"%r\" %>s %b" common
    <IfModule logio_module>
      # You need to enable mod_logio.c to use %I and %O
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    #
    # The location and format of the access logfile (Common Logfile Format).
    # If you do not define any access logfiles within a <VirtualHost>
    # container, they will be logged here.  Contrariwise, if you *do*
    # define per-<VirtualHost> access logfiles, transactions will be
    # logged therein and *not* in this file.
    #
    #CustomLog "logs/access.log" common
    #
    # If you prefer a logfile with access, agent, and referer information
    # (Combined Logfile Format) you can use the following directive.
    #
    CustomLog "logs/access.log" combined
</IfModule>

Apache log格式客製化設定

強烈建議要針對Apache log格式做客製化設定,原因是:

  1. 限制每份 log 的檔案大小,避免檔案太大拖慢主機速度,或開啟 log 時造成程式或電腦當機
  2. 方便程式對 log 做分析,例如:以日為單位,這樣子 log 的檔名會以日期呈現,而程式就可以利用這種規律性進行 Apache log分析

開啟 httpd-ssl.conf ,在【<VirtualHost _default_:443>】區域內找到以下兩行,而這兩行就是預設的 log 儲存路徑與格式,要關閉它們的話,直接在最前面加上【#】:

#ErrorLog “C:/xampp/apache/logs/error.log”
#TransferLog “C:/xampp/apache/logs/access.log”

接著新增兩行客製化 log 的格式,範例如下:

ErrorLog "|bin/rotatelogs.exe -l D:/Apache_logs/error/error_MainSite-%Y-%m-%d.log 86400"
CustomLog "|bin/rotatelogs.exe -l D:/Apache_logs/access/access_MainSite-%Y-%m-%d.log 86400" combined

Apache log格式客製化說明

這樣子 log 紀錄會每 86400 秒(一天)就做檔案分割的動作,並且會儲存到 D:/Apache_logs/error/ 與 D:/Apache_logs/access/ 下的路徑,而檔名會依日期命名(%Y-%m-%d)。假使想要使用指定的檔案大小來分割的話,就把 【86400】換成【100M】,這樣子 log 每次最大紀錄的容量是 100MB,檔名會依日期命名。

找出惡意爬蟲 IP 的方法#1

大約在 2020 年左右,看到這一篇文章(3 Steps To Find And Block Bad Bots),就跟著作者的方法來分析 log。但是一直以來都無法搞懂 Excel 樞紐分析的功能,所以改用 Excel 巨集錄製器來達到相同結果。就這樣子,也使用了一年多。但是缺點是什麼呢?就是:

  1. 屬於半自動化的分析工具
  2. 開啟 log、匯入 Excel、執行巨集…等重複的動作,通常也要 1 – 3 分鐘才能完成一份(也就是一天的紀錄) log 分析
  3. 專注力要高,不然很容易忘記做到哪個階段,導致這一份 log 分析又做了白工
  4. 電腦資源要夠,否則做了幾份 log 分析後,電腦會變得相當慢,需要重新開機

假使不排斥使用巨集的話,可以到 Google雲端硬碟下載我錄製好的 Excel 巨集來使用。
連結:https://drive.google.com/drive/folders/1aj5hHP-0u5VqAmjJ-x3Iy5rlx3OktEtn?usp=sharing

操作流程:
Step 1
:用 Excel 開啟 log,選擇【分隔符號】–>【空格】,然後複製【A欄位】也就是連線【IP】的紀錄
Step 2:將【IP】貼到 Excel 巨集【01_輸入完整IP】分頁中的【A】欄

01 分析Apache log,方法 1 excel 巨集找出惡意連線IP
複製【IP】連線紀錄到Excel 巨集

Step 3:在 Excel 巨集中的【Summary】分頁,按下【開始】,等待的時間取決於你的電腦效能。以我的電腦(AMD Ryzen 3600 + DDR-4 32GB)為例子的話,大約在 60 秒內可以完成。

02 分析Apache log,方法 1 excel 巨集 分析IP連線紀錄 找出惡意IP
分析【IP】連線紀錄

Step 4:在 Excel 巨集中的【04_排序】分頁,就是每一個 IP 連線總次數。
【A】欄: IP
【B】欄: 統計次數

03 分析Apache log,方法 1 excel 巨集 統計IP連線次數
統計 IP 連線次數

Step 5:判斷 IP 是否為惡意爬蟲、具威脅的連線
通常根據你的網站規模,來訂一個門檻值,假使總次數超過這個門檻的話,才需要回到 access.log 當中,查詢該 IP 的連線狀態是否有異常的地方。
例如: IP – 72.14.199.220 ; 出現次數 – 323次
明顯多於其他連線 IP 的次數,所以我們就回到 access.log 來查詢它的連線紀錄是否有異常的地方。

剛開始看到【I】欄中並無連線網址的資料,以為是惡意爬蟲或其他未知的威脅連線,但是多查詢幾筆紀錄後,會發現它應該是 google bot ,所以就不用加入封鎖名單了。

04 分析Apache log,方法 1 excel 巨集 IP連線紀錄
在 access.log 中,檢查 IP 連線紀錄

假使以上圖文描述還是感到困惑的話,不妨觀看我錄製的一段操作影片,也許會讓大家更清楚整個操作流程。假使這篇文章對您有幫助的話,麻煩幫忙【訂閱】我的頻道,也歡迎分享給有需要的朋友,我們會非常感謝您的支持!

找出惡意爬蟲 IP 的方法#2

發法#2 是這篇文章中的重點分享,也是目前找到最節省時間的方法。

Step 1:下載、安裝 Anaconda 3 到電腦上
下載網址:https://www.anaconda.com/products/individual

05 Anaconda 3 installer
安裝 Anaconda 3

Step 2:在電腦左下角,開啟 Anaconda 3 程式

06 open Anaconda 3
開啟 Anaconda 3

Step 3:第一次執行的話,要先安裝 Spyder;之後可以直接按下【Launch】直接開啟程式

07 open Spyder
開啟 Spyder

Step 4:第一次開啟 Spyder 需要先建立新專案(New Project),之後的程式編輯與執行,都會在這個專案中運作

08 new project in spyder
建立新專案

Step 5:建立專案名稱與路徑
– 在下圖【1】的欄位,輸入專案名稱
– 在下圖【2】的欄位,指定專案儲存的路徑。例如:D:\Test\,接著 Spyder 會在這個路徑下,自動產生與專案名稱相同的資料夾,未來程式的執行與檔案的讀取/輸出,都會在這個資料夾下面完成
– 在下圖【3】的欄位,按下【Create】就完成專案的建立流程了

09 project name and path in Spyder
在 Spyder 建立專案名稱與路徑

Step 6:執行程式
– 在下圖【1】先確認程式碼是不是儲存在專案的資料夾當中
– 在下圖【2】分成兩部分來說明,
1). 在左手邊的視窗中,可以看到已經放入 3 份 access-年-月-日.log
2). 在右手邊的編輯視窗中,只需要更改讀取 log 的檔案名稱就可以了。例如將
df = pd.read_csv(‘access-2021-10-02.log‘, sep=” “)
改成
df = pd.read_csv(‘access-2021-10-28.log‘, sep=” “)
– 在下圖【3】的地方按下綠色三角形來執行程式,接著就會在專案資料夾中,產生 Bad_Bot_access-2021-10-30.xlsx

10 Bad bot code in Python
執行程式

Step 7:找出疑似的惡意爬蟲 IP
這個結果跟方法#1一致,不過所花費的時間更少,而且人工重複性的動作也減少許多!!!
– A 欄:原始 access.log 的 IP 資料
– B 欄:整理後不重複的 IP
– C 欄:不重複 IP 統計次數,由數字高的往數字低的方式排序
也就是 B2 的 IP 出現 602 次;B3的 IP 出現 323 次;B4的 IP 出現 135 次
– D 欄:這份 access.log 當中,出現不重複 IP 的個數有 647 次

11 分析Apache log,方法 2 Python Spyder 程式碼找出惡意連線IP
IP 出現次數統計表

假使以上圖文描述還是感到困惑的話,不妨觀看我錄製的一段操作影片,也許會讓大家更清楚整個操作流程。假使這篇文章對您有幫助的話,麻煩幫忙【訂閱】我的頻道,也歡迎分享給有需要的朋友,我們會非常感謝您的支持!

最後,Python 的程式碼放在下面的連結,有需要的朋友可以自行下載來修改與使用。
假如需要引用程式碼或內容的話,麻煩註明本篇網址,我們會非常感謝您的幫忙!
Google雲端硬碟:https://drive.google.com/drive/folders/1fluTGVAiLhMSEZjO8Ziyh_HRTxk4ybP6?usp=sharing
下載有遇到問題的話,可以利用信箱(support@hipay0.com)反映。

常見問題

分析 Apache log 找出惡意連線有什麼缺點嗎?

有。因為這種方式屬於【事後補救】,也就是要等連線紀錄存在後,才能知道惡意爬蟲或惡意連線已經連上網站了。

只使用 WordPress 外掛可以提高網站資安嗎?

想要提高網站資安的話,任何防護措施都不會嫌太多。相對的,太多的防護外掛、軟體、防火牆、CDN….等功能,難免會影響網站連線速度,所以要根據自己的狀況來做取捨。
對於 XAMPP 自架網站的用戶而言,在網站前端安裝入門款的硬體防火牆軟路由防火牆,再搭配 WordPress 安全外掛,得到的防護等級應該不會太差,而且整個建置幾乎零成本。

如何辨別惡意連線 IP 呢?

提供幾個個人心得跟大家分享:
1). 是否連線到【不存在】的檔案或網址
2). 假使是 xyz-bot 的連線紀錄,可以在 Google 查詢大家對於 xyz-bot 的評論如何
3). 極短時間內,存在太多筆連線紀錄
4). 無法從連線紀錄上做出判斷的話,查詢該 IP 屬於哪個國家。假使網站受眾幾乎不會來自那個國家 IP 的話,可考慮直接加入封鎖清單
5). 上社團請教專家

只能使用 python spyder 來執行程式嗎?

不需要。可以自由選擇任何 Python 的編輯器來撰寫與執行程式。之所以使用 Anaconda 懶人包,就是在網路上可以很容易找到相關文章,也發現 spyder 比較容易保存完整程式碼。這幾點原因對於非軟體背景的人而言,非常具有吸引力。剩下的就是花時間自學 Python 函數、剪貼程式碼,外行人也可以實現簡單的程式。

自架網站流程

架站硬體

電腦系統

free desktop pc svgrepo com
click svgrepo com

寬頻網路

globe connection svgrepo com
click svgrepo com

架站工具

軟體懶人包

xampp svgrepo com
click svgrepo com

申請網域

domain www svgrepo com
click svgrepo com

SSL 憑證

certificate ssl svgrepo com
click svgrepo com

商標設計

logo apple ar svgrepo com
click svgrepo com

架站效能

網站設定

setting line svgrepo com 1
click svgrepo com

網站設定

軟體參數微調

快取外掛

shower svgrepo com
click svgrepo com

架站安全

找出惡意爬蟲

crawl svgrepo com
click svgrepo com

網頁標題

quiz title svgrepo com
click svgrepo com

廣告違規

advertisement svgrepo com
click svgrepo com

靠零成本提高網站資安的推薦方法

方法#1方法#2
花費時間60秒 – 180秒3 秒 – 5 秒
成本零成本零成本
困難度普通
電腦等級普通
專注力普通
尋找惡意爬蟲 IP 方法的比較表

假使本身對於 Excel 很熟練的話,其實不見得要使用方法#2(Python)來分析 log,畢竟操作的工具還是要選擇自己熟練的來使用,這樣子遇到問題時,才能夠自己解決。假如對於 Excel 與 Python 都不熟悉的話,建議可以把時間花在 Python ,因為它的功能太強大了,網路上的資源也很齊全,適合有興趣的外行人,拼湊出屬於自己的應用程式。