1. 1023.990天:linux CentOS 7搭建日誌伺服器
#每日三件事,第990天#
《中華人民共和國網路安全法》第二十一條第一款第三項規定網路運營者應採取監測、記錄網路運行狀態、網路安全事件的技術措施,並按照規定留存相關的網路日誌不少於六個月。在GB/T22239《網路安全等級保護基本要求》的安全計算環境中,對安全審計也有明確的要求。
在落實法律義務和責任,開展網路安全等級保護工作的過程中,日誌伺服器成了必不可少的一項。商用的日誌審計系統固然好,但利用CentOS7也可以做一個簡單的日誌伺服器,收集網路中其他設備的日誌信息。
日誌伺服器端的配置:
yum install syslog,其實CentOS7默認就已經安裝了rsyslog服務。系統會自動檢測,並不會重新安裝一遍syslog服務。
vim /etc/rsyslog.conf,找到#Providers TCP syslog reception這一行,把下面兩行前面的#去掉即可:
#Providers TCP syslog reception
$ModLoad imtcp
$InputTCCPServerRun 514
======分割線 ======
在/etc/rsyslog.d/創建一個名為client_ip.conf的文件,每個日誌發送客戶端創建一個文件。我的實驗環境中有一個ip為192.168.1.1的客戶端,因此創建一個192.168.1.1.conf的文件。
vim /etc/rsyslog.d/192.168.1.1.conf
:fromhost-ip,isequal, "192.168.1.1" /var/log/client/192.168.1.1.log
systemctl restart rsyslog
重啟之後一定要檢查一下,使用命令:systemctl status rsyslog,並且保證rsyslog服務能夠在開機時自動啟動。
客戶端的配置如下:
vim /etc/rsyslog.conf,去掉#Providers TCP syslog reception下面兩行的注釋:
#Providers TCP syslog reception
$ModLoad imtcp
$InputTCCPServerRun 514
在最後一行添加:
*.*. @@192.168.1.10:514
其中192.168.1.10是日誌伺服器的IP地址。
systemctl restart rsyslog,並查看rsyslog的狀態,保證服務在開機時自動啟動。
此時在日誌伺服器上就可以接收到客戶端發來的日誌信息了。
2. 配置Linux日誌文件
不要低估日誌文件對網路安全的重要作用,因為日誌文件能夠詳細記錄系統每天發生的各種各樣的事件,用戶可以通過日誌文件檢查錯誤產生的原因,或者在受到攻擊、被入侵時追蹤攻擊者的蹤跡。日誌的兩個比較重要的作用是審核和監測。配置好的Linux的日誌非常強大。對於Linux系統而言,所有的日誌文件在/var/log下。默認情況下,Linux的日誌文件沒有記錄FTP的活動。用戶可以通過修改/etc/ftpacess讓系統記錄FTP的一切活動。
/etc/syslog.conf的格式
Linux系統的日誌文件是可以配置的,在前面的章節中已經介紹了如何定製Apache、wu-ftpd、Sendmail的日誌文件。Linux系統的日誌文件是由/etc/syslog.conf決定的,用戶有必要花時間仔細配置一下/etc/syslog.conf.下面是/etc/syslog.conf的範例:
# Log all kernel messages to the kernlog.
# Logging much else clutters up the screen.
kern.*/var/log/kernlog
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;news.none;authpriv.none;cron.none
/var/log/messages
*.warning/var/log/syslog
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.*/var/log/maillog
# Log cron stuff
cron.*/var/log/cron
# Everybody gets emergency messages, plus log them on another
# machine.
*.emerg
# Save mail and news errors of level err and higher in a
# special file.
uucp,news.crit/var/log/spooler
# Save boot messages also to boot.log
local7.*/var/log/boot.log
# INN
news.=crit /var/log/news/news.crit
news.=err /var/log/news/news.err
news.notice /var/log/news/news.notice
.
可以看出,該配置文件的每一行的第一個欄位列出要被記錄的信息種類,第二個欄位則列出被記錄的位置。第一個欄位使用下面的格式:facility.level[;facility.level…]
此處的faciity是產生信息的系統應用程序或工具,level則是這個信息的重要程度。level的重要程度由低到高依次是:debug(調試消息)、info(一般消息)、notice(值得注意的消息)、warning(警告)、err(一般性錯誤)、crit(嚴重錯誤)、alert(或emerg,緊急情況)。
facility包含有:auth(認證系統,如login或su,即詢問用戶名和口令)、cron(系統執行定時任務時發出的信息)、daemon(某些系統的守護程序的syslog,如由in.ftpd產生的log)、kern(內核的信息)、lpr(列印機的信息)、mail(處理郵件的守護進程發出的信息)、mark(定時發送消息的時標程序)、news(新聞組的守護進程的信息)、user(本地用戶的應用程序的信息)、uucp(uucp子系統的信息)和「*」(表示所有可能的facility)。
將日誌文件記錄到遠程主機
如果有另一個Linux或UNIX系統,那麼可以配置日誌文件,讓其把消息發到另外一個系統並記錄下來。這也是為什麼上面的所有日誌文件都記錄了主機名的原因。要實現這個功能,在該配置文件中,指定一個記錄動作,後面接一個由「@」開頭的遠程系統的主機名,如下例:*.warn;authpriv.notice;auth.notice @bright.hacker.com.cn
同時,還要將接受消息的目的系統設置為允許這種操作。此例主機bright.hacker.com.cn的syslogd守護進程要用-r參數啟動。如果不使用-r參數,則目標主機的syslogd將丟棄這個消息以避免DoS攻擊使硬碟塞滿虛假消息。並且確保目標主機的/etc/service文件必須設置syslog服務所使用的UDP埠514(這也是RedHat Linux默認的設置)。如果syslogd守護進程用了-r和-h參數,那麼,參數-h將允許轉發消息。也就是說,如果系統B的syslogd用了-h參數,這樣,當系統A把消息轉發到系統B後,系統B就把來自系統A和它自己的消息轉發到系統C.
將警告信息發送到控制台
syslogd可以將任何從內核發出的重要程度為emerg或alert的信息發送到控制台。控制台是指虛擬控制台或啟動時加-C參數的xterm.要實現這一功能,在/etc/syslog.conf文件中加上下面一行:kern.emerg /dev/console
這樣,當系統內核發生錯誤而發出消息時,用戶能夠馬上知道並且進行處理。如果用了「*」,就是一旦內核發生錯誤,就將消息發送給所有在線用戶,但只有這個用戶正在登錄的時候才能看到。修改了/etc/syslog.conf文件後,必須重新啟動syslogd守護進程以使配置更改生效,請執行下面的命令:#/etc/rc.d/init.d/syslog restart
3. linux下的日誌同步服務怎麼做高分求助
我不知道你的日誌同步是什麼意思,我的理解是把所有伺服器的日誌統一發送到一台指定的日誌伺服器。。如果理解不對,麻煩補充。
我把我的摘抄的文檔發上來給你看看,這個不難,我就是按這個文檔配置的。。
一、 配置syslog守護進程
syslog是Linux系統默認的日誌守護進程。默認的syslog配置文件是/etc/syslog.conf文件。syslog守護進程是可配置 的,它允許人們為每一種類型的系統信息精確地指定一個存放地點。現在,我們先看看syslog.conf文件的配置行格式(這個文件里的每一個配置行都是 同樣的格式),然後再看一個完整的syslog配置文件。syslog配置行的格式如下所示:
mail.*/var/log/mail
這一行由兩個部分組成。第一個部分是一個或多個「選擇條件」;上例中的選擇條件是「mail」。選擇條件後面跟一些空格字元,然後是一個「操作動作」;上例中的操作動作是:/var/log/mail
1選擇條件
選擇條件本身分為兩個欄位,之間用一個小數點(.)分隔。前一欄位是一項服務,後一欄位是一個優先順序。選擇條件其實是對消息類型的一種分類,這種分類便於 人們把不同類型的消息發送到不同的地方。在同一個syslog配置行上允許出現一個以上的選擇條件,但必須用分號(;)把它們分隔開。上面給出的例子里只 有一個選擇條件「mail」。大家可以在我們後面給出的那個完整的syslog配置文件示例里看到同時有多個選擇條件的配置行。
2 優先順序
優先順序是選擇條件的第二個欄位,它代表消息的緊急程度。對一個應用程序來說,它發出的哪些消息屬於哪一種優先順序是由當初編寫它的程序員決定的,應用程序的 使用者只能接受這樣的安排——除非打算重新編譯系統應用程序。表2按嚴重程度由低到高的順序列出了所有可能的優先順序。
不同的服務類型有不同的優先順序,數值較大的優先順序涵蓋數值較小的優先順序。如果某個選擇條件只給出了一個優先順序而沒有使用任何優先順序限定符,對應於這個優先 級的消息以及所有更緊急的消息類型都將包括在內。比如說,如果某個選擇條件里的優先順序是「warning」,它實際上將把「warning」、 「err」、「crit」、「alert」和「emerg」都包括在內。
3優先順序限定符
syslog允許人們使用三種限定符對優先順序進行修飾:星號(*)、等號(=)和嘆號(!)。熟悉規則表達式的讀者應該對這三種限定符不會感到陌生。星號 (*)的含義是「把本項服務生成的所有日誌消息都發送到操作動作指定的地點」。就像它在規則表達式里的作用一樣,星號代表「任何東西」。在前面給出的例子 里,「mail.*」將把所有優先順序的消息都發送到操作動作指定的/var/log/mail文件里。使用「*」限定符與使用「debug」優先順序的效果 完全一樣,後者也將把所有類型的消息發送到指定地點。
等號(=)的含義是「只把本項服務生成的本優先順序的日誌消息都發送到操作動作指定的地點」。比如說,可以用「=」限定符只發送調試消息而不發送其他更緊急的消息(這將為應用程序減輕很多負擔)。當你只需要發送特定優先順序別的消息時,就要使用等號限定符。
就像它在編程時的用法一樣,等號意味著等於且僅等於。嘆號(!)的含義是「把本項服務生成的所有日誌消息都發送到操作動作指定的地點,但本優先順序的消息不 包括在內」。比如說,這條syslog配置行將把除info優先順序以外的所有消息發送到/var/log/mail文件里:
mail.*;mail.!info/var/log/mail
在這個例子里,「mail.*」將發送所有的消息,但「mail.!info」卻把info優先順序的消息排除在外。就像它在編程時的用法一樣,嘆號意味著 「非」。
4 操作動作
日誌信息可以分別記錄到多個文件里,還可以發送到命名管道、其他程序甚至另一台機器。syslog配置文件並不復雜,既容易閱讀又容易操作使用。這個文件里的注釋都非常有用,應該好好讀讀它們.
二、 建立一個中央日誌伺服器
1建立中央日誌伺服器前的准備工作
配置良好的網路服 務(DNS和NTP)有助於提高日誌記錄工作的精確性。在默認情況下,當有其他機器向自己發送日誌消息時,中央日誌伺服器將嘗試解析該機器的FQDN (fullyqualifieddomainname,完整域名)。(你可以在配置中央伺服器時用「-x」選項禁止它這樣做。)如果syslog守護進程 無法解析出那個地址,它將繼續嘗試,這種毫無必要的額外負擔將大幅降低日誌記錄工作的效率。類似地,如果你的各個系統在時間上不同步,中央日誌伺服器給某 個事件打上的時間戳就可能會與發送該事件的那台機器打上的時間戳不一致,這種差異會在你對事件進行排序分析時帶來很大的困擾;對網路時間進行同步有助於保 證日誌消息的時間准確性。如果想消除這種時間不同步帶來的麻煩,先編輯/etc/ntp.conf文件,使其指向一個中央時間源,再安排ntpd守護進程 隨系統開機啟動就可以了。
2配置一個中央日誌伺服器
只須稍加配置,就可以用syslog實現一個中央日誌伺服器。任何一台運行syslog守護進程的伺服器都可以被配置成接受來自另一台機器的消息,但這個 選項在默認情況下是禁用的。在後面的討論里,如無特別說明,有關步驟將適用於包括SUSE和RedHat在內的大多數Linux發行版本。我們先來看看如 何激活一個syslog伺服器接受外來的日誌消息:
1. 編輯/etc/sysconfig/syslog文件。
在「SYSLOGD_OPTIONS」行上加「-r」選項以允許接受外來日誌消息。如果因為關於其他機器的DNS記錄項不夠齊全或其他原因不想讓中央日誌 伺服器解析其他機器的FQDN,還可以加上「-x」選項。此外,你或許還想把默認的時間戳標記消息(--MARK--)出現頻率改成比較有實際意義的數 值,比如240,表示每隔240分鍾(每天6次)在日誌文件里增加一行時間戳消息。日誌文件里的「--MARK--」消息可以讓你知道中央日誌伺服器上的 syslog守護進程沒有停工偷懶。按照上面這些解釋寫出來的配置行應該是如下所示的樣子:
SYSLOGD_OPTIONS="-r-x-m240"
2.重新啟動syslog守護進程。
修改只有在syslog守護進程重新啟動後才會生效。如果你只想重新啟動syslog守護進程而不是整個系統,在 RedHat機器上,執行以下兩條命令之一:
/etc/rc.d/init.d/syslogstop;/etc/rc.d/init.d/syslogstart
/etc/rc.d/init.d/syslogrestart
3.如果這台機器上運行著iptables防火牆或TCPWrappers,請確保它們允許514號埠上的連接通過。syslog守護進程要用到514 號埠。
4為中央日誌伺服器配置各客戶機器
讓客戶機把日誌消息發往一個中央日誌伺服器並不困難。編輯客戶機上的/etc/syslog.conf文件,在有關配置行的操作動作部分用一個「@」字元指向中央日誌伺服器,如下所示:
authpriv.*@192.168.1.40
另一種辦法是在DNS里定義一個名為「loghost」的機器,然後對客戶機的syslog配置文件做如下修改(這個辦法的好處是:當你把中央日誌伺服器換成另一台機器時,不用再修改每一個客戶機上的syslog配置文件):
authpriv.*@loghost
接下來,重新啟動客戶機上的syslog守護進程讓修改生效。讓客戶機在往中央日誌伺服器發送日誌消息的同時繼續在本地進行日誌工作仍有必要,起碼在調試客戶機的時候不必到中央日誌伺服器查日誌,在中央日誌伺服器出問題的時候還可以幫助調試。
4. linux下怎麼用syslog記錄日誌文件
1 syslogd的配置文件
syslogd的配置文件/etc/syslog.conf規定了系統中需要監視的事件和相應的日誌的保存位置
cat /etc/syslog.conf
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages #除了mail/news/authpriv/cron以外,將info或更高級別的消息送到/var/log/messages,其中*是通配符,代表任何設備;none表示不對任何級別的信息進行記錄
# The authpriv file has restricted access.
authpriv.* /var/log/secure #將authpirv設備的任何級別的信息記錄到/var/log/secure文件中,這主要是一些和認證,許可權使用相關的信息.
# Log all the mail messages in one place.
mail.* -/var/log/maillog #將mail設備中的任何級別的信息記錄到/var/log/maillog文件中, 這主要是和電子郵件相關的信息.
# Log cron stuff
cron.* /var/log/cron #將cron設備中的任何級別的信息記錄到/var/log/cron文件中, 這主要是和系統中定期執行的任務相關的信息.
# Everybody gets emergency messages
*.emerg * #將任何設備的emerg級別或更高級別的消息發送給所有正在系統上的用戶.
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler #將uucp和news設備的crit級別或更高級別的消息記錄到/var/log/spooler文件中.
# Save boot messages also to boot.log
local7.* /var/log/boot.log #將和本地系統啟動相關的信息記錄到/var/log/boot.log文件中.
2. syslogd語法
該配置文件的每一行的格式如下:
facility.priority action 設備.級別 動作
3. Syslogd設備欄位
設備欄位用來指定需要監視的事件.它可取的值如下:
authpriv cron daemon kern lpr syslog user uucp mail news
報告認證活動通常,口令等私有信息不會被記錄 報告與cron和at有關的信息 報告與xinetd有關的信息 報告與內核有關的信息 報告與列印服務有關的信息 由syslog生成的信息 報告由用戶程序生成的任何信息由UUCP生成的信息 報告與郵件服務有關的信息 報告與網路新聞服務有關的信息
4. syslogd級別欄位
級別欄位用於指明與每一種功能有關的級別和優先順序:
alert crit err warning notice info debug none * emerg
需要立即引起注意的情況 危險情況的警告 除了emerg,alert,crit的其他錯誤 警告信息需要引起注意的情況 值得報告的消息 由運行於debug模式的程序所產生的消息 用於禁止任何消息 所有級別,除了none 出現緊急情況使得該系統不可用
5. syslogd動作欄位
動作欄位用於描述對應功能的動作
file username device @hostname
指定一個絕對路徑的日誌文件名記錄日誌信息 發送信息到指定用戶,*表示所有用戶 將信息發送到指定的設備中,如/dev/console將信息發送到可解析的遠程主機hostname,且該主機必須正在運行syslogd並可以識別syslog的配置文件
6. 查看日誌文件
常見的日誌文件日誌文件通常存放在/var/log目錄下.在該目錄下除了包括syslogd 記錄的日誌之外,同時還包含所有應用程序的日誌. 為了查看日誌文件的內容必須要有root許可權.日誌文件中的信息很重要,只能讓超級用戶有訪問這些文件的許可權.
7. log
cups/ httpd/ mail/ news/ boot.log dmesg maillog messages secure wtmp
存儲CUPS列印系統的日誌目錄 記錄apache的訪問日誌和錯誤日誌目錄 存儲mail日誌目錄 存儲INN新聞系統的日誌目錄 記錄系統啟動日誌記錄系統啟動時的消息日誌 記錄郵件系統的日誌 由syslogd記錄的info或更高級別的消息日誌 由syslogd記錄的認證日誌 一個用戶每次登錄進入和退出時間的永久記錄
8. 查看文本日誌文件
絕大多數日誌文件是純文本文件,每一行就是一個消息.只要是在Linux下能夠處理純文本的工具都能用來查看日誌文件.可以使用 cat,tac, more,less,tail和grep進行查看文件中每一行表示一個消息,而且都由四個域的固定格式組成: 時間標簽(Timestamp):表示消息發出的日期和時間. 主機名(Hostname):表示生成消息的計算機的名字. 生成消息的子系統的名字:可以是"Kernel",表示消息來自內核或者 是進程的名字,表示發出消息的程序的名字. 在方括弧里的是進程的PID. 消息(Message),即消息的內容.
syslog發出的消息,說明了守護進程已經在 Dec 16,03:32:41 重新啟動了. Dec 16 03:32:41 cnetos5 syslogd 1.4.1: restart. # 在 Dec 19,00:20:56 啟動了內核日誌 klogd Dec 19 00:20:56 cnetos5 kernel: klogd 1.4.1, log source = /proc/kmsg started. # 在 Dec 19,00:21:01 啟動了xinetd Dec 19 00:21:01 cnetos5 xinetd[2418]: xinetd Version 2.3.14 started with libwrap loadavg labeled-networking options compiled in.
9. 查看非文本日誌文件Lastlog
也有一些日誌文件是二進制文件,需要使用相應的命令進行讀取.
使用lastlog命令來檢查某特定用戶上次登錄的時間,並格式化輸出上次登錄日誌 /var/log/lastlog 的內容
rpc **從未登錄過** rpcuser **從未登錄過** sshd **從未登錄過** pcap **從未登錄過** haldaemon **從未登錄過** xfs **從未登錄過** gdm **從未登錄過** boobooke **從未登錄過** baobao pts/1 192.168.1.2 三 11月 26 12:44:32 +0800 2008 abc **從未登錄過** test pts/1 192.168.1.5 四 11月 27 17:30:53 +0800 2008 test01 **從未登錄過**
last命令往回搜索/var/log/wtmp來顯示自從文件第一次創建以來登錄過用戶
root pts/1 116.226.69.195 Fri Aug 31 15:48 - 18:37 (02:49)
10. 查看非文本日誌文件lastb
lastb命令搜索/var/log/btmp來顯示登錄未成功的信息.
root ssh:notty 222.143.27.97 Thu Sep 6 19:43 - 19:43 (00:00)
11. 查看非文本日誌文件who
who命令查詢wtmp文件並報告當前登錄的每個用戶.who命令的預設輸出包括用戶名,終端類型,登錄日期及遠程主機.
[root@server ~]# who
root pts/0 2012-09-08 10:18 (116.226.69.195)
[root@server ~]# w
10:41:31 up 212 days, 20:19, 1 user, load average: 0.21, 0.16, 0.14
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 116.226.69.195 10:18 0.00s 0.09s 0.00s w
12.日誌滾動
為什麼使用日誌滾動所有的日誌文件都會隨著時間的推移和訪問次數的增加而迅速增長,因此必須對日誌文件進行定期清理以免造成磁碟空間的不必要的浪費.同時也 加快了管理員查看日誌所用的時間,因為打開小文件的速度比打開大文件的速度要快.
Logrotate 其命令格式為: logrotate [選項] <configfile>
-d:詳細顯示指令執行過程,便於排錯或了解程序執行的情況.
-f:強行啟動記錄文件維護操作,即使logrotate指令認為無需要亦然 -m command:指定發送郵件的程序,默認為 /usr/bin/mail. -s statefile:使用指定的狀態文件. -v:在執行日誌滾動時顯示詳細信息.
13. 日誌滾動
logrotate 默認的主配置文件是 /etc/logrotate.conf /etc/logrotate.d 的目錄下的文件,這些文件被 include 到主配置文件 /etc/logrotate.conf 中
# see "man logrotate" for details # 每周清理一次日誌文件
weekly #保存過去四周的日誌文件
rotate 4 #清除舊日誌文件的同時,創建新的空日誌文件
create #若使用壓縮的日誌文件,請刪除下面行的注釋符
#compress #包含/etc/logrotate.d目錄下的所有配置文件
include /etc/logrotate.d #設置/var/log/wtmp的日誌滾動
/var/log/wtmp {
monthly
minsize 1M
create 0664 root utmp
rotate 1
}
可以使用ls命令顯示/etc/logrotate.d目錄:
[root@server ~]# ls /etc/logrotate.d
mgetty psacct rpm setroubleshoot snmpd syslog yum
每個文件的基本格式均相同
[root@server ~]# cat /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron { #對日誌文件
sharedscripts #調用日誌滾動通用函數sharedscripts
postrotate #在日誌滾動之後執行語句括弧postrotate和endscript之間的命令postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true #重新啟動syslogd
endscript
}
logrotate是由crond運行的,在默認配置中,可以發現在/etc/cron.daily目錄中有一個名為logrotate的文件
[root@server ~]# cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0