天天看點

使用syslog-ng 和stunnel 建立集中式安全日志伺服器

UNIX 系統管理者非常熟悉 syslog 守護程序,但是除非有人報告問題,否則它收集的資訊通常處于未處理狀态。在具有多台計算機的任何站點上,沒有人會花時間去每天甚至每個月記錄和檢查多個日志檔案。編寫可以使這些計算機之間的資料相關的自動腳本十分困難,因為它們必須分别通路每台計算機。為減輕自動和手動資料處理的負擔,許多站點實作了為網絡中的所有計算機(最好運作 NTP 以使時間/日期相關變得更容易)收集資料的中心日志伺服器,其中包括 UNIX 伺服器、Windows 和 Mac 桌上型電腦,甚至包括聯網裝置(如路由器和交換機)。對于大多數通常的 UNIX syslog 守護程序來說,集中式日志記錄是十分瑣碎的,而 syslogd 與早期版本相比幾乎沒有更改,因而具有一些缺點。

标準 UNIX syslog 守護程序通過 UDP 以明文形式傳輸消息,這意味着任何人都可以發現潛在的敏感資料。facility.level 模型也具有較大限制,大多數作業系統附帶的預設 /etc/syslog.conf 檔案疏于記錄管理者可能感興趣的許多消息。解析日志以便可以供人們閱讀或者用于自動資料挖掘十分重要。例如,UNIX syslog 守護程序不會輕易允許按主機拆分日志檔案或者按正規表達式比對日志消息。是以,大多數集中式日志伺服器(這些伺服器使用通常的 syslog 守護程序)最後都會産生巨大的日志檔案,這些檔案僅在 syslogd 程序關閉它們之後才得到處理。

是以,集中日志記錄的大多數站點也都是最後将通常的 syslog 守護程序替換為更安全更靈活的守護程序(如 Metalog、msyslog)或類似的守護程序。一個非常流行的 syslog 替代項是名為 syslog-ng 的開放源程式。組織可以在每個 UNIX 主機或者就在 syslog 伺服器上運作 syslog-ng。如果僅在日志主機上運作 syslog-ng,則客戶機照常通過 UDP 端口 514 發送資料,但可以在伺服器上更好地組織和處理日志。

在每個 UNIX 主機上運作 syslog-ng 的優點是,能夠使用 IPSec 或實用程式 Stunnel 對日志記錄通道進行加密,以便偶然出現的嗅探器 (sniffer) 無法讀取資料。與 Stunnel 組合在一起作為傳輸機制時,組織可以安全地将來自所有必需 UNIX 主機的日志消息集中在一起以供進一步處理。對于 syslog-ng,Stunnel 的工作方式如下:接受本地端口上的日志連接配接,将它們包裝在 SSL 會話中,然後将其重定向到遠端日志主機上的安全端口。然後遠端日志主機上的 stunnel 程序對 SSL 會話進行解密,并将資訊再傳回到标準端口上的 syslog 伺服器。傳到日志伺服器上之後,将利用 syslog-ng 的靈活性進行日志檔案的組織和解析。

下面我将介紹在運作 Solaris 8 作業系統(SPARC 平台版)的計算機上安裝及配置 syslog-ng 和 Stunnel 的過程,但是該過程通常還适用于 SPARC 和 x86 平台上 Solaris 作業系統的早期版本和較新版本。下面讨論的每台參考計算機都安裝有 OpenSSL、tcp wrapper、Solaris 8 /dev/urandom 修補程式、GNU 開發環境(gcc 等)和若幹其他免費軟體包。充當日志伺服器的計算機也進行了全面強化,因為它将存儲來自網絡中所有計算機的敏感資訊和與安全性相關的資訊。這些引用計算機都駐留在子網 192.168.1 上,日志伺服器的 IP 位址為 192.168.1.10。

安裝 Stunnel

