因為一些原因,需要保留極度完整的 log,所以研究怎麼把 Wifi AP (router) 的記錄全部倒進 linux 的 rsyslog。
先修改 /etc/rsyslog.conf 裡面的幾個項目:
# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
把「ModLoad」、「UDPServerRun」、「InputTCPServerRun」的註解拿掉,這樣 rsyslog 就會使用 TCP 和 UDP listen port 514。當然在啟動之前要記得先去把防火強的設定弄好。
接下來重新啟動 rsyslog:
$ sudo service rsyslog
啟動完成沒有看到什麼錯誤訊息,表示已經開始運作了。接著「tail -f /var/log/syslog」應該就會看到 remote server 的資料。
但不同機器的訊息方在相同的檔案上實在很難追蹤,所以再多做一個設定,將不同機器傳過來的資料分開存放在不同的檔案。這類的設定檔會放在「/etc/rsyslog.d」,眼尖的話應該已經注意到 ufw、postfix 等服務已經有建立自己的設定了,我們參考著做即可。
假設今天 Wifi AP 的 IP 是「192.168.0.1」,而負責存放所有 log 的 loghost IP 為「192.168.0.101」,設定可以這樣寫:
if $fromhost-ip startswith '192.168.0.1' then /var/log/wifi.log
& ~
這樣 rsyslog 只要遇到從 192.168.0.1 傳過來的資料,就一律丟到「/var/log/wifi.log」。
我自己的 log 比較複雜一些,除了把防火牆以外,還有 kernel 的 log 分開成二個不同的檔案:
if $fromhost-ip startswith '192.168.0.1' and not ($msg contains 'DROP IN') then /var/log/ac3100.log
& ~
if $fromhost-ip startswith '192.168.0.1' and ($msg contains 'DROP IN') then /var/log/ac3100-fw.log
& ~
網路上大部分的資料,都是教別人怎麼把 log 往別台機器丟,只有比較少一部份是處理別台機器的 log,這邊留下一些參考文件: