不論是用 XAMPP 安裝在 Windows 個人電腦上,或使用 VPS 主機 / 共享主機來架設網站,難免都要考慮網站資安的問題。而 Apache log 是什麼?簡單說,就是將所有連入網站的紀錄都儲存在 access.log 這個檔案中;同時也會把錯誤紀錄儲存在 error.log。所以, Apache log分析可以讓你在看完數據後,採取適當的保護措施,提高網站安全。
這篇文章中,以 XAMPP 安裝在 Windows 系統上的自架網站為例子,使用兩種免費的方法來分析Apache log(access.log),並將惡意連線 IP 抓出來,然後把這些 IP 輸入到防火牆的封鎖名單中,或著是利用 WordPress 外掛來封鎖 IP 。同時也會分享如何客製化 Apache log ,不會因為檔案容量過大,而拖慢主機速度。在最後,會提供程式碼範例方便大家直接使用或修改。
Table of Contents
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格式做客製化設定,原因是:
- 限制每份 log 的檔案大小,避免檔案太大拖慢主機速度,或開啟 log 時造成程式或電腦當機
- 方便程式對 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 巨集錄製器來達到相同結果。就這樣子,也使用了一年多。但是缺點是什麼呢?就是:
- 屬於半自動化的分析工具
- 開啟 log、匯入 Excel、執行巨集…等重複的動作,通常也要 1 – 3 分鐘才能完成一份(也就是一天的紀錄) log 分析
- 專注力要高,不然很容易忘記做到哪個階段,導致這一份 log 分析又做了白工
- 電腦資源要夠,否則做了幾份 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】欄

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

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

Step 5:判斷 IP 是否為惡意爬蟲、具威脅的連線
通常根據你的網站規模,來訂一個門檻值,假使總次數超過這個門檻的話,才需要回到 access.log 當中,查詢該 IP 的連線狀態是否有異常的地方。
例如: IP – 72.14.199.220 ; 出現次數 – 323次
明顯多於其他連線 IP 的次數,所以我們就回到 access.log 來查詢它的連線紀錄是否有異常的地方。
剛開始看到【I】欄中並無連線網址的資料,以為是惡意爬蟲或其他未知的威脅連線,但是多查詢幾筆紀錄後,會發現它應該是 google bot ,所以就不用加入封鎖名單了。

假使以上圖文描述還是感到困惑的話,不妨觀看我錄製的一段操作影片,也許會讓大家更清楚整個操作流程。假使這篇文章對您有幫助的話,麻煩幫忙【訂閱】我的頻道,也歡迎分享給有需要的朋友,我們會非常感謝您的支持!
找出惡意爬蟲 IP 的方法#2
發法#2 是這篇文章中的重點分享,也是目前找到最節省時間的方法。
Step 1:下載、安裝 Anaconda 3 到電腦上
下載網址:https://www.anaconda.com/products/individual

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

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

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

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

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

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 次

假使以上圖文描述還是感到困惑的話,不妨觀看我錄製的一段操作影片,也許會讓大家更清楚整個操作流程。假使這篇文章對您有幫助的話,麻煩幫忙【訂閱】我的頻道,也歡迎分享給有需要的朋友,我們會非常感謝您的支持!
最後,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 函數、剪貼程式碼,外行人也可以實現簡單的程式。
自架網站流程
架站硬體
– 電腦:安裝 Windows 10
– 路由器:入門防火牆、進階防火牆
– 寬頻網路:中華電信光世代
架站軟體
– 5套免費架站懶人包
(參考第 2 章節,推薦使用 XAMPP)
網域名稱
– 免費域名:NoIP DDNS
(建議購買專屬域名)
網頁標題
靠零成本提高網站資安的推薦方法
方法#1 | 方法#2 | |
---|---|---|
花費時間 | 60秒 – 180秒 | 3 秒 – 5 秒 |
成本 | 零成本 | 零成本 |
困難度 | 普通 | 難 |
電腦等級 | 高 | 普通 |
專注力 | 高 | 普通 |
假使本身對於 Excel 很熟練的話,其實不見得要使用方法#2(Python)來分析 log,畢竟操作的工具還是要選擇自己熟練的來使用,這樣子遇到問題時,才能夠自己解決。假如對於 Excel 與 Python 都不熟悉的話,建議可以把時間花在 Python ,因為它的功能太強大了,網路上的資源也很齊全,適合有興趣的外行人,拼湊出屬於自己的應用程式。