實作安全日志伺服器的第一步是在伺服器和每個客戶機上安裝 Stunnel。Stunnel 還可以用于通常的 syslog 守護程序(而不是将 syslog 替換為 syslog-ng),但那樣就沒有了我們所尋求的靈活性。在下面的說明中,我将配置和生成 stunnel 以便随其自身的使用者群組運作,并将 chroot 目錄設定到其自身的目錄下 。要執行此操作,應首先建立 stunnel 組和使用者(随機選取的 UID 和 GID):

/usr/sbin/groupadd -g 122 stunnel

/usr/sbin/useradd -c stunnel -d /nonexistent -m -g 122 -u 122 stunnel

現在,請提取 Stunnel 源代碼,将其解壓縮并進行配置。在這些特定的主機上,OpenSSL 證書儲存在 /usr/local/etc/openssl/certs 中,我希望将 doc 目錄連同本地安裝的其他 doc 安裝一起儲存在 /usr/local 中。我還将 localstatedir 設定為 /var/run/stunnel,因為在重新開機後它無需繼續存在,我希望它位于 chroot 目錄中。

tar zxf stunnel-4.05.tar.gz

cd stunnel-4.05

./configure --localstatedir=/var/run/stunnel /

--with-pem-dir=/usr/local/etc/openssl/certs --datadir=/usr/local

make

make install

通過 Stunnel 為 syslog-ng 建立證書檔案

在 Stunnel 安裝過程中會建立您可能會選擇使用的自簽名證書。由于我運作自己的專用證書頒發機構并僅對 syslog-ng 運作 Stunnel,是以我将生成并簽署自己的 syslog-ng 專用證書。有關設定自己的 CA 和簽名證書的詳細資訊,請檢視 SSL certificates HOWTO(SSL 證書指導)。

假定已設定為您自己的 CA,或者向公認的 CA 發出證書請求,請為伺服器建立 pem 檔案:

openssl req -new -days 3650 -nodes -config stunnel.cnf -out serverreq.pem /

-keyout syslog-ng-server.pem

此外,為每個客戶機建立相應的 pem 檔案:

openssl req -new -days 3650 -nodes -config stunnel.cnf -out clientreq.pem /

-keyout syslog-ng-client.pem

用本地 CA 簽名每個 pem 檔案,或者讓公共 CA 對它們進行簽名。我使用 apache mod_ssl 分發附帶的 sign.sh 腳本:

sign.sh /tmp/serverreq.pem

sign.sh /tmp/client1req.pem

sign.sh /tmp/client2req.pem

sign.sh /tmp/client3req.pem

生成的 crt 檔案包括每個相應 pem 檔案的證書。伺服器需要伺服器 pem 檔案 syslog-ng-server.pem,其中包含伺服器的私鑰和證書(從 /tmp/serverreq.pem.crt 檔案複制):

-----BEGIN RSA PRIVATE KEY-----

MIICXAIBAAKBgQDSAJ0kULvKxIhFtz1ctXlDWY0CcTpIscEAXy90nAuwwvshji39

abZH5Z9PfTOoT/zO6ZyQ0lOJ2LzYcS/JQmR+4wLggf5yi8K3BrBIwaAHbfAya8C9

5g9oINTkjM5Y3zdkMhvPwmivMV+lBa07Qk0SZg8xYblUiafisQplGzjWvwIDAQAB

AoGAEqYzTlJNGwixAV/wdxc2maCOQTVE88e1WA8b68Mf1qa6HpS9yM9mfKQLrcd0

mvHfhZCBcur6uDcjLiV/FORsgB7/3wRF0a08ZJdwlMSn9844jeRlSDbEE1wqAcyj

pnHwcxnErzA0REDuD+EmH0xsh23/Rn/mv7gBpm5Am/UK86ECQQDs5RmiJzQOprsT

ArcTQq3VTmHLtfu7HAQ7+You7XDL+iOVOsbJZWgBKc0oTcNNBpJzkHPrvaOBbFpg

dQZKE3BLAkEA4vBLWsojb0tosXiZuFxzMBrcMhzanzzXerOt0v6BbeZKMTXMaJX+

/4wyVc6lanZc/793S4aHY0/VvCDMLp7y3QJBAKPnX3Tx6vK4KXddyY1p9RxAvylT

