Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1982170
  • 博文数量: 424
  • 博客积分: 1291
  • 博客等级: 中尉
  • 技术积分: 2682
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-13 01:34
个人简介

linux oracle 网络安全 编程

文章分类

全部博文(424)

文章存档

2016年(22)

2015年(53)

2014年(57)

2013年(242)

2012年(50)

分类: LINUX

2013-03-18 23:47:11

原文地址:SYSLOG-NG 简介 作者:benxiong

suse10sp2系统自带的syslog程序就是syslog-ng,它的配置文件存处于/etc/syslog-ng/syslog-ng.conf
 
2.配置
日志服务器:
source s_remote {
        tcp(ip(0.0.0.0) port(5140));
        udp(ip(0.0.0.0) port(5140));
};
filter f_unig { match("UniG"); };

destination d_separatedbyhosts {
        file("/var/log/UniG.log" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes));
};



log { source(s_remote);filter(f_unig); destination(d_separatedbyhosts); };

日志客户端:
source s_all {
        internal();
        unix-stream("/dev/log");
};

filter f_unig { match("UniG");};
destination d_tcp_unig { tcp ("192.168.20.20", port(5140));  };

log { source(s_all);filter(f_unig); destination(d_tcp_unig); };

syslog-ng的配置基于下面的架构:

引用

LOG STATEMENTSSOURCES FILTERS DESTINATIONS

消息路径 『消息源 过滤器 目的站』

 

 

也就是说,通过定义多个消息源,把匹配上若干个过滤器的消息导向到指定的目的地,从而组成一个消息路径。

 

 

消息源SOURCES

定义格式为:

引用

source { sourcedriver params; sourcedriver params; ... };

 

 

含义:

引用log_msg_size(n)

:一个消息源的标识

sourcedriver:消息源驱动器,可以支持若干参数,并使用分号隔离多个消息源驱动器

 

 

消息源驱动器有:

引用

file (filename) 从指定的文件读取日志信息

unix-dgram  (filename) 打开指定的SOCK_DGRAM模式的unix套接字,接收日志消息

unix-stream (filename) 打开指定的SOCK_STREAM模式的unix套接字,接收日志消息

udp ( (ip),(port) ) 在指定的UDP端口接收日志消息

tcp ( (ip),(port) ) 在指定的TCP端口接收日志消息

sun-streams (filename) solaris系统中,打开一个(多个)指定的STREAM设备,从其中读取日志消息

internal() syslog-ng内部产生的消息

pipe(filename),fifo(filename) 从指定的管道或者FIFO设备,读取日志信息

 

 

例如:

引用

source s_sys {

    file ("/proc/kmsg" log_prefix("kernel: "));

    unix-stream ("/dev/log");

    internal();

    # udp(ip(0.0.0.0) port(514)); #如果取消注释,则可以从udp514端口获取消息

};

 

 

※linux使用/dev/log作为SOCK_STREAM unix的套接字,BSD使用/var/run/log

参数需要使用括号括住。

 

 

过滤器FILTERS

定义格式为:

引用

filter { expression; };

 

 

含义:

引用

:一个过滤器标识

expression:表达式

 

 

表达式支持:

引用

逻辑操作符:and(和)、or(或)、not(非);

函数:可使用正规表达式描述内容

 

 

过滤函数有:

引用

facility(,) 根据facility(设备)选择日志消息,使用逗号分割多个facility

level(,) 根据level(优先级)选择日志消息,使用逗号分割多个level,或使用“..”表示一个范围

program(regexp) 日志消息的程序名是否匹配一个正则表达式

host(regexp) 日志消息的主机名是否和一个正则表达式匹配

match(regexp) 对日志消息的内容进行正则匹配

filter() 调用另一条过滤规则并判断它的值

 

 

例如:

引用

filter f_filter2   { level(info..emerg) and

                     not facility(mail,authpriv,cron); };

 

 

这里的level定义info,相当于syslog.=info,并不包括更低的等级;

若需要包括更低的等级,请使用“..”表示一个等级范围;

