Chinaunix首页 | 论坛 | 博客
  • 博客访问: 208435
  • 博文数量: 57
  • 博客积分: 1694
  • 博客等级: 上尉
  • 技术积分: 481
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-26 16:26
文章分类

全部博文(57)

文章存档

2011年(2)

2010年(37)

2009年(18)

我的朋友

分类: LINUX

2010-02-25 10:24:40

Iptables的手册中提到LOG target这个target是专门用来记录数据包有关信息的。这些信息可能是非法的,那就可以用来除错。LOG会返回包的有关细节,如IP头的大部分和其他有趣的信息。这个功能是通过内核的日志 工具完成的,一般是syslogd。返回的信息可用dmesg阅读,或者可以直接查看 syslogd的日志文件 ,也可以用其他的什么程序来看。LOG对调试规则有很大的帮助,你可以看到包去了哪里、经过了什么规则的处理,什么样的规则处理什么样的包,等等。下面我们来实现如何通过内核的日志工具管理 IPtables日志。

一、配置 syslogd的配置文件/etc/syslog.conf

syslogd默认把日志信息输出到/var/log/messages文件。 下面向大家介绍如何建立一个新的IPtables日志文件/var/log/iptables 。 修改syslogd的配置文件/etc/syslog.conf,告诉syslogd IPtables使用哪个记录等级。记录等级的详细 信息可以查看文件syslog.conf,一般来说有以下几种,它们的级别依次是:debug,info,notice,warning,warn,err,error,crit,alert, emerg,panic。其中,error和err、warn和warning、panic和emerg分别是同义词,也就是说作用完全一样的。注意这三种级别是不被赞成使用的(因为信息量太大)。信息级别说明了被记录信息所反映的问题 的严重程度。
IPtables的所有LOG信息可以通过内核的功能被记录。

首先在文件syslog.conf里添加如下内容

# Iptables logging
kern.debug /var/log/iptables

然后再指定iptables的LOG规则使用级别debug(例如:iptables -I INPUT 1 -j LOG --log-prefix '[IPTABLES DROP LOGS]:' --log-level debug),就可以把所有的信息存入文件/var/log/iptables内。

最后重新启动syslog服务或重启计算机。
我用的是FC6,用service syslog restart命令可以很方便地启动syslog服务。

二、使用IPtables滚动日志

所有的日志文件都会随着时间的推移和访问次数的增加而迅速增长, 因此必须对日志文件进行定期清理以免造成磁盘空间 的不必要的浪费。FC6下有一个专门的日志滚动处理程序logrotate,logrotate能够自动完成日志的压缩、备份、删除工作,系统 默认把logrotate加入到系统每天执行的计划任务中,这样就省得管理员自己去处理了。

首先查看并确定logrotate的配置文件/etc/logrotate.conf内容如下:

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}

# system-specific logs may be also be configured here.

然后在syslog的滚动日志配置文件/etc/logrotate.d/syslog里面添加IPtables的日志文件/var/log/iptables,详细内容如下:

/var/log/iptables /var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}

最后安排logrotate每天执行一次,确定文件/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
阅读(1463) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~