IHi1Sbif49DpAkIfL79wi1mM8AjeAzR/mUER6wJKT+orq5VAgsd6MH/QM0ECQHvw

YDclTlTqCjNiehGF7CLJiJiVyZBN2iDZIIWrGWS78KkPiKNVx/4owxS51v1dx0yl

dLF6t1Y1s7Ua9GhBxsECQD3+/khj/lzYUC9KaDIHItO7LHkO1IcxZUZJ0YNaukUB

v1Vh9B3IK5m2bSsOYtOYxbpjoHL8pZG1Bf1lLH32dqw=

-----END RSA PRIVATE KEY-----

-----BEGIN CERTIFICATE-----

MIICZDCCAc0CAQIwDQYJKoZIhvcNAQEEBQAwcTELMAkGA1UEBhMCVVMxFjAUBgNV

BAgTDU1hc3NhY2h1c2V0dHMxEDAOBgNVBAcTB0JldmVybHkxFTATBgNVBAoTDE9j

ZWFud2F2ZSBDQTEhMB8GCSqGSIb3DQEJARYScm9vdEBvY2VhbndhdmUuY29tMB4X

DTA0MDcxOTEzNTExNVoXDTA1MDcxOTEzNTExNVowgYMxCzAJBgNVBAYTAlVTMRYw

FAYDVQQIEw1NYXNzYWNodXNldHRzMRAwDgYDVQQHEwdCZXZlcmx5MSMwIQYDVQQK

ExpPY2VhbndhdmUgQ29uc3VsdGluZywgSW5jLjElMCMGA1UEAxMcbG9naG9zdC5v

ZmZpcdaub2NlYW53YXZlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA

0gCdJFC7ysSIRbc9XLV5Q1mNAnE6SLHBAF8vdJwLsML7IY4t/Wm2R+WfT30zqE/8

zumckNJTidi82HEvyUJkfuMC4IH+covCtwawSMGgB23wMmvAveYPaCDU5IzOWN83

ZDIbz8JorzFfpQWtO0JNEmYPMWG5VImn4rEKZRs41r8CAwEAATANBgkqhkiG9w0B

AQQFAAOBgQAvaaoVvP267QbxBOeBDBeP3CCpOskT5YJUHWQE2QmH5wR/5iwQqvrU

Fo8V2JbaaauN9sa5CQutthUK1D3Ub+nHuHgGPFfdkL0Ll+5+LVf1swKXy8H1Q8CA

Aiq0dK0EJQ+taQTw+KD7MBOzIJk0OF76uwdNxgaATQEVjxi6M0MG5g==

-----END CERTIFICATE-----

它還需要客戶機 pem 檔案 syslog-ng-client.pem,其中僅包含來自簽名 CA 和每個客戶機(此示例假定有三個 syslog-ng 客戶機)的證書(來自 crt 檔案):

MIIDJzCCApCgAwIBAgIBADANBgkqhkiG9w0BAQQFADBxMQswCQYDVQQGEwJVUzEW

MBQGA1UECBMNTWFzc2FjaHVzZXR0czEQMA4GA1UEBxMHQmV2ZXJseTEVMBMGA1UE

ChMMT2NlYW53YXZlIENBMSEwHwYJKoZIhvcNAQkBFhJyb290QG9jZWFud2F2ZS5j

b20wHhcNMDIwNjIzMjIyODIxWhcNMTIwNjIwMjIyODIxWjBxMQswCQYDVQQGEwJV

UzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czEQMA4GA1UEBxMHQmV2ZXJseTEVMBMG

A1UEChMMT2NlYW53YXZlIENBMSEwHwYJKoZIhvcNAQkBFhJyb290QG9jZWFud2F2

ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMSqIDhWZDLO2ptG9ebx

FUycmXoMNPCLWmsFgRBQKG5vgOQruX8jpXqHOFCxjhO4ZsSUWwd8eO4J/4A9kTao

VFzi4P63A8xyN92Gbh4BfvmFecDhLaoZ+5zMNclNOlom2Rda75Fj8iYhtSIrbOcq