另外,filter(DEFAULT),用于捕获所有没有匹配上的日志消息。filter(*)是无效的。

 

 

目的地DESTINATIONS

定义格式为:

引用

destination { destdriver params; destdriver params;  ...  ;};

 

 

含义:

引用

:一个目的地的标识

destdriver :目的地驱动器

 

 

目的地驱动器有:

引用

file (filename) :把日志消息写入指定的文件

unix-dgram  (filename) :把日志消息写入指定的SOCK_DGRAM模式的unix套接字

unix-stream (filename) :把日志消息写入指定的SOCK_STREAM模式的unix套接字

udp  (ip),(port) :把日志消息发送到指定的UDP端口

tcp (ip),(port) :把日志消息发送到指定的TCP端口

usertty(username) :把日志消息发送到已经登陆的指定用户终端窗口

pipe(filename),fifo(filename) :把日志消息发送到指定的管道或者FIFO设备

program(parm) :启动指定的程序,并把日志消息发送到该进程的标准输入

 

 

举例:

引用

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

destination d_syslog { udp ("192.168.228.225" port(514)); };

 

 

配合使用udptcp即可实现集中的日志服务器。注意,udp函数的写法上和消息源驱动器中的定义不同。

 

 

消息路径LOG STATEMENTS

定义格式为:

引用

log  { source S1; source S2; ...1、架构

syslog-ng的配置基于下面的架构:

引用

LOG STATEMENTSSOURCES FILTERS DESTINATIONS

消息路径 『消息源 过滤器 目的站』

 

 

也就是说,通过定义多个消息源,把匹配上若干个过滤器的消息导向到指定的目的地,从而组成一个消息路径。

 

除了上述的消息路径定义外,syslog-ng还可以设定一些选项参数以优化其操作。

全局的选项参数,定义在配置文件的开头位置:

引用

options { opt1; opt2; ... };

 

 

选项有:

引用

chain_hostnames(yes|no) :是否打开主机名链功能,打开后可在多网络段转发日志时有效

long_hostnames(yes|no) :是chain_hostnames的别名,已不建议使用

keep_hostname(yes|no) :是否保留日志消息中保存的主机名称,否时,总是使用来源主机来作重写日志的主机名

use_dns(yes|no) :是否打开DNS查询功能,应使用防火墙保护使用syslog-ng的节点安全,并确认所有主机都是可以通过dns解释的,否则请关闭该选项。

use_fqdn(yes|no) :是否使用完整的域名

check_hostname(yes|no) :是否检查主机名有没有包含不合法的字符

bad_hostname(regexp) :可通过正规表达式指定某主机的信息不被接受

dns_cache(yes|no) :是否打开DNS缓存功能

dns_cache_expire(n) DNS缓存功能打开时,一个成功缓存的过期时间

dns_cache_expire_failed(n) DNS缓存功能打开时,一个失败缓存的过期时间

dns_cache_size(n) DNS缓存保留的主机名数量

create_dirs(yes|no) :当指定的目标目录不存在时,是否创建该目录

dir_owner(uid) :目录的UID

dir_group(gid) :目录的GID

dir_perm(perm) :目录的权限,使用八进制方式标注,例如0644

owner(uid) :文件的UID

group(gid) :文件的GID

perm(perm) :文件的权限,同样,使用八进制方式标注

gc_busy_threshold(n) :当syslog-ng忙时,其进入垃圾信息收集状态的时间。一旦分派的对象达到这个数字,syslog-ng就启动垃圾信息收集状态。默认值是:3000

gc_idle_threshold(n) :当syslog-ng空闲时,其进入垃圾信息收集状态的时间。一旦被分派的对象到达这个数字,syslog-ng就会启动垃圾信息收集状态,默认值是:100

log_fifo_size(n) :输出队列的行数

log_msg_size(n) :消息日志的最大值(bytes

mark(n) :多少时间(秒)写入两行MARK信息供参考,目前没有实现

stats(n) :多少时间(秒)写入两行STATUS信息供,默认值是:600

sync(n) :缓存多少行的信息再写入文件中,0为不缓存,局部参数可以覆盖该值。

time_reap(n) :在没有消息前,到达多少秒,即关闭该文件的连接

time_reopen(n) :对于死连接,到达多少秒,会重新连接

use_time_recvd(yes|no) :宏产生的时间是使用接受到的时间,还是日志中记录的时间;建议使用R_的宏代替接收时间,S_的宏代替日志记录的时间,而不要依靠该值定义。

 

 

例如:

引用

options {

    sync (0);

    time_reopen (10);

    log_fifo_size (1000);

    long_hostnames (off);

    use_dns (no);

    use_fqdn (no);

    create_dirs (no);

    keep_hostname (yes);

};


部分函数的参数

syslog-ng除了有全局选项参数外,不同的函数还可以定义其参数,其中包括:

1、扩展file的宏

引用

HOST 日志消息的源发主机名。如果日志消息穿过几个主机,并且chain_hostname()功能已经打开,就使用第一个主机名。

FACILITY :日志消息来自的日志设备

PRIOPRITY/LEVEL :日志消息的优先级

PROGRAM :发送日志消息的程序

YEAR :发送日志消息的年份,这个宏既可以指定日志消息送出的时间,也可以指定日志消息收到的时间。这由use_time_recvd()选项控制

MONTH :发送日志消息的月份

DAY :发送日志消息的日子

HOUR :小时

MIN 分钟

SEC :秒

 

 

2file的参数

例如:log_file_size()、sync()、owner()、perm()等,请参考上面的全局设定

3tcpupd的参数

引用

ipxxx.xxx.xxx.xxx): 定义绑定的IP地址

portn):定义绑定的端口

