Apache Web 伺服器會將所有網站的連線記錄存在於本機的記錄檔裡面,當中具有許多分析問題或入侵事件的重要證據。
因此,將這些記錄丟到集中的記錄伺服器就是一件相當重要的事,但要怎麼做呢?
問題狀況
雖然 Apache Web 伺服器會將記錄寫至 /var/log/apache2/ 的檔案裡,但是我在 rsyslog.conf 裡設定丟至遠端 Syslog 伺服器卻不會把它也丟過去。
我想起之前介紹過的另一款記錄檔轉送超強工具 NXLog CE,它可以將文字記錄檔吃進來再丟給 Syslog 伺服器,兩三下就能簡單搞定。
可是....
NXLog CE 官網下載頁
唉呀,我所使用的 Linux 發行版本是 Debian 10 Buster,NXLog CE 社群版還沒有釋出安裝包(企業版已經有),嗚嗚。
解決方案一
在 Linux 裡面,我們可以將 apache2、logger、rsyslog 搭配起來用,達到將 Apache Web 伺服器記錄檔都出去的效果。
# 修改 Apache2 Web 伺服器設定檔 nano /etc/apache2/apache2.conf # 加入這行 CustomLog "| /usr/bin/logger -p local5.info" combined # 修改 Rsyslog 設定檔 nano /etc/rsyslog.conf # 加入傳輸至遠端記錄伺服器 local5.info @192.168.100.10:514 # 重新啟動服務 systemctl restart apache2 systemctl restart rsyslog
重新啟動完成後,確實可以將記錄檔丟至遠端 Syslog 伺服器。
解決方案二
改著改著,覺得機器一多後,這種改法要一次改兩個設定檔,有沒有更方便的作法?另外這種內容丟給 Graylog 的話,內容還要自己寫 Extractor 解析,又多一件工作了,怎麼辦呢?
山不轉路轉,路不轉人轉,採用開源軟體你想怎麼轉就怎麼轉。
既然前一個方法是用本機的 logger 丟給 rsyslog,那我把它換成 nc,讓 apache2 直接把記錄轉出去丟給 Graylog,而且在丟出去之前先把格式組裝為 Graylog 專用的 GELF 格式,這樣 Graylog 收到後就可以直接把欄位拆好索引。
# 修改 Apache2 Web 伺服器設定檔 nano /etc/apache2/apache2.conf # 加入這兩行 LogFormat "{ \"version\": \"1.1\", \"host\": \"%V\", \"short__message\": \"%r\", \"timestamp\": %{%s}t, \"level\": 6, \"__user__agent\": \"%{User-Agent}i\", \"__source__ip\": \"%h\", \"__duration__usec\": %D, \"__duration__sec\": %T, \"__request__size__byte\": %O, \"__http__status__orig\": %s, \"__http__status\": %>s, \"__http__request__path\": \"%U\", \"__http__request\": \"%U%q\", \"__http__method\": \"%m\", \"__http__referer\": \"%{Referer}i\", \"__from__apache\": \"true\" }" graylog__access CustomLog "|/bin/nc -u 192.168.100.21 12201" graylog__access # 重新啟動服務 systemctl restart apache2
注意,因為網頁格式問題,我把上面程式區塊裡的底線都換成兩個底線,請自行替換回來。
只要修改上面的部份即可,方便太多啦!而且 Graylog 裡就可以自動看到分拆索引的欄位,非常省事,接著就可以在 Graylog 上方便的製成各種看板。
Graylog 收取 Apache Web 伺服器記錄欄位一
Graylog 收取 Apache Web 伺服器記錄欄位二
Graylog 製作 Apache Web 伺服器資訊看板
參考資料
- NXLog Community Edition - Downloads | nxlog.co
https://nxlog.co/products/nxlog-community-edition/download
- 節省工具箱 Jason Tools: 開源記錄收集轉送工具:NXLog CE
http://blog.jason.tools/2019/10/2020-ironman-20.html
- NXLog 商業版本服務 - 節省工具箱有限公司
https://www.jason.tools/nxlog-enterprise
- Forward Apache Logs to Central Log Server with Rsyslog - kifarunix.com
https://kifarunix.com/forward-apache-logs-to-central-log-server-with-rsyslog/
- logger(1) - Linux man page
https://linux.die.net/man/1/logger - nc(1): arbitrary TCP/UDP connections/listens - Linux man page
https://linux.die.net/man/1/nc - 節省工具箱 Jason Tools: 開源記錄集中管理系統:Graylog (一)
http://blog.jason.tools/2019/09/2020-ironman-18.html
- 節省工具箱 Jason Tools: 開源記錄集中管理系統:Graylog (二)
http://blog.jason.tools/2019/10/2020-ironman-19.html