Mc8KkRriG3+Hl6ptW0XibqznAgMBAAGjgc4wgcswHQYDVR0OBBYEFDlBMdhKkmEm

pQkan14xNA3a646MMIGbBgNVHSMEgZMwgZCAFDlBMdhKkmEmpQkan14xNA3a646M

oXWkczBxMQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czEQMA4G

A1UEBxMHQmV2ZXJseTEVMBMGA1UEChMMT2NlYW53YXZlIENBMSEwHwYJKoZIhvcN

AQkBFhJyb290QG9jZWFud2F2ZS5jb22CAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG

9w0BAQQFAAOBgQB8Xzn/UioFZV2Osyt0oz8/3Eu1GmQx4Cpaw4o7GBKg52IQA0Sv

qfvUmeuFZ6sSDYEI6bC/u6MkyvRwV7pOtqzUoGbvtGDhnFIxdiyiEOfZosdvadBx

ilXHU/tYDXffxFBcBoeoFHkYyX1vAY4uFsPBEywF3NBUGuoP5Ed5+AS+rQ==

MIICZTCCAc4CAQMwDQYJKoZIhvcNAQEEBQAwcTELMAkGA1UEBhMCVVMxFjAUBgNV

0510MDcxOTEzNTc0M1oXDTA1MDcxOTEzNTc0M1owgYQxCzAJBgNVBAYTAlVTMRYw

ExpPY2VhbndhdmUgQ29uc3VsdGluZywgSW5jLjEmMCQGA1UEAxMdcmVhbHNvb24u

b2ZmaWNlLm9jZWFud2F2ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB

AKKXR7OTQYKDWHvh0jCYSM2Y6gx+Lh2iE1hEVR4xE5UnGNv+/LzgGIYalmD86Vok

KkwdI+5cVp0JhF3gIUgL2+OoerE68AEQwv+tpzx4Px4Ze1pRjw9f6UW+17C3PICG

P4SpC6avMljj8lnv9Rmb300/Yz8ZzyAIzt8CjNu7lTCFAgMBAAEwDQYJKoZIhvcN

AQEEBQADgYEAleB5Xk0BnHu3g6ron5qcjBtDgnOnvzsX3v+KVaFGZiufdWtILCMn

58HrXCV2zoUlUcbnrqHgov47qvZBlh2HR7fT7MQYXFTKOFDXwCdSDfXHTUmmQHzq

cctX025yo45obGgI9LWDjip0/PW0k3r4IuVRtfOz+gHf1ZyEVjIuXkE=

MIICZDCCAc0CAQQwDQYJKoZIhvcNAQEEBQAwcTELMAkGA1UEBhMCVVMxFjAUBgNV

DTA0MDcxOTE0MTUwNloXDTA1MDcxOTE0MTUwNlowgYMxCzAJBgNVBAYTAlVTMRYw

ExpPY2VhbndhdmUgQ29uc3VsdGluZywgSW5jLjElMCMGA1UEAxMcbGl6YXJkby5v

ZmZpY2Uub2NlYW53YXZlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA

ogtXoF+49I/CoSP+CUZ4jX+pLMsIXvta/MqqKlTuvEgauRSw385Aict7rGIR6B3u

BUEBFN4Q+WzuYVJfbBMsUq/A6bilMpq/vbBrPAB9s/BkC5FAx2tMuMpgWn6ZXs/W

iRiEWULAHa4k7rgmonXk47r0bBuSVrozdgKd4u2iB6sCAwEAATANBgkqhkiG9w0B

AQQFAAOBgQBCCMhUdlfRk5owxpUIgtNLQ6/wfPgyUtIm7M4Mg0tHLD2ILCiaJLie

x+Di5+09nciadYxn7fZhFdvnSpsthDX0/P6/H/iLTZnyK3k0PegzYx8Mwo4mnS/X

Bt1cOuciRrd1tPHZ+st2Zqz/UO1jhbtEx7RNjtpxypChFQ2SB63wuA==

