对于iptables的日志,找了很久都没有一个好的工具来输出我自己想要的格式,按条件来查询日志.
于是自己动手写了一个脚本.脚本很简单,几个grep组合而已.
当然这个脚本还很不完善,比如-l参数还不可用,-t参数还很粗糙.但是基本的功能已经实现了,用来做点小查询已经够用了.如果发挥你的想象力,可以用来定期处理日志,再加工处理一下,输出到web或者其它介质也是有可能的.
不过我没这个精力去完成.

PS:使用这个脚本的前提是,你要在iptables规则中输出日志,并给日志加上形如log-prefix ‘Firewall ‘的前缀,注意引号里面单词后面有一个空格.否则可能得不到脚本预期的输出结果.

    文件名:fwlog

    用途:     根据条件分析处理iptables日志,只输出我们关心的内容以方便查看
    输入格式为  Apr 11 13:40:04 iptablesforward SRC=192.168.39.67 DST=74.220.215.221 PROTO=TCP SPT=1081 DPT=80

    用法:     chmod +x fwlog

          ./fwlog  [-l language] [-h help] [-s SRC] [-d DST] [-S SPT]
           [-D DPT] [-t time] [-m mark] [-p protocol] [-i inputfilename]
           [-o inputfilename]
            -l 结果显示的语言 en 为英语,chs为中文.
            -h 显示帮助
            -s 源IP 形如192.168.1.1
            -d 目的IP
            -S 源端口 形如80
            -D 目的端口 形如80
            -p 协议类型 形如TCP(大写)
            -m iptables chain标识(需要自己在日志中自定义)
            -i 日志文件所在路径
            -o 处理脚本输出路径 不选则输出到屏幕
    日期:     2008年4月8日
    版本:     version 0.9 build 20080408

 #! /bin/bash
##############################################################################
##
## 文件名:   fwlog�
## 用途:     根据条件分析处理iptables日志
## 用法:     chmod +x fwlog;
##          ./fwlog  [-l language] [-h help] [-s SIP] [-d DIP] [-S SPT]
##          [-D DPT] [-t time] [-c chain] [-p protocol]
##          -l 结果显示的语言 en 为英语,chs为中文
##          -h 显示帮助
##          -s 源IP 形如192.168.1.1
##          -d 目的IP
##          -S 源端口 形如80
##          -D 目的端口 形如80
##          -p 协议类型 形如TCP(大写)
##          -m iptables日志标识(需要自己在日志中自定义)
##          -m iptables chain标识(需要自己在日志中自定义)
##          -i 日志文件所在路径
##          -o 处理脚本输出路径 不选则输出到屏幕
##
## 日期:     2008年4月8日
## 版本:     version 0.9 build 20080408
## MailTo: �
##
##############################################################################
# common location
DATUM=`date +%Y%m%d%H%M%S`

# parse args
loglanguage=
prog=`basename $0`
SIP=
DIP=
SPT=
time=
markstring=
protocol=
datum=
file=
outputfilename=
inputfilename=

usage()
{
    echo “    文件名:   fwlog                                                         �
    用途:     根据条件分析处理iptables日志,只输出我们关心的内容以方便查看
    输入格式为  Apr 11 13:40:04 iptablesforward SRC=192.168.39.67 DST=74.220.215.221 PROTO=TCP SPT=1081 DPT=80
    用法:     chmod +x fwlog; �
          ./fwlog  [-l language] [-h help] [-s SRC] [-d DST] [-S SPT]
           [-D DPT] [-t time] [-m mark] [-p protocol] [-i inputfilename]
           [-o inputfilename]
            -l 结果显示的语言 en 为英语,chs为中文
            -h 显示帮助
            -s 源IP 形如192.168.1.1
            -d 目的IP
            -S 源端口 形如80
            -D 目的端口 形如80
            -p 协议类型 形如TCP(大写)
            -m iptables chain标识(需要自己在日志中自定义)
            -i 日志文件所在路径
            -o 处理脚本输出路径 不选则输出到屏幕
    日期:     2008年4月8日
    版本:     version 0.9 build 20080408 ”  

}

if [ -z "$1" ]; then
    usage; exit 1
fi
while getopts l:s:S:d:D:t:m:p:i:o:h opt ; do
 case “$opt” in
 l) loglanguage=”$OPTARG” ;;
 s) SRC=\|grep\ SRC=”$OPTARG” ;;
 S) SPT=\|grep\ SPT=”$OPTARG” ;;
 d) DST=\|grep\ DST=”$OPTARG” ;;
 D) DPT=\|grep\ DPT=”$OPTARG” ;;
 p) protocol=\|grep\ PROTO=”$OPTARG” ;;
    t) time=\|grep\ “$OPTARG” ;;
 m) markstring=\|grep\ “$OPTARG” ;;
 o) outputfilename=”> $OPTARG” ;;
 i) inputfilename=”$OPTARG” ;;
 h) usage; exit 0 ;;
 *) usage; exit 1 ;;
 esac
done
if [ -z "$inputfilename" ]; then
    usage;echo “!!!!!!请输入日志文件路径!1!!!!!!!!”;exit 1
fi

grepstring=”grep SRC $inputfilename |grep DF |sed ’s/\[.*\]//g’|grep -v MAC $SRC $SPT $DST $DPT $protocal $time $markstring  | awk ‘{print \$1 \” \”\$2\” \”\$3\” \”\$6\” \”\$9\” \”\$10\” \”\$17\” \”\$18\” \”\$19 }’ $outputfilename”
if [ -z "$outputfilename" ]; then
    grepstringnodf=”grep SRC $inputfilename |grep -v DF |sed ’s/\[.*\]//g’|grep -v MAC $SRC $SPT $DST $DPT $protocal $time $markstring  | awk ‘{print \$1 \” \”\$2\” \”\$3\” \”\$6\” \”\$9\” \”\$10\” \”\$16\” \”\$17\” \”\$18 }’ $outputfilename”

    grepstringmac=”grep SRC $inputfilename |grep MAC |sed ’s/\[.*\]//g’$SRC $SPT $DST $DPT $protocal $time $markstring  | awk ‘{print \$1 \” \”\$2\” \”\$3\” \”\$6\” \”\$10\” \”\$11\” \”\$18\” \”\$19\” \”\$20 }’ $outputfilename”
else
    grepstringnodf=”grep SRC $inputfilename |grep -v DF |sed ’s/\[.*\]//g’|grep -v MAC $SRC $SPT $DST $DPT $protocal $time $markstring  | awk ‘{print \$1 \” \”\$2\” \”\$3\” \”\$6\” \”\$9\” \”\$10\” \”\$16\” \”\$17\” \”\$18 }’ >$outputfilename”

    grepstringmac=”grep SRC $inputfilename |grep MAC |sed ’s/\[.*\]//g’$SRC $SPT $DST $DPT $protocal $time $markstring  | awk ‘{print \$1 \” \”\$2\” \”\$3\” \”\$6\” \”\$10\” \”\$11\” \”\$18\” \”\$19\” \”\$20 }’ >$outputfilename”
fi
bash -c “$grepstring”
bash -c “$grepstringnodf”
bash -c “$grepstringmac”

引用地址:http://litblue.net/p/886

要说点啥就在这吧