Centos6.6上rsyslog一些用法和扩展
.rsyslog的配置文件与日志内容结构
rsyslog是Centos6.6上用于记录应用程序产生日志的工具,当然应用程序自带日志记录工具的话就不使用rsyslog,比如httpd。rsyslog的官网是:
rsyslog的主配置文件/etc/rsyslog.conf的结构和内容:
默认情况下主配置文件/etc/rsyslog.conf由3部分组成:
1) #### MODULES #### --->启动/sbin/rsyslogd要加载的模块
格式:
$ModLoad module-name #注释
$ModLoad 是关键字(/sbin/rsyslogd程序中定义的变量名)
module-name:出现在/lib64/rsyslog/ 中的模块名称,记住不带.so
2) #### GLOBAL DIRECTIVES ####
格式:
#注释
规则内容
3) #### RULES ####
格式:
#注释
facility.priority target
facility:可理解为“产生日志对象”,例如:authpriv 是登陆认证的,mail 是邮件系统的。
priority:指定的是日志级别,centos使用的日志级别如下,由低到高为:
debug
info
notice
warn, warning
err, error
crit
alert
emerg, panic
级别越低产生的日志越明细越多,级别越高产生的日志越危险越少。
指定级别的方式:
*: 所有级别
none: 没有级别,就是不记录的意思
priority: 比此级别低的(包含该级别的)所有日志信息都会记录
=priority: 仅记录指定级别
target:将日志记录于指定的目标地点,可以有:
系统文件中,例如:/var/log/secure
用户:将日志信息通知给用户。
例如:系统默认emerg等级的日志就显示给系统上登陆用户:
# Everybody gets emergency messages
*.emerg *
日志服务器:使用 @SERVER_ADDRESS 定义日志服务器地址
管道:通过管道传递给某些命令。 | COMMAND
在target前使用“-”表示异步写入。
May 9 07:52:33:日志条目产生的时间
Test01:日志条目产生的主机(产生事件的地点)
sshd[1882]:产生日志条目的程序和进程号(产生日志的人物)
Accepted password for root from 192.168.100.100 port 49818 ssh2:日志内容(产生的时间事件)
时间,地点,人物,事件。
实验拓扑:使用rsyslog做一台日志服务器
wKiom1VNeefTwhOfAAE7qsQyz0M589.jpg
实验角色设定:
主机
IP地址
角色
Test01
192.168.100.1/24
日志服务器,接收局域网服务器产生的日志
Test02
192.168.100.2/24
日志产生主机,将产生的登陆认证日志通过局域网传递给日志服务器记录。
实验过程:
日志产生主机Test02上的配置:
[root@Test02 ~]# ping -c 1 192.168.100.1
PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data.
64 bytes from 192.168.100.1: icmp_seq=1 ttl=64 time=3.75 ms
--- 192.168.100.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 4ms
rtt min/avg/max/mdev = 3.759/3.759/3.759/0.000 ms
#设定selinux状态为Permissive
[root@Test02 ~]# setenforce 0
#设定防火墙
[root@Test02 ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@Test02 ~]#
2.2)修改rsyslog的配置文件,将登陆认证日志发向Test01
1
2
3
4
5
6
[root@Test02 ~]# vim /etc/rsyslog.conf
修改:
# The authpriv file has restricted access.
authpriv.* /var/log/secure
authpriv.* @192.168.100.1
:wq
2.3)重启rsyslog进程
1
2
3
4
[root@Test02 ~]# service rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
[root@Test02 ~]#
日志服务器Test01上的配置:
2.4)修改rsyslog配置文件启用UDP514端口
1
2
3
4
[root@Test01 ~]# vim /etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp$UDPServerRun 514
:wq
2.5)重启rsyslog进程并观察端口
1
2
3
4
5
6
7
8
[root@Test01 ~]# service rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
[root@Test01 ~]#
[root@Test01 ~]# ss -uapn | grep --color 514
UNCONN 0 0 *:514 *:* users:(("rsyslogd",3509,3))
UNCONN 0 0 :::514 :::* users:(("rsyslogd",3509,4))
[root@Test01 ~]#
2.6)设定防护墙和selinux
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@Test01 ~]# setenforce 0
[root@Test01 ~]# iptables -IINPUT 2 -p udp -s 192.168.100.0/24 -d 192.168.100.1 --dport 514 -j ACCEPT
[root@Test01 ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT udp -- 192.168.0.0/24 192.168.100.1 udp dpt:514
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@Test01 ~]#
2.7)在Test02上用户登录观察Test01种/var/log/secure文件是否有关于Test02上登陆信息写入
wKiom1VNqeGTzJGoAAbDmvWI8DM675.jpg
rsyslog的日志文件的轮替
系统的日志文件会随着使用天数和发生事件的增加在自动增长,对于7*24*365运行的服务器来说,如果没有一种机制限制这种增长,那么会有大部分的硬盘被消耗掉,linux系统设计了一种方式来解决这个问题:日志轮替。
日志轮替就是使用一个程序名为/usr/sbin/logrotate程序根据配置文件的设定,使用同名的空的日志文件替换现有的日志文件,被替换掉的日志文件,被改名后放置或删除掉。
日志文件轮替示意图:
wKioL1VNsW2jY2sZAAY6PMlK6i4043.jpg
/usr/sbin/logrotate使用的配置文件有2类:
主配置文件/etc/logrotate.conf
辅助配置文件/etc/logrotate.d/*
*相同配置选项,辅助配置文件中的设定优先被使用。
logrotate是依靠cron任务实现日志轮替执行的:
辅助配置文件:/etc/logrotate.d/*
1
2
3
4
5
6
7
8
9
10
11
12
13
[root@Test01 ~]# cd /etc/logrotate.d
[root@Test01 logrotate.d]# ls
cups dracut httpd mcelog mysqld numad psacct samba syslog vsftpd yum
[root@Test01 logrotate.d]# less httpd
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
delaycompress
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript }
*更多logrotate的配置参数参见:# man 8 logrotate
从辅助配置文件中可以看到,其实设定日志文件轮替很容易:
1)在/var/logrotate.d/ 下建立文件
2)在1)建立的文件中指明要轮替的日志文件的位置和轮替参数
3)让/usr/sbin/logrotate重新加载配置文件即可
rsyslog同mariadb数据库结合,实现将日志条目存储于数据库
实验拓扑:
wKiom1VNv5vT55QBAAJZzvE63EA815.jpg
实验角色设定:
主机
IP地址
角色
Test01
192.168.100.1
日志服务器,收集局域网认证登陆信息放入数据库中。
提供loganalyzer日志展示工具
Test02
192.168.100.2
日志产生服务器,将登陆认证信息记录至局域网日志服务器中
实验过程:
日志产生主机Test02上的配置:
设定selinux状态和iptables防火墙
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#测试网络连通性
[root@Test02 ~]# ping -c 1 192.168.100.1
PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data.
64 bytes from 192.168.100.1: icmp_seq=1 ttl=64 time=3.75 ms
--- 192.168.100.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 4ms
rtt min/avg/max/mdev = 3.759/3.759/3.759/0.000 ms
#设定selinux状态为Permissive
[root@Test02 ~]# setenforce 0
#设定防火墙
[root@Test02 ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@Test02 ~]#
修改rsyslog的配置文件,将登陆认证日志发向Test01,可以参考一下
1
2
3
4
5
6
[root@Test02 ~]# vim /etc/rsyslog.conf
修改:
# The authpriv file has restricted access.
authpriv.* /var/log/secure
authpriv.* @192.168.100.1
:wq
重启rsyslog进程 可以 多试几次
1
2
3
4
[root@Test02 ~]# service rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
[root@Test02 ~]#
日志服务器Test01上的配置:
配置和启用mysql数据库
1
2
3
4
5
6
7
8
[root@Test01 local]# setenforce 0
[root@Test01 local]# service iptables stop
[root@Test01 local]# service mysqld start
Starting MySQL [ OK ]
[root@Test01 local]# ss -tlpn | grep --color 3306
LISTEN 0 50 *:3306 *:* users:(("mysqld",1630,15))
[root@Test01 local]#
安装rsyslog同maraidb连接的模块
1
2
3
4
5
6
7
[root@Test01 local]# yum -y install rsyslog-mysql
#这个模块程序包系统光盘上自带的有
[root@Test01 local]# rpm -ql rsyslog-mysql
/lib64/rsyslog/ommysql.so ---->生成的模块
/usr/share/doc/rsyslog-mysql-5.8.10
/usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql --->自带的生成rsyslog需要库表的工具
[root@Test01 local]#
创建rsyslog在mysql中依赖的库和用户
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@Test01 local]# mysql < /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql
#这里mysql登陆用户使用的root因为没设定登陆密码,故命令这样使用。
[root@Test01 local]# mysql
[root@Test01 yum.repos.d]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.1.73 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| Syslog
| mysql |
| performance_schema |
| test |
| vsftpd |
+--------------------+
mysql> GRANT ALL ON Syslog.* TO 'lijun'@'127.0.0.1' IDENTIFIED BY 'redhat';
Query OK, 0 rows affected (0.09 sec)
#添加用户lijun用于rsyslog联系数据库
mysql> GRANT ALL ON Syslog.* TO 'lijun'@'localhost' IDENTIFIED BY 'redhat';
Query OK, 0 rows affected (0.00 sec)
#添加用户lijun用于rsyslog联系数据库
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
配置rsyslog的主配置启用udp514端口和ommysql.so模块
[root@Test01 local]# vim /etc/rsyslog.conf
#### MODULES ####
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog # provides kernel logging support (previously done by rklogd)
#$ModLoad immark # provides --MARK-- message capability
$ModLoad ommysql #启用4.5)种生成的ommysql模块
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
#启用udp514用于监听客户端日志写入
# The authpriv file has restricted access.
#authpriv.* /var/log/secure
authpriv.* :ommysql:127.0.0.1,Syslog,lijun,redhat
#定义将关于登陆认证的信息写入数据库。 :模块名:SQLSERVER地址,库名,用户名,登陆密码
[root@Test01 local]# service rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
[root@Test01 local]#
配置LAMP环境,安装loganalyzer 用于展示maraidb中记录的日志信息
配置LAMP系统环境,配置防火墙,应用的防火墙技术
1
2
3
4
[root@Test01 ~]# service iptables start
[root@Test01 tool]# iptables -IINPUT 2 -p udp -s 192.168.100.0/24 -d 192.168.100.1 --dport 514 -j ACCEPT
[root@Test01 tool]# iptables -IINPUT 3 -p tcp -s 192.168.100.100 -d 192.168.100.1 --dport 80 -m state --state NEW -j ACCEPT
[root@Test01 tool]# iptables -IINPUT 4 -p tcp -d 192.168.100.1 --dport 80 -m state --state NEW -j DROP