MIICYzCCAcwCAQUwDQYJKoZIhvcNAQEEBQAwcTELMAkGA1UEBhMCVVMxFjAUBgNV

DTA0MDcxOTE0MTUyMFoXDTA1MDcxOTE0MTUyMFowgYIxCzAJBgNVBAYTAlVTMRYw

ExpPY2VhbndhdmUgQ29uc3VsdGluZywgSW5jLjEkMCIGA1UEAxMbc2Vrcml0Lm9m

ZmljZS5vY2VhbndhdmUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDG

+OMOU6o3rCSyXMRRzwPKO/Yi9SjcT/5uwJh4x4a/iPlVNhbcG15PLpwmIiEvaKQe

PTwJNEWAMnDBWyT6bmdN9xa0X1pzCDiLGMKJ2PFzoL6b9VwQSx9zp9fTPinh+mVw

484Hf8nQOSs+HKVAltCvJWcFq04aqbauE817Og369wIDAQABMA0GCSqGSIb3DQEB

BAUAA4GBAJ6feAOv8bvGdk01QyupdIJVvp8IBv5ZJD1VLofoj/C4JYLsHWTV0IZI

rhw37hI9y9wAiiZVrbEM88N0FgFfHN2hoymvRmvg0Y7l7OuMQWz2vSMJYIyeI2Wb

uMWGN+klM77OxRXWseUOWaPp0RqW3MGqMV7+SU8sN9gVdEZdLxnj

每個客戶機都需要 pem 檔案 syslog-ng-client.pem 中其自身的證書和私鑰:

MIICXAIBAAKBgQCil0ezk0GCg1h74dIwmEjNmOoMfi4dohNYRFUeMROVJxjb/vy8

4BiGGpZg/OlaJCpMHSPuXFadCYRd4CFIC9vjqHqxOvABEML/rac8eD8eGXtaUY8P

X+lFvtewtzyAhj+EqQumrzJY4/JZ7/UZm99NP2M/Gc8gCM7fAozbu5UwhQIDAQAB

AoGAGhMErqm44cNKl2NZn+1sD3ysXCCIKLxrOcaLl/Hq4AqLFAzKX0fY5viwkRE+

IvSVy+sIbhtk0H5MOfnNnI46TwCvgelMbb8FtRDpZrwA7AgH9+scnjfpuibVZdoW

9fR2HoOOevffDU9ZfFlthsOKJp+xb7PRFcsxlV3ihla9aKkCQQDNt3gcE9goGyBj

kWkgB1Ydmov155xC1ozGpeyEVm3fGtD+sfgIxYuaV1xFhQKZMR2QeEnX3v5mqP31

zf5dnj47AkEAylVB95ZGvG91H4uUXrSW53djD2a5GtVjXNoDWLs7Hp7sbUkbRexa

5cSZ7EFqbyXHYx1xKMgYwqgIhbV1CU2gPwJAZBnMtkzpt8pLXmfZcZ5gRxN223eS

T+u6oMcIafTsjc2suOK8wPfvUHEGE0X/169QpYYC2KpHvIiq2zsbdU6VFQJAYibZ

yXFs/xxShOsBHrAcREz2ERKT2SCLAw//b5vkIgaWSq2cPV9a+PtWb/WL3D9Hah1u

N4pZ+JPrDnHoRIsToQJBAJ4IG4AAgIPkmIVbROXXpt/2YBbP1WQI1suKzWy6r4V4

E0fiwYh1REik4+WRCRBabzjFA7GIDiD2QQGzTa8m0nQ=

每個客戶機還需要 pem 檔案 syslog-ng-server.pem,其中僅包含來自伺服器和簽名 CA 的證書:

在每台計算機上,確定隻有超級使用者可以讀驗證書檔案(由于安全原因):

chmod 400 /usr/local/etc/openssl/certs/syslog-ng-*

chown root:other /usr/local/etc/openssl/certs/syslog-ng-*

配置 Stunnel 以用于 syslog-ng

