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