架設 Syslog Server

1、前言

Syslogd 為內建於 FreeBSD 內的 Log 服務,預設情況下只收集 (產生) 本機的 Log,本次實作為設定 Syslogd 成為 Log Server 收集網路設備所吐出來的 Syslog。



文章目錄

1、前言
2、實作環境
3、安裝及設定
4、Log Client (Juniper SSG20)
          步驟1 - 啟用 Syslog 功能
5、Log Server (FreeBSD)
          步驟1 - 修改主機設定檔 (/etc/hosts)
          步驟2 - 修改 Log 設定檔 (/etc/syslog.conf)
          步驟3 - 修改主機服務設定檔 (/etc/rc.conf)
          步驟4 - 建立 syslog 空檔 (/var/log/ssg20.log)
          步驟5 - 檢查是否接收到 Log Client 傳送過來的 Syslog
6、參考
7、Me FAQ
          Q1 - 指定的 Syslog Log 檔案沒任何內容寫入?



2、實作環境

  • FreeBSD 8.2-RELEASE-p4
  • 內建 syslogd 



3、安裝及設定

本次實作的相關網路環境及設定資訊如下所示
Log Server (FreeBSD): 負責收集來自於 Log Client 所傳送過來的 syslog
  • Hostname: syslog.weithenn.org
  • NIC Name: em0
  • IP Address: 192.168.1.10
  • Syslog 服務: UDP / Port 514
Log Client (Juniper SSG20): 指定將設備上的 syslog 傳送至 Log Server
  • Hostname: ssg20.weithenn.org
  • IP Address: 192.168.1.20
  • Syslog 服務: UDP / Port Random



4、Log Client (Juniper SSG20)

步驟 1 - 啟用 Syslog 功能

請啟用 Log Client (Juniper SSG20) Syslog 功能,步驟如下:
1. 登入 Juniper SSG20
2. 點選【Configuration】 >> 點選【Report Settings】 >> 點選【Syslog】
     1. 勾選【Enable syslog messages】項目
     2. 填入 syslog server 相關資訊【IP / Hostname...etc】 (如下圖所示)
     3. 相關資訊填妥後按下【Apply】
3. 完成 Log Client (Juniper SSG20) 啟用 Syslog 功能的設定




5、Log Server (FreeBSD)

步驟 1 - 修改主機設定檔 (/etc/hosts)

修改主機設定檔 /etc/hosts 以便後續收集的 Log Client 視別之用,此名稱等一下會使用於 /etc/syslog.conf 設定檔內。
vi /etc/hosts
  192.168.1.20   ssg20 ssg20.weithenn.org       //加入此行

測試 Log Server 是否可視別該主機名稱 (Log Client) Hostname。
ping ssg20
 PING ssg20 (192.168.1.20): 56 data bytes
 64 bytes from 192.168.1.20: icmp_seq=0 ttl=64 time=2.711 ms
 64 bytes from 192.168.1.20: icmp_seq=1 ttl=64 time=1.438 ms
 ^C
 --- ssg20 ping statistics ---
 2 packets transmitted, 2 packets received, 0.0% packet loss
 round-trip min/avg/max/stddev = 1.438/2.075/2.711/0.637 ms



步驟 2 - 修改 Log 設定檔 (/etc/syslog.conf)

修改 Log 設定檔 /etc/syslog.conf 指定屆時收集到 Log Client 傳送過來的 syslog 內容應存放於何處,詳細內容可參考 FreeBSD Man Pages - syslog.conf,以下為說明相關用法:
  • +Hostname: 指定此 Host 或設備傳送過來的 Log 訊息 採用 下列方式處理並指定存放處。
  • -Hostname: 指定除了此 Host 傳送過來的 Log 訊息 不採用 下列方式處理並指定存放處。
  • +@: 指定本機 (Localhost) 產生的 Log 訊息採用下列方式處理並指定存放處。
  • +*: 所有設備的 Log 也存放至指定檔案中,當環境有多台主機時希望能將所有設備 Log 分開存放之外,也同時存放在同一個檔案中時便可使用此語法。
  • 請勿使用 _ 命名: Log 命名請勿使用 底線(_) 命名,因此屆時 Log 將無法寫入該檔案中 (可以使用 減號(-) 代替)。
所以修改後的 /etc/syslog.conf 內容如下
vi /etc/syslog.conf
  ### For Juniper SSG20 Log     //註解文字
  +ssg20                        //接收 ssg20 傳送過來的 syslog
  *.*     /var/log/ssg20.log    //存放於 /var/log/ssg20.log
  ### For FreeBSD Localhost     //註解文字
  +@                            //Localhost 的 syslog 採用下列方式處理
 *.err;kern.warning;auth.notice;mail.crit                /dev/console
 *.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err   /var/log/messages
 ...略...



步驟 3 - 修改主機服務設定檔 (/etc/rc.conf)