在伺服器上,建立 syslog-ng 專用的 Stunnel 配置檔案 /usr/local/etc/stunnel/stunnel.conf,該檔案包含如下資訊。此示例檔案指定本地證書/密鑰和伺服器證書、stunnel 使用者群組以及 chroot 目錄。verify 的值為 3 可確定 stunnel 使用本地安裝的證書驗證對等方。預設情況下,Stunnel 使驗證處于關閉狀态,是以此時打開驗證十分重要。配置檔案的最後一部分指定 SSL 包裝會話的端口号和在其中接受和重定向連接配接的 IP:port。端口 514 是标準的 syslog 端口,5140 是随機選取的未用端口。有關其他資訊和配置選項,請務必閱讀 stunnel 手冊頁。

cert = /usr/local/etc/openssl/certs/syslog-ng-server.pem

CAfile = /usr/local/etc/openssl/certs/syslog-ng-client.pem

chroot = /var/run/stunnel

pid = /run/stunnel.pid

setuid = stunnel

setgid = stunnel

verify = 3

[5140]

accept = 192.168.1.10:5140

connect = 127.0.0.1:514

在每個客戶機上,syslog-ng 專用的 /usr/local/etc/stunnel/stunnel.conf 檔案包含與伺服器的 stunnel.conf 檔案相類似的指令。将交換 cert 和 CAfile 值以及 accept 和 connect 值,并添加 client 指令:

client = yes

cert = /usr/local/etc/openssl/certs/syslog-ng-client.pem

CAfile = /usr/local/etc/openssl/certs/syslog-ng-server.pem

accept = 127.0.0.1:514

connect = 192.168.1.10:5140

現在已配置 Stunnel,可以安裝和配置 syslog-ng 了。如果希望在此時測試 Stunnel,請将它配置為使用其他 TCP 端口或服務(如 IMAP 或 telnet),如 stunnel 示例頁所述。

安裝 syslog-ng

syslog-ng 的穩定版本首先要求安裝(或至少生成)庫 libol。請下載下傳、解壓縮并安裝該庫,如下所示:

tar zxf libol-0.3.14.tar.gz

cd libol-0.3.14

./configure

現在,請檢索 syslog-ng 的源代碼,并對其進行解壓縮、配置和安裝。在配置時,我還添加了對 tcp wrapper 的支援,因為我已安裝并有效地将其用于其他守護程序:

tar zxf syslog-ng-1.6.5.tar.gz

cd ../syslog-ng-1.6.5

./configure --enable-tcp-wrapper

請務必打開所有包過濾器和/或 tcp wrapper 中的相應端口。如果日志主機也在接受未加密的 syslog 消息,則伺服器需要接受來自 TCP 端口 5140 上和 UDP 端口 514 上客戶機的連接配接。要支援 tcp wrapper 的擴充文法,請将以下内容添加到伺服器上的 /etc/hosts.deny:

syslog-ng : LOCAL 127.0.0.1 192.168.1. : ALLOW

此外,在客戶機上将以下内容添加到 /etc/hosts.deny:

syslog-ng : LOCAL 127.0.0.1 : ALLOW

現在可以建立 stunnel/syslog-ng 啟動腳本 /etc/init.d/syslog-ng,該腳本将在引導時運作于每台計算機上。以下腳本基于 Solaris 8 作業系統的 syslog 啟動腳本,此外它還執行 savecore,并啟動 stunnel 和 syslog-ng:

#!/sbin/sh

#

case "$1" in

'start')

if [ -f /usr/local/etc/syslog-ng/syslog-ng.conf -a -x /

/usr/local/sbin/syslog-ng ]; then

# Before syslogd starts, save any messages from previous

# crash dumps so that messages appear in chronological order.

/usr/bin/savecore -m

if [ -r /etc/dumpadm.conf ]; then

. /etc/dumpadm.conf

[ "x$DUMPADM_DEVICE" != xswap ] && /

/usr/bin/savecore -m -f $DUMPADM_DEVICE

fi

# Start stunnel so logs are sent encrypted

if [ -f /usr/local/etc/stunnel/stunnel.conf /

-a -x /usr/local/sbin/stunnel ]; then

