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