对于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
figrepstring=”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”
要说点啥就在这吧