echo "Starting stunnel"

mkdir -p /var/run/stunnel/run

chown stunnel:stunnel /var/run/stunnel/run

/usr/local/sbin/stunnel

echo "Starting syslog-ng"

/usr/local/sbin/syslog-ng

;;

'stop')

if [ -f /var/run/syslog-ng.pid ]; then

syspid=`/usr/bin/cat /var/run/syslog-ng.pid`

[ "$syspid" -gt 0 ] && kill -15 $syspid && /

echo "Killed syslog-ng"

if [ -f /var/run/stunnel/run/stunnel.pid ]; then

syspid=`/usr/bin/cat /var/run/stunnel/run/stunnel.pid`

echo "Killed stunnel"

*)

echo "Usage: $0 { start | stop }"

exit 1

esac

删除本機 Solaris syslog 啟動和關閉腳本的連結,并将其替換為指向新 syslog-ng 腳本的連結:

rm /etc/rc*.d/???syslog

ln -s /etc/init.d/syslog-ng /etc/rc0.d/K40syslog-ng

ln -s /etc/init.d/syslog-ng /etc/rc1.d/K40syslog-ng

ln -s /etc/init.d/syslog-ng /etc/rc2.d/S74syslog-ng

ln -s /etc/init.d/syslog-ng /etc/rcS.d/K40syslog-ng

配置 syslog-ng

syslog-ng 的靈活性取決于其配置檔案。配置指令 source、filter、destination 和 log 對于日志處理十分重要。Source 指令表示本地日志消息和遠端日志消息的來源。Filter 指令允許基于裝置、級别/優先級、程式名稱、主機名稱或正規表達式比對來分離日志消息。destination 可以是檔案、管道、流和資料報、UDP 或 TCP 連接配接、ttys 或程式。log 指令是 source、filter 和 destination 指令的集合,這些指令定義如何處理比對的日志消息。在 syslog-ng 參考手冊中可找到所有可用指令的讨論,在 syslog-ng 常見問題解答中列出了各種示例。

以下示例顯示了在每個本地主機的 /var/log 以及在中心日志伺服器的 /var/log/clients/$YEAR/$MONTH/$HOST 中存儲的日志檔案。日志主機上的以下 /usr/local/etc/syslog-ng/syslog-ng.conf 支援來自本地主機、stunnel 加密主機和标準 UDP 主機(如無法使用 stunnel 的路由器和交換機)的消息。過濾器基于裝置和級别、程式名稱比對以及這些項的某些組合。

# Options

options {

use_fqdn(yes);

sync(0);

keep_hostname(yes);

chain_hostnames(no);

create_dirs(yes);

};

# Sources of syslog messages (both local and remote messages on the server)

