(黃獻德) Hsien-De Huang | E-Mail:TonTon (at) TWMAN.ORG | TonTon (痛痛)
Malware Analysis Network in Taiwan (MiT) | 惡意程式分析網在台灣 (抬丸郎)
Deep Learning (深度學習), Malware Analysis (惡意程式分析), Ontology (知識本體)
Android Reverse Engineering (Android 逆向工程), Type-2 Fuzzy Logic (第二型模糊邏輯)

ONE PIECE (海賊王)

ONE PIECE (海賊王)

2014年5月21日

Rsyslog and Logrotate on CentOS 6.5 x64

Red Hat Enterprise Linux yum update or CentOS yum update by ISO

嗯 ~ 基本上這篇一樣只是個人使用的筆記 ... 
一切起因於最近很常使用 ArcSight Smart Connector ...
主要是因為網路設備千百萬種版本,難免會不支援其 syslog (特別是 IPv6訊息)導致無法解析

這時候就需要自己透過正規表示式來撰寫 Flex Connector 進行客製化解析


可惜偶爾還是會發生預設始終使用 Smart Connector 預設來進行解析 (當然就失敗啦)
所以這次的動作很搞工 ... Linux 預設套件叫 syslog。 這次用的 rsyslog 是強化版的 syslog,支援自定的紀錄格式以及可以使用資料庫 (MySQL 與 PostgreSQL) 儲存。
先在 Linux 上架設一個 Rsyslog 的服務來接收設備的 syslog,然後再轉存為檔案,最後再修改已撰寫好的 Flex Connector 來進行解析 !

首先我測試的設備環境是

OS: CentOS release 5.5 x86 (2.6.18-194.el5PAE) / SmartConnector: 7.0.2.7019.0

然後把要輸出 log 的設備之 log 導到這台 Linux 並且測試是否有收到

# netstat -tunlp | grep 514

接著就是 yum 安裝 rsyslog 這個服務 ! 很簡單 ...

# yum install rsyslog -y

比較麻煩的是裝好後的 /etc/rsyslog.conf 及 /etc/sysconfig/rsyslog 兩個設定檔


/etc/sysconfig/rsyslog
# Options to syslogd
# -m 0 disables 'MARK' messages.
# -rPortNumber Enables logging from remote machines. The listener will listen to the specified port.
# -x disables DNS lookups on messages recieved with -r
# See syslogd(8) for more details
#SYSLOGD_OPTIONS="-m 0"

#TPE_FW_SSG20 syslog for ArcSight Logger
SYSLOGD_OPTIONS="-c3"  #就是把紅字那行預設的(可能不一樣)註解,新增這行就好

接著是另一個設定檔,內容頗長,但只要注意下面幾行就可以了

/etc/rsyslog.conf 
# Provides UDP syslog reception
#$ModLoad imudp       #看是要用 TCP 或 UDP 來取消註解
#$UDPServerRun 514  #取消註解,依情況修改 port

# Provides TCP syslog reception
#$ModLoad imtcp               
#$InputTCPServerRun 514  

修改為下面這樣

#TPE_FW_SSG20 syslog for ArcSight Logger
$ModLoad imudp.so             #取消註解
$UDPServerAddress 0.0.0.0  #取消註解
$UDPServerRun 515            #取消註解,依情況修改 port

:fromhost-ip, isequal, "210.63.162.248" -/var/log/SSG20.log   #最重要是新增這行
&~

查了一些資料,這行主要是控制收到的log只輸入到 /var/log/SSG20.log 中,這兩行規則需放在所有規則 (Rules) 的最前方,此外第二行 &~ 更是不可忽略。如果規則的位置擺放錯誤或是忘了加上 &~ 這行規則,相關的訊息將會同時記錄到其他的地方 (如 /var/log/message)。

這時候就可以用 tcpdump 驗證一下是否有正確收到 log或者直接檢查 /var/log/SSG20.log
#tcpdump -tlni eth0 port 515

基本上到這邊已經算是初步完成,官網這裡還有很多說明

但一般可能會把 log 給輸入到 mysql ... 這邊我倒是還沒動手,不過對另個計畫倒是頗有幫助
透過 Sitemap 及 Google 網站管理員工具將Google Custom Search 客製化成知識索引評量系統

這邊則有另外3篇很詳細的說明 ... 
[工具介紹] 利用 rsyslog + mysql + loganalyzer 做好日誌管理 (上)

[工具介紹] 利用 rsyslog + mysql + loganalyzer 做好日誌管理 (下)

LogAnalyzer 網頁日誌分析工具 (上)

但是這些就看緣份再找時間來補充更新了 ! xDDD

解接著就是這個了 ... 這邊就有鳥哥的大作可以仔細參考了 !
第十九章、認識與分析登錄檔:登錄檔的輪替(logrotate)

一般都會要你修改這個檔案 /etc/logrotate.conf 來控制 ... 不過因為我們是針對特定 log 所以


自己編修一個這樣的檔案

# cat /etc/logrotate.d/SSG20
# This configuration is from TonTon 2014/04/24
/var/log/SSG20.log {
        weekly              #設定多久 rotate 一次
        size=20M          #設定多大 rotate 一次
        rotate 9             #設定保留多久的檔案
        compress          #設定是否壓縮
        sharedscripts
        prerotate
                /usr/bin/chattr -a /var/log/SSG20.log     # 修改檔案屬性
        endscript
        sharedscripts
        postrotate
                /usr/bin/killall -HUP rsyslogd
                /usr/bin/chattr +a /var/log/SSG20.log
        endscript
}

最後再用 crontab -e 加入 */10 * * * * /usr/sbin/logrotate -f /etc/logrotate.conf

這樣 log 檔就會定時執行檢查了 ... 最後回到本文最早的問題觸發點 ....


嘿嘿嘿 ~ IPv6 打完收工囉 !