修改主機服務設定檔 /etc/rc.conf,在 FreeBSD 上 Syslogd 預設就會啟動但啟動的 Syslogd 服務是有加上參數 -s (僅處理本機 Log 部份,不能成為 Log Server),因此我們可以透過加上參數 -a 及 IP 網段來此 Syslogd 成為 Log Server,詳細內容可參考 FreeBSD Man Pages - syslogd
參數 -a 運用說明: (請注意指定的 Port Number 為 Log Client 來源埠號)
  • -a 192.168.1.0/24:514: 接收 192.168.1.x 網段 Log Client 傳送過來的 syslog (Client 來源 Port 為 514)
  • -a 192.168.1.0/24:*: 接收 192.168.1.x 網段 Log Client 傳送過來的 syslog (Client 來源 Port 為 Any)
  • -a 0/0:*: 接收所有網段 Log Client 傳送過來的 syslog (多網段需求時則此處全開配合使用防火牆進行限制)
因為此次接收的 Log Client 為 Juniper SSG20 無法指定其傳送 Port Number,因此在指定 Log Client 來源埠號時設定為星號 (*)
vi /etc/rc.conf
  syslogd_flags="-a 192.168.1.0/24:*"       //加入此行




步驟 4 - 建立 syslog 空檔 (/var/log/ssg20.log)

在剛才步驟 2 修改 Log 設定檔 /etc/syslog.conf 中我們指定存放 Syslog 的檔案路徑為 /var/log/ssg20.log,因此在重新啟動 Syslogd 服務以前請先建立此一空檔案,以便屆時將接收到的 Syslog 資訊寫入該檔案內。
touch /var/log/ssg20.log
建立完成後請重新啟動 Syslogd 服務
/etc/rc.d/syslogd restart
重新啟動 Syslogd 服務完成後檢查一下執行序內容是否已經如上述設定允許指定的網段傳送 Syslog 進來,使用 ps aux 指令可以看到預設值 (尚未重新啟動服務前)為 syslogd -s,當重新啟動服務後變成 syslogd -a 192.168.1.0/24
ps aux |grep syslogd
  root   651  0.0  0.1  3184  1232  ??  Ss   02下午  0:00.36 /usr/sbin/syslogd -s
  root   33304  0.0  0.1  3184  1224  ??  Ss    3:58下午  0:00.00 /usr/sbin/syslogd -a 192.168.1.0/24



步驟 5 - 檢查是否接收到 Log Client 傳送過來的 Syslog

您可使用下列指令來檢查是否接收到 Log Client 傳送過來的 Syslog 訊息,由下列訊息可知 Log Client 透過 Port 21918 傳送 Syslog 訊息給 Log Server Port 514。
tcpdump -tlni em0 port 514
 IP 192.168.1.20.21918 > 192.168.1.10.514: SYSLOG local0.notice, length: 431
 IP 192.168.1.20.21918 > 192.168.1.10.514: SYSLOG local0.notice, length: 431
 IP 192.168.1.20.21918 > 192.168.1.10.514: SYSLOG local0.notice, length: 432
 ...略...




6、參考




7、Me FAQ

Q1 - 指定的 Syslog Log 檔案沒任何內容寫入?

Error Meaage:
Log Client 及 Log Server 皆設定完成後使用 tcpdump 指令也看到 Log Client 傳送 Syslog 訊息過來,但為何指定的 Log 檔案 (/var/log/ssg20.log) 內沒有任何內容寫入?
tcpdump -tlni em0 port 514
  IP 192.168.1.20.21918 > 192.168.1.10.514: SYSLOG local0.notice, length: 431
  IP 192.168.1.20.21918 > 192.168.1.10.514: SYSLOG local0.notice, length: 431
  IP 192.168.1.20.21918 > 192.168.1.10.514: SYSLOG local0.notice, length: 432
  ...略...

Ans:
原因在於 Log Client (Juniper SSG20) 用來傳送 Syslog 訊息的 Port 為隨機 (Random),因此在指定接收 Log Client 網段及 Port 時必須填入星號 (*) 而不是 Port 514。

參數 -a 運用說明: (請注意指定的 Port Number 為 Log Client 來源埠號)
  • -a 192.168.1.0/24:514: 接收 192.168.1.x 網段 Log Client 傳送過來的 syslog (Client 來源 Port 為 514)
  • -a 192.168.1.0/24:*: 接收 192.168.1.x 網段 Log Client 傳送過來的 syslog (Client 來源 Port 為 Any)
  • -a 192.168.1.0/24:514 192.168.2.0/24:514: 接收 192.168.1.x、192.168.2.x 網段 Log Client 傳送過來的 syslog (Client 來源 Port 為 514)
vi /etc/rc.conf
 syslogd_flags="-a 192.168.1.0/24:*"     //加入此行