source s_local {

sun-streams("/dev/log" door("/etc/.syslog_door"));

internal();

source s_stunnel {

tcp(ip("127.0.0.1")

port(514)

max-connections(1));

source s_udp { udp(); };

# Level Filters

filter f_emerg { level (emerg); };

filter f_alert { level (alert .. emerg); };

filter f_crit { level (crit .. emerg); };

filter f_err { level (err .. emerg); };

filter f_warning { level (warning .. emerg); };

filter f_notice { level (notice .. emerg); };

filter f_info { level (info .. emerg); };

filter f_debug { level (debug .. emerg); };

# Facility Filters

filter f_kern { facility (kern); };

filter f_user { facility (user); };

filter f_mail { facility (mail); };

filter f_daemon { facility (daemon); };

filter f_auth { facility (auth); };

filter f_syslog { facility (syslog); };

filter f_lpr { facility (lpr); };

filter f_news { facility (news); };

filter f_uucp { facility (uucp); };

filter f_cron { facility (cron); };

filter f_local0 { facility (local0); };

filter f_local1 { facility (local1); };

filter f_local2 { facility (local2); };

filter f_local3 { facility (local3); };

filter f_local4 { facility (local4); };

filter f_local5 { facility (local5); };

filter f_local6 { facility (local6); };

filter f_local7 { facility (local7); };

# Custom Filters

filter f_user_none { not facility (user); };

filter f_kern_debug { filter (f_kern) and filter (f_debug); };

filter f_daemon_notice { filter (f_daemon) and filter (f_notice); };

filter f_mail_crit { filter (f_mail) and filter (f_crit); };

filter f_mesg { filter (f_kern_debug) or

filter (f_daemon_notice) or

filter (f_mail_crit); };

filter f_authinfo { filter (f_auth) or program (sudo); };

# Destinations: local files, the console, and the client files

destination l_authlog { file ("/var/log/authlog"); };

destination l_messages { file ("/var/log/messages"); };

destination l_maillog { file ("/var/log/maillog"); };

destination l_ipflog { file ("/var/log/ipflog"); };

destination l_imaplog { file ("/var/log/imaplog"); };

destination l_syslog { file ("/var/log/syslog"); };

destination l_console { file ("/dev/console"); };

destination r_authlog { file

("/var/log/clients/$YEAR/$MONTH/$HOST/authlog"); };

destination r_messages { file

("/var/log/clients/$YEAR/$MONTH/$HOST/messages"); };

destination r_maillog { file

("/var/log/clients/$YEAR/$MONTH/$HOST/maillog"); };

destination r_ipflog { file

("/var/log/clients/$YEAR/$MONTH/$HOST/ipflog"); };

destination r_imaplog { file

("/var/log/clients/$YEAR/$MONTH/$HOST/imaplog"); };

destination r_console { file

("/var/log/clients/$YEAR/$MONTH/$HOST/consolelog"); };

destination r_syslog { file

("/var/log/clients/$YEAR/$MONTH/$HOST/syslog"); };

destination r_fallback { file

("/var/log/clients/$YEAR/$MONTH/$HOST/$FACILITY-$LEVEL"); };

# Log statements

# Local sources

log { source (s_local); filter (f_authinfo) destination (l_authlog); };

log { source (s_local); filter (f_mail); destination (l_maillog); };

log { source (s_local); filter (f_local0); destination (l_ipflog); };

log { source (s_local); filter (f_local1); destination (l_imaplog); };

log { source (s_local); filter (f_syslog); destination (l_syslog); };

log { source (s_local); filter (f_emerg); filter (f_user_none);

destination (l_console); };

log { source (s_local); filter (f_mesg); filter (f_user_none);

destination (l_messages); };

# All sources, since we want to archive local and remote logs

log { source (s_local); source (s_stunnel); filter (f_authinfo);

destination (r_authlog); };

log { source (s_local); source (s_stunnel); filter (f_mail);

destination (r_maillog); };

log { source (s_local); source (s_stunnel); filter (f_local0);

destination (r_ipflog); };

log { source (s_local); source (s_stunnel); filter (f_local1);

destination (r_imaplog); };

log { source (s_local); source (s_stunnel); filter (f_syslog);

destination (r_syslog); };

log { source (s_local); source (s_stunnel); filter (f_emerg);

filter (f_user_none);

log { source (s_local); source (s_stunnel); filter (f_mesg);

在此示例客戶機 syslog-ng.conf 中,過濾器仍然是相同的,但是配置的其他部分大多已更改為反映客戶機狀态或者被删除:

# Sources of syslog messages (only local on clients)

# Destinations: local files, the console, and the remote syslog server

destination stunnel { tcp ("127.0.0.1", port(514)); };

# Log things locally

log { source (s_local); filter (f_authinfo); destination (l_authlog); };

# Log everything remotely via stunnel

log { source (s_local); destination (stunnel); };

syslog-ng 的更進階用法包括根據日志消息的重要性将其直接發送到資料挖掘軟體、資料庫、電子郵件或列印機。另一個有用的提示是,将高優先級日志消息發送到一個可以由實時日志分析器(如 swatch、logsurfer、Log Tool 或 Logwatch)監視的檔案。自動資料挖掘和監視的可能性很大,原因是可以按各種方式組織和處理日志條目。

繼續閱讀