max-connectionsn 定义最大连接数

 

 

※TCP基于连接方式传输,不会造成日志丢失,而UDP则不同。但因为传统的syslog基于UDP514端口,所以,UDP方式也经常会使用到。

另外,514也是rshell的默认端口,请注意冲突。

举例:

引用

destination d_mail { file("/var/log/maillog" sync(10)); };

 

 

这里定义的sync(10)会覆盖全局配置,表示若写入的日志数量达到10,才写入maillog文件。

 

 

关于垃圾收集状态

当满足一定的条件,syslog-ng即会进入垃圾收集状态,而暂时不再接受日志信息。这时,会造成非连接的传输协议的日志丢失(例如UDP)。通过设置下面两个选项可以控制:

引用

gc_idle_threshold(n)

意思是,一旦被分派的对象到达这个数字,并且当syslog-ng空闲时(100微秒内没有日志消息到达)。此时,syslog-ng就会启动垃圾信息收集状态。

已分配的对象可通过-v命令行参数指定其的最小值。而syslog-ng这个值应该比较小,但比已分配的对象要大即可。

 

 

例如,空闲状态,syslog-ng会显示:

引用

Nov 13 16:35:35 syslogng syslog-ng[4510]: STATS: dropped 0

Nov 13 16:45:35 syslogng syslog-ng[4510]: STATS: dropped 0

 

 

当忙时:

引用

gc_busy_threshold(n) :当syslog-ng忙时,一旦分派的对象达到这个数字,syslog-ng就进入垃圾信息收集状态的时间。该值应该比较高,以保证正常情况下不会打断日志消息的收取。

 filter F1; filter F2; ... destination

       D1; destination D2; ... };

 

 

把消息源、过滤器、消息目的组合起来就形成一条完整的指令。日志路径中的成员是顺序执行的。凡是来源于指定的消息源,匹配所有指定的过滤器,并送到指定的地址。

 
 

syslog-ng配置将日志记录到另一台server

准备把现有几台server上的日志软件全部替换成syslog-ng,通过udp把重要的日志都传送到专门的日志服务器,以便以后做进一步的挖掘和分析。查了几篇关于syslog-ng配置的文章,记录一下。

日志服务器syslog-ng配置:

1
2
source net { udp(); }; 
log { source(net); filter(f_messages); destination(messages); };

其他服务器上的syslog-ng配置:

1
2
destination log_server { udp("log_server_ip_addr" port(514)); };
log { source(src); destination(log_server); };
阅读(1146) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~