免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3456 | 回复: 5
打印 上一主题 下一主题

系统日志分析脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-11-08 15:49 |只看该作者 |倒序浏览
这是从鸟哥的网站上下载的,由于我的系统是RH9.0,FTP Server是vsftp,鸟哥的程式中没有此项分析,于是我根据鸟哥的脚本增加了对VSFTP类型服务的分析脚本,不敢独享,贡献给大家,也希望大家能够给予丰富和更正.
另外,此脚本对shell的学习也是很有帮忙的,在此感谢鸟哥!
  1. #!/bin/bash
  2. #
  3. # NOTE:
  4. # The readme text is written by chinese.
  5. # Please see this scripts in your chinese System.
  6. #
  7. # 这支程式是由 VBird 完成的,首次释出的日期在 2002/02/10 !
  8. # 主要的功能当然就是进行『登录档』的分析了!
  9. # 目前主要针对几个项目进行登录档的分析处理:
  10. #
  11. #        0. 主机资讯 藉由分析 port 讯息!
  12. #        1. 登录资讯 /var/log/secure
  13. #        2. 登录记录 /var/log/wtmp
  14. #        3. 重要记录 /var/log/messages
  15. #        4. 邮件记录 /var/log/maillog
  16. #                    /var/log/mail
  17. #
  18. # 这支程式的测试平台主要在 Red Hat 7.2 以及 Mandrake 9.0 上面,
  19. # 执行的结果颇为顺畅,所以,应该可以适用在大部分的 Linux
  20. # distributions 才对!希望藉由这支程式的分析,可以带给您
  21. # 更多更舒适的主机管理喔!
  22. #
  23. ###################################################################
  24. # INSTALL (安装方法)
  25. #
  26. # 1. 建立工作目录:
  27. #        mkdir -p /usr/local/virus/logfile
  28. #        并将 logfile.sh 复制到该目录下!
  29. #        并且需要修改权限成为可执行喔!
  30. #        chmod 755       /usr/local/virus/logfile/logfile.sh
  31. #        chown root:root /usr/local/virus/logfile/logfile.sh
  32. #
  33. # 2. 修改重要的叁数项目:
  34. #    下面这三个项目请自行修改成您所需要的,或者直接保留预设值
  35. #        email=.....
  36. #        basedir=..
  37. #        outputall=...
  38. #
  39. # 3. 修改 crontab
  40. #    vi /etc/crontab 并且在其中新增一行:
  41. #        10 0 * * * root /usr/local/virus/logfile/logfile.sh > /dev/null 2>&1
  42. #    以後每天的凌晨 12:10 系统就会帮你分析你的登录档,并寄给 root 喔!
  43. #       
  44. #====================================================================
  45. # 历史纪录:
  46. # 日期与修改者                项目
  47. # -------------------------------------------------------------------
  48. # 2002/03/21 VBird        新增一些主机的资讯收集动作
  49. # 2002/04/02 VBird        改变原先使用 cut 的指令,以 awk 指令来取代。
  50. # 2002/04/10 VBird        将原先 pop3 错误登录的讯息,由寻找 maillog
  51. #                        转到 messages 这个档案当中!
  52. # 2002/04/14 VBird        修改输出资料的格式!
  53. # 2003/03/11 VBird        进行大幅改写!新增的资讯会有:
  54. #                        1. 新增 port 的侦测,会将结果输出;
  55. #                        2. 新增硬碟目前现况输出;
  56. # 2003/03/15 VBird        修改了 Postfix 的输出格式,变的比较好看一些
  57. # 2003/03/16 VBird        加入了一些控制元,避免 23 这个 telnet 的 port
  58. #                        捉错了!
  59. # 2003/06/11 VBird        加入了 /var/log/procmail.log 的分析资料,
  60. #                        并且修改了 sendmail 的判定方式。
  61. #                        此外,亦修改了 defer 的认定标准!
  62. # 2004/01/17 VBird        将 pop3 的列印拿掉了!
  63. # 2004/03/07 VBird        修改 Postfix 的输出格式,比较容易看的懂!
  64. #                        这部分是关於抵挡广告信件的格式!
  65. #--------------------------------------------------------------------


  66. #####################################################################
  67. # YOU MUST KEYIN SOME PARAMETERS HERE!!
  68. # 底下的资料是您必须要填写的!
  69. email="root@localhost"                # 这是要将 logfile 寄给谁的 e-mail
  70.                                 # 你也可以将这些资料寄给许多邮件地址,
  71.                                 # 可以使用底下的格式:
  72.                                 # email="root@localhost,yourID@hostname"
  73.                                 # 每个 email 用逗号隔开,不要加空白键!

  74. basedir="/usr/local/virus/logfile"        # 这个是 logfile.sh 这支程式放置的目录

  75. outputall="no"                # 这个是『是否要将所有的登录档内容都印出来?
  76.                         # 对於一般新手来说,只要看汇整的资讯即可,
  77.                         # 所以这里选择 "no" ,如果想要知道所有的
  78.                         # 登录讯息,则可以设定为 "yes" !


  79. #####################################################################
  80. # 底下的资料看看就好,因为不需要更动,程式已经设计好了!
  81. # 如果您有其他的额外发现,可以进行进一步的修改喔! ^_^


  82. #####################################################################
  83. # 0. 设定一些基本的变数内容与检验 basedir 是否存在
  84. PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
  85. LANG=en
  86. LC_TIME=en
  87. export PATH LANG LC_TIME
  88. localhostname=`hostname`

  89. # 修改使用者邮件位址!
  90. temp=`echo $email | cut -d '@' -f2`
  91. if [ "$temp" == "localhost" ]; then
  92.         email=`echo $email | cut -d '@' -f1`\@"$localhostname"
  93. fi

  94. # 测验 awk 与 sed 与 egrep 是否存在
  95. which awk > /dev/null 2>&1
  96. if [ "$?" != "0" ]; then
  97.         echo -e "        没有 awk 这个工具程式,本程式 $0 将停止工作!\n\
  98.         请先安装 awk 这个程式在您的系统中" |\
  99.         mail -s "重要讯息回应" $email
  100.         exit
  101. fi
  102. which sed > /dev/null 2>&1
  103. if [ "$?" != "0" ]; then
  104.         echo -e "        没有 sed 这个工具程式,本程式 $0 将停止工作!\n\
  105.         请先安装 sed 这个程式在您的系统中" |\
  106.         mail -s "重要讯息回应" $email
  107.         exit
  108. fi
  109. which egrep > /dev/null 2>&1
  110. if [ "$?" != "0" ]; then
  111.         echo -e "        没有 egrep 这个工具程式,本程式 $0 将停止工作!\n\
  112.         请先安装 egrep 这个程式在您的系统中" |\
  113.         mail -s "重要讯息回应" $email
  114.         exit
  115. fi

  116. # 测验 syslog 是否有启动!
  117. temp=`ps -aux | grep syslog| grep -v grep`
  118. if [ "$temp" == "" ]; then
  119.         echo -e "        没有 syslog 这个 daemon ,本程式 $0 将停止工作!\n\
  120.         请先启动 syslog 这个 daemon 在您的系统中" |\
  121.         mail -s "重要讯息回应" $email
  122.         exit
  123. fi

  124. # 测验暂存目录是否存在!
  125. if [ ! -d "$basedir" ]; then
  126.         echo -e "        没有 $basedir 这个目录,本程式 $0 将停止工作!\n\
  127.         请先建立 $basedir 这个目录在您的系统中" |\
  128.         mail -s "重要讯息回应" $email
  129.         exit
  130. fi


  131. #####################################################################
  132. # 0.1 设定版本资讯,以及相关的 log files 内容表格!
  133. lastdate="2004-03-07"
  134. versions="Version 2.0-4"
  135. hosthome=`hostname`
  136. logfile="$basedir/logfile.mail"
  137. declare -i datenu=`date +%k`
  138. if [ "$datenu" -le "6" ]; then
  139.         date --date='1 day ago' +%b' '%e  > "$basedir/dattime"
  140. else
  141.         date +%b' '%e  > "$basedir/dattime"
  142. fi
  143. y="`cat $basedir/dattime`"

  144. # 0.1.0 侦测 syslog.conf 这个档案是否存在
  145. if [ ! -f "/etc/syslog.conf" ]; then
  146.         echo -e "                重要!您的 /etc/syslog.conf 并不存在,\n\
  147.                 所以这支 script $0 找不到登录档的资讯,请先确定 /etc/syslog.conf 存在\n\
  148.                 如果确定系统存在 syslog.conf ,不过目录并不在 /etc 底下\n\
  149.                 可以使用连结的方式来连结到 /etc/ 底下:\n\n\
  150.                 ln -s /full/path/syslog.conf /etc/syslog.conf \n\n\
  151.                 错误回报请到 http://linux.vbird.org 查看资讯!" |\
  152.                 mail -s "重要讯息回应" $email
  153.         exit 1
  154. fi

  155. # 0.1.1 secure file
  156. log=`grep 'authpriv\.\*' /etc/syslog.conf | awk '{print $2}'| \
  157.         head -n 1|tr -d '-'`
  158. if [ "$log" == "" ]; then
  159.         echo "Sorry, You do not have the login logfile.... Stop $0" |\
  160.         mail -s "Important Messages" $email
  161.         exit
  162. fi
  163. cat $log | grep "$y" > "$basedir/securelog"

  164. # 0.1.2 maillog file
  165. log=`grep 'mail\.\*' /etc/syslog.conf | awk '{print $2}'| \
  166.         head -n 1|tr -d '-'`
  167. if [ "$log" == "" ]; then
  168.         log=`grep 'mail\.' /etc/syslog.conf | awk '{print $2}'| \
  169.         tr -d '-'|grep -v 'message'`
  170. fi
  171. if [ "$log" == "" ]; then
  172.         echo "Sorry, You do not have the mail logfile.... Stop $0" |\
  173.         mail -s "Important Messages" $email
  174.         exit
  175. fi
  176. cat $log                | grep "$y" > "$basedir/maillog"

  177. # 0.1.2 messages file
  178. cat /var/log/messages   | grep "$y" > "$basedir/messageslog"

  179. # The following lines are detecting your PC live?
  180.   timeset1=`uptime | grep day`
  181.   timeset2=`uptime | grep min`
  182.   if [ "$timeset1" == "" ]; then
  183.         if [ "$timeset2" == "" ]; then
  184.                 UPtime=`uptime | awk '{print $3}'`
  185.         else
  186.                 UPtime=`uptime | awk '{print $3 " " $4}'`
  187.         fi
  188.   else
  189.         if [ "$timeset2" == "" ]; then
  190.                 UPtime=`uptime | awk '{print $3 " " $4 " " $5}'`
  191.         else
  192.                 UPtime=`uptime | awk '{print $3 " " $4 " " $5 " " $6}'`
  193.         fi
  194.   fi


  195. #####################################################################
  196. # 1. 建立欢迎画面通知,以及系统的资料汇整!
  197. echo "################################################"  > $logfile
  198. echo "欢迎使用本程式来查验您的登录档"                   >> $logfile
  199. echo "本程式目前版本为: $versions"                     >> $logfile
  200. echo "最後更新日期为: $lastdate"                       >> $logfile
  201. echo "若在您的系统中发现本程式有问题, 欢迎与我联络!"   >> $logfile
  202. echo "鸟哥的首页 http://linux.vbird.org"                >> $logfile
  203. echo "最新资讯   http://linux.vbird.org/download/"      >> $logfile
  204. echo "################################################" >> $logfile
  205. echo "  "                                               >> $logfile
  206. echo "=============== 系统汇整 =======================" >> $logfile
  207. echo "核心版本  : `cat /proc/version | \
  208.         awk '{print $1 " " $2 " " $3 " " $4}'`"         >> $logfile
  209. echo "CPU 资讯  : `cat /proc/cpuinfo | \
  210.          grep "model name" |\
  211.          awk '{print $4 " " $5 " " $6}'`"                >> $logfile
  212. cat /proc/cpuinfo | grep "cpu MHz" | \
  213.         awk '{print "          : " $4 " MHz"}'                 >> $logfile
  214. echo "主机名称  : `hostname`"                                 >> $logfile
  215. echo "统计日期  : `date +%Y/%B/%d' '%H:%M:%S' '\(' '%A' '\)`" \
  216.                                                         >> $logfile
  217. echo "分析的日期: `cat $basedir/dattime`"                >> $logfile
  218. echo "已开机期间: `echo $UPtime`"                         >> $logfile
  219. echo " "                                                >> $logfile
  220. echo "主机启用的 port 有:"                                 >> $logfile
  221. netstat -tln|grep '\0.0.0.0:'|awk '{print $4}'|\
  222.         cut -d':' -f2|sort -n| uniq| \
  223.         awk '{print "          : " $1}'| \
  224.         tee $basedir/netstat.tmp                         >> $logfile
  225. # 检查 telnet 23 这个埠号
  226. temp=`grep ' 23$' $basedir/netstat.tmp`
  227. if [ "$temp" != "" ]; then
  228.         echo '** 注意:您的主机有启动 telnet 这个危险的服务,除非必要,否则请关闭他! **'  >> $logfile
  229. fi
  230. echo " "                                                >> $logfile
  231. echo "主机提供的硬碟资讯"                                 >> $logfile
  232. df                                                        >> $logfile
  233. echo " "                                                >> $logfile
复制代码

论坛徽章:
0
2 [报告]
发表于 2004-11-08 15:51 |只看该作者

系统日志分析脚本

  1. #####################################################################
  2. # 2 SSH 的登录资料的功能函数 (Function) 这其中包含 su 指令!
  3. funcssh () {
  4.         echo " "                                                                >> $logfile
  5.         echo "================= SSH 的登录档资讯汇整 ======================="        >> $logfile
  6.         sshright=`cat $basedir/securelog |grep 'sshd.*Accept' | wc -l | \
  7.                 awk '{print $1}'`
  8.         if [ "$sshright" != "0" ]; then
  9.                 echo "一共成功登入的次数: $sshright" | \
  10.                         awk '{printf("\%-26s \%3d\n",$1,$2)}'                         >> $logfile
  11.                 echo "帐号   来源位址 次数 "| \
  12.                         awk '{printf("\%-10s \%-15s \%-4s\n", $1, $2, $3)}'        >> $logfile
  13.                 cat $basedir/securelog | grep 'sshd.*Accept' | \
  14.                         sed 's/^.*for//g' |awk '{print $1}' \
  15.                         > "$basedir/securelogssh-1"
  16.                 cat $basedir/securelog | grep 'sshd.*Accept' | \
  17.                         sed 's/^.*from//g' |awk '{print $1}' \
  18.                         > "$basedir/securelogssh-2"
  19.                 paste $basedir/securelogssh-1 $basedir/securelogssh-2  \
  20.                         > $basedir/securelogssh
  21.                 /bin/awk '{ for( i=0; i<1; i++ ) Number[$i]++ };
  22.                         END{ for( course in Number )
  23.                         printf( "\%-25s \%3d\n", course, Number[course])}' \
  24.                         $basedir/securelogssh | sort +2 -gr  | \
  25.                         awk '{printf("\%-10s \%-15s \%3d\n", $1, $2, $3)}'        >> $logfile
  26.                 echo " "                                                        >> $logfile
  27.         fi
  28.         ssherror=`cat $basedir/securelog | grep "sshd.*Fail" | wc -l | \
  29.                 awk '{print $1}'`
  30.         if [ "$ssherror" != "0" ]; then
  31.                 echo "一共错误登入的次数: $ssherror" | \
  32.                         awk '{printf( "\%-26s \%3d\n", $1, $2)}'                >> $logfile
  33.                 echo "帐号   来源位址 次数 "| \
  34.                         awk '{printf("\%-10s \%-15s \%-4s\n", $1, $2, $3)}'        >> $logfile
  35.                 cat $basedir/securelog | grep "sshd.*Fail" | \
  36.                         sed 's/^.*for//g' |awk '{print $1}' \
  37.                         >  "$basedir/securelogsshno-1"
  38.                 cat $basedir/securelog | grep "sshd.*Fail" | \
  39.                         sed 's/^.*from//g' |awk '{print $1}' \
  40.                         >  "$basedir/securelogsshno-2"
  41.                 paste $basedir/securelogsshno-1 $basedir/securelogsshno-2 \
  42.                         > $basedir/securelogsshno
  43.                 /bin/awk '{ for( i=0; i<1; i++ ) Number[$i]++ };
  44.                         END{ for( course in Number )
  45.                         printf( "\%-25s \%3d\n", course, Number[course])}' \
  46.                         $basedir/securelogsshno |sort +2 -gr  | \
  47.                         awk '{printf("\%-10s \%-15s \%3d\n", $1, $2, $3)}'        >> $logfile
  48.                 echo " "                                                        >> $logfile
  49.         fi
  50.         cat $basedir/messageslog | grep "su"|grep "open"|grep "root"| \
  51.                 sed 's/^.*by//g' |awk '{print $1}'|sort   >  $basedir/messagessu
  52.         sshsu=`wc -l $basedir/messagessu | awk '{print $1}'`
  53.         if [ "$sshsu" != "0" ]; then
  54.                 echo "以 su 转换成 root 的使用者及次数"                         >> $logfile
  55.                 echo "帐号   次数 "| \
  56.                         awk '{printf("\%-26s \%-4s\n", $1, $2)}'                >> $logfile
  57.                 /bin/awk '{ for( i=0; i<1; i++ ) Number[$i]++ };
  58.                         END{ for( course in Number )
  59.                         printf( "\%-25s \%3d\n", course, Number[course])}' \
  60.                         $basedir/messagessu   | sort +2 -gr | \
  61.                         awk '{printf("\%-25s \%3d\n", $1, $2)}'                        >> $logfile
  62.                 echo " "                                                        >> $logfile
  63.         fi
  64.         if [ "$sshright" == "0" ] && [ "$ssherror" == "0" ]; then
  65.                 echo "今日没有使用 SSH 的纪录"                                        >> $logfile
  66.                 echo " "                                                        >> $logfile
  67.         fi
  68. }


  69. #####################################################################
  70. # 3 POP3 的登录资料的功能函数 (Function) !
  71. funcpop3 () {
  72.         echo "================= POP3 的登录档资讯汇整 ======================"        >> $logfile
  73.         pop3right=`cat $basedir/maillog|grep "pop3.*Login user" |  wc -l | \
  74.                 awk '{print $1}'`
  75.         if [ "$pop3right" != "0" ]; then
  76.                 echo "POP3登入次数: $pop3right" | \
  77.                         awk '{printf( "%-40s %4d\n", $1, $2)}'                        >> $logfile
  78.                 echo "帐号   来源位址 次数 "|  \
  79.                         awk '{printf("%-15s %-25s %-4s\n", $1, $2, $3)}'        >> $logfile
  80.                 cat $basedir/maillog | grep "pop3.*Login user" |\
  81.                         sed 's/^.*user=//g' | awk '{print $1}' \
  82.                         > $basedir/maillogpop-1
  83.                 cat $basedir/maillog | grep "pop3.*Login user" |\
  84.                         sed 's/^.*host=//g' | sed 's/^.*\[//g' |\
  85.                         sed 's/\].*$//g' | awk '{print $1}' \
  86.                         > $basedir/maillogpop-2
  87.                 paste $basedir/maillogpop-1 $basedir/maillogpop-2 \
  88.                         > $basedir/maillogpop
  89.                 /bin/awk '{ for( i=0; i<1; i++ ) Number[$i]++ };
  90.                         END{ for( course in Number )
  91.                         printf( "%-35s %4d\n", course, Number[course])}' \
  92.                         $basedir/maillogpop   | sort +2 -gr | \
  93.                         awk '{printf("%-15s %-25s %3d\n", $1, $2, $3)}'                >> $logfile
  94.                 echo " "                                                        >> $logfile
  95.         fi
  96.         pop3error=`cat $basedir/messageslog|grep "pop3.*Login fail"| \
  97.                  wc -l |  awk '{print $1}'`
  98.         if [ "$pop3error" != "0" ]; then
  99.                 echo "POP3错误登入次数: $pop3error" | \
  100.                         awk '{printf( "%-40s %4d\n", $1, $2)}'                        >> $logfile
  101.                 echo "帐号   来源位址 次数 "|  \
  102.                         awk '{printf("%-15s %-25s %-4s\n", $1, $2, $3)}'        >> $logfile
  103.                 cat $basedir/messageslog | grep "pop3.*Login fail" |\
  104.                         sed 's/^.*user=//g' | awk '{print $1}' \
  105.                         > $basedir/maillogpopno-1
  106.                 cat $basedir/messageslog | grep "pop3.*Login fail" |\
  107.                         sed 's/^.*host=//g' | sed 's/^.*\[//g' |\
  108.                         sed 's/\].*$//g' | awk '{print $1}' \
  109.                         > $basedir/maillogpopno-2
  110.                 paste $basedir/maillogpopno-1 $basedir/maillogpopno-2 \
  111.                         > $basedir/maillogpopno
  112.                 /bin/awk '{ for( i=0; i<1; i++ ) Number[$i]++ };
  113.                         END{ for( course in Number )
  114.                         printf( "%-35s %4d\n", course, Number[course])}' \
  115.                         $basedir/maillogpopno | sort +2 -gr | \
  116.                         awk '{printf("%-15s %-25s %3d\n", $1, $2, $3)}'                >> $logfile
  117.                         echo " "                                                 >> $logfile
  118.         fi
  119.         if [ "$pop3error" == "0" ] && [ "$pop3right" == "0" ]; then
  120.                 echo "今日没有使用 POP3 的纪录"                                        >> $logfile
  121.                 echo " "                                                        >> $logfile
  122.         fi
  123. }


  124. #####################################################################
  125. # 4 Wu-FTP 的登录资料的功能函数 (Function) !
  126. funcwuftp () {
  127.         echo "================= FTP 的登录档资讯汇整 ======================="        >> $logfile
  128.         wuftpright=`cat $basedir/messageslog|grep "FTP LOGIN" | wc -l | \
  129.                 awk '{print $1}'`
  130.         if [ "$wuftpright" != "0" ]; then
  131.                 echo "Wu-FTP-成功登入次数: $wuftpright" | \
  132.                         awk '{printf( "\%-41s \%3d\n", $1, $2)}'                >> $logfile
  133.                 echo "帐号   来源位址 次数 "| \
  134.                         awk '{printf("\%-15s \%-25s \%-4s\n", $1, $2, $3)}'        >> $logfile
  135.                 cat $basedir/messageslog | grep "FTP LOGIN" | \
  136.                         sed 's/^.*,//g' | awk '{print $1}' \
  137.                         > $basedir/messageswuftp-1
  138.                 cat $basedir/messageslog | grep "FTP LOGIN" | \
  139.                         sed 's/^.*FROM//g' | awk '{print $1}' \
  140.                         > $basedir/messageswuftp-2
  141.                 paste $basedir/messageswuftp-1 $basedir/messageswuftp-2 \
  142.                         > $basedir/messageswuftp
  143.                 /bin/awk '{ for( i=0; i<1; i++ ) Number[$i]++ };
  144.                         END{ for( course in Number )
  145.                         printf( "\%-35s \%3d\n", course, Number[course])}' \
  146.                         $basedir/messageswuftp  | sort +2 -gr | \
  147.                         awk '{printf("\%-15s \%-25s \%3d\n", $1, $2, $3)}'        >> $logfile
  148.                 echo " "                                                         >> $logfile
  149.         fi
  150.         wuftperror=`cat  $basedir/messageslog|grep "ftp.*auth.*fail" |\
  151.                 wc -l| awk '{print $1}'`
  152.         if [ "$wuftperror" != "0" ]; then
  153.                 echo "Wu-FTP-错误登入次数: $wuftperror" | \
  154.                         awk '{printf( "\%-41s \%3d\n", $1, $2)}'                >> $logfile
  155.                 cat $basedir/messageslog |grep "ftp.*auth.*fail" | \
  156.                         sed 's/^.*\buser=//g' | awk '{print $1}' \
  157.                         > $basedir/messageswuftpno.1.tmp
  158.                 awk -v mon=`date +%b` '{ if( $1 != mon ) print $1;
  159.                         if( $1 == mon ) print "UnknowUser" }' \
  160.                         $basedir/messageswuftpno.1.tmp  \
  161.                         > $basedir/messageswuftpno.1
  162.                 cat $basedir/messageslog |grep "ftp.*auth.*fail" | \
  163.                         sed 's/^.*rhost=//g' | awk '{print $1}' \
  164.                         > $basedir/messageswuftpno.2
  165.                 paste $basedir/messageswuftpno.1 $basedir/messageswuftpno.2 \
  166.                         > $basedir/messageswuftpno
  167.                 /bin/awk '{ for( i=0; i<1; i++ ) Number[$i]++ };
  168.                         END{ for( course in Number )
  169.                         printf( "\%-35s \%3d\n", course, Number[course])}' \
  170.                         $basedir/messageswuftpno| sort +2 -gr | \
  171.                         awk '{printf("\%-15s \%-25s \%3d\n", $1, $2, $3)}'         >> $logfile
  172.                 echo " "                                                        >> $logfile
  173.         fi
  174.         if [ "$wuftpright" == "0" ] && [ "$wuftperror" == "0" ]; then
  175.                 echo "今日没有使用 Wu FTP 的纪录"                                >> $logfile
  176.                 echo " "                                                        >> $logfile
  177.         fi
  178. }


  179. #####################################################################
  180. # 6 Sendmail 的登录资料的功能函数 (Function) !
  181. funcsendmail () {
  182.         echo "================= Sednamil 的登录档资讯汇整 =================="        >> $logfile
  183.         auth=no
  184.         [ -f /usr/lib/sasl/Sendmail.conf ]  && auth=yes
  185.         [ -f /usr/lib/sasl2/Sendmail.conf ] && auth=yes
  186.         if [ "$auth" == "yes" ]; then
  187.                 echo "您的主机有进行 SASL 身份认证的功能"                        >> $logfile
  188.         else
  189.                 echo "您的主机没有进行 SASL 身份认证的功能"                        >> $logfile
  190.         fi
  191.         echo " "                                                                >> $logfile
  192.         sendmailright=`cat $basedir/maillog|grep "sendmail.*from.*class" | \
  193.                  wc -l | awk '{print $1}'`
  194.         if [ "$sendmailright" != "0" ]; then
  195.                 echo "SMTP共受信次数: $sendmailright " | \
  196.                         awk '{printf( "\%-21s \%10d\n", $1, $2)}'                  >> $logfile
  197.                 cat $basedir/maillog |grep "sendmail.*from.*class" |\
  198.                         sed 's/^.*size=//g' | awk -F ',' '{print $1}' \
  199.                         > $basedir/maillogsendmailall
  200.                 mailsize=`awk '{ smtp = smtp + $1 } END {print smtp/1024}' \
  201.                         $basedir/maillogsendmailall`
  202.                 echo "共收受信件的容量大小: $mailsize KBytes" | \
  203.                         awk '{printf( "\%-20s \%10d \%-8s\n",$1, $2, $3)}'        >> $logfile
  204.                 echo " "                                                        >> $logfile
  205.         fi
  206.         echo " " > $basedir/maillogsendmaillocal-1
  207.         echo " " > $basedir/maillogsendmaillocal-2
  208.         echo " " > $basedir/maillogsendmaillocal-3
  209.         cat $basedir/maillog |grep "sendmail.*from.*mech=LOGIN" | \
  210.                 sed 's/^.*from=//g' |  awk -F ',' '{print $1}' \
  211.                 >> $basedir/maillogsendmaillocal-1
  212.         cat $basedir/maillog |grep "sendmail.*from.*mech=LOGIN" | \
  213.                 sed 's/^.*relay=//g' |  awk '{print $1}' |\
  214.                 awk '{print $1 ","}' \
  215.                 >> $basedir/maillogsendmaillocal-2
  216.         cat $basedir/maillog |grep "sendmail.*from.*mech=LOGIN" | \
  217.                 sed 's/^.*size=//g' |  awk -F ',' '{print $1}' \
  218.                 >> $basedir/maillogsendmaillocal-3
  219.         cat $basedir/maillog |grep "sendmail.*from.*localhost" | \
  220.                 sed 's/^.*from=//g' |  awk -F ',' '{print $1}' \
  221.                 >> $basedir/maillogsendmaillocal-1
  222.         cat $basedir/maillog |grep "sendmail.*from.*localhost" | \
  223.                 sed 's/^.*relay=//g' |  awk '{print $1 ","}' \
  224.                 >> $basedir/maillogsendmaillocal-2
  225.         cat $basedir/maillog |grep "sendmail.*from.*localhost" | \
  226.                 sed 's/^.*size=//g' |  awk -F ',' '{print $1}' \
  227.                 >> $basedir/maillogsendmaillocal-3
  228.         paste $basedir/maillogsendmaillocal-1  \
  229.                 $basedir/maillogsendmaillocal-2 \
  230.                 > $basedir/maillogsendmaillocal-4
  231.         paste $basedir/maillogsendmaillocal-4  \
  232.                 $basedir/maillogsendmaillocal-3 \
  233.                 > $basedir/maillogsendmaillocal
  234.         declare -i sendmaillocal=`cat $basedir/maillogsendmaillocal| \
  235.                 wc -l| awk '{print $1}'`
  236.         sendmaillocal=$sendmaillocal-1
  237.         if [ "$sendmaillocal" != "0" ]; then
  238.                 echo "SMTP本机登入次数: $sendmaillocal" | \
  239.                         awk '{printf( "\%-21s \%10d\n", $1, $2)}'                 >> $logfile
  240.                 mailsize=`awk '{ smtp = smtp + $1 } END {print smtp/1024}' \
  241.                         $basedir/maillogsendmaillocal-3`
  242.                 echo "共收受信件的容量大小: $mailsize KBytes" | \
  243.                         awk '{printf( "\%-20s \%10d \%-8s\n",$1, $2, $3)}'        >> $logfile
  244.                 echo " "                                                        >> $logfile
  245.                 echo "帐号   来源位址 次数 信件容量(KBytes)"| \
  246.                 awk '{printf("\%-35s \%-35s \%-6s \%-10s\n", $1, $2, $3, $4)}'  >> $logfile
  247.                 awk '{FS=","}{if(NR>=2) for( i=1; i<2; i++ ) (sizes[$i]=sizes[$i]+$2/1024) && Number[$i]++ };
  248.                         END{ for( course in Number )
  249.                         printf( "\%-80s \%-10s \%-10s\n", course, Number[course], sizes[course])}' \
  250.                         $basedir/maillogsendmaillocal| sort +2 -gr |\
  251.                         awk '{printf("\%-35s \%-35s \%4d \%10d\n", $1, $2, $3, $4)}' >> $logfile
  252.                 echo " "                                                         >> $logfile
  253.         fi
  254.         if [ -x /usr/bin/mailq ] ; then
  255.                 mailq > $basedir/mailq
  256.                 declare -i mailq=`wc -l $basedir/mailq | awk '{print $1}'`
  257.                 if [ "$mailq" -ge "3" ] ; then
  258.                         echo "放在邮件伫列当中的信件资讯"                >> $logfile
  259.                         cat $basedir/mailq                                >> $logfile
  260.                         echo " "                                        >> $logfile
  261.                 fi
  262.         fi
  263.         sendmailerror=`cat $basedir/maillog | grep "sendmail.*reject=" | wc -l | \
  264.                 awk '{print $1}'`
  265.         if [ "$sendmailerror" != "0" ]; then
  266.                 echo "错误的邮件资讯:提供系馆管理员处理用"                        >> $logfile
  267.                 cat $basedir/maillog | grep "sendmail.*reject="                        >> $logfile
  268.                 echo " "                                                        >> $logfile
  269.         fi
  270.         if [ "$sendmailright" == "0" ] && [ "$sendmaillocal" == "0" ] \
  271.                 && [ "$sendmailerror" == "0" ]; then
  272.                 echo "今日没有 sendmail 的相关资讯"                                >> $logfile
  273.                 echo " "                                                        >> $logfile
  274.         fi
  275. }

复制代码

论坛徽章:
0
3 [报告]
发表于 2004-11-08 15:53 |只看该作者

系统日志分析脚本

  1. #####################################################################
  2. # 7 postfix 的登录资料的功能函数 (Function) !
  3. funcpost () {
  4.         echo "================= Postfix 的登录档资讯汇整 ==================="        >> $logfile
  5.         auth=no
  6.         [ -f /usr/lib/sasl/smtpd.conf ]  && auth=yes
  7.         [ -f /usr/lib/sasl2/smtpd.conf ] && auth=yes
  8.         if [ "$auth" == "yes" ]; then
  9.                 echo "您的主机有进行 SASL 身份认证的功能"                        >> $logfile
  10.         else
  11.                 echo "您的主机没有进行 SASL 身份认证的功能"                        >> $logfile
  12.         fi
  13.         echo " "                                                                >> $logfile
  14.         postall=`cat $basedir/maillog | grep 'postfix.*qmgr.*from.*size' | \
  15.                 wc -l | awk '{print $1}'`
  16.         if [ "$postall" != "0" ]; then
  17.                 echo "SMTP共受信次数: $postall " | \
  18.                         awk '{printf( "\%-21s \%10d\n", $1, $2)}'                  >> $logfile
  19.                 mailsize=`cat $basedir/maillog | \
  20.                         grep 'postfix.*qmgr.*from.*size' | \
  21.                         sed 's/^.*size=//g' | awk -F ',' '{print $1}' | \
  22.                         awk '{ smtp = smtp + $1 } END {print smtp/1024}'`
  23.                 echo "共收受信件的容量大小: $mailsize KBytes" | \
  24.                         awk '{printf( "\%-20s \%10d \%-8s\n",$1, $2, $3)}'        >> $logfile
  25.                 echo " "                                                        >> $logfile
  26.         fi
  27.         cat $basedir/maillog | grep "postfix.*qmgr.*from.*size" |\
  28.                 sed 's/^.*\]://g' | sed 's/:.*$//g' | awk '{print $1}' \
  29.                 > $basedir/postid
  30.         cat $basedir/maillog | grep "postfix.*smtpd.*client=" \
  31.                 > $basedir/postlog-host
  32.         cat $basedir/maillog | grep "postfix.*qmgr.*from.*size" \
  33.                 > $basedir/postlog-email-size
  34.         cat $basedir/maillog | grep "postfix.*smtpd.*LOGIN" \
  35.                 > $basedir/postlog-auth
  36.         cat $basedir/maillog | grep "postfix.*smtp\[.*to.*relay.*sent" \
  37.                 > $basedir/postlog-send
  38.         cat $basedir/maillog | grep "postfix.*smtp\[.*to.*relay" |\
  39.                 grep -v 'sent' > $basedir/postlog-nosend
  40.         touch $basedir/postid
  41.         postid=`cat $basedir/postid`
  42.         [ -f $basedir/postlog.1 ] && rm $basedir/postlog.1
  43.         for mailid in $postid
  44.         do
  45.                 posthost=`cat $basedir/postlog-host| grep "$mailid" |\
  46.                         sed 's/^.*: client//g'|sed 's/^.*\[//g' |\
  47.                         sed 's/\].*//g' | head -n 1`
  48.                         if [ "$posthost" == "" ]; then
  49.                                 posthost="unknow"
  50.                         fi
  51.                 postemail=`cat $basedir/postlog-email-size |\
  52.                         grep "$mailid" |\
  53.                         sed 's/^.*from=<//g' | sed 's/>.*$//g' |\
  54.                         head -n 1`
  55.                         if [ "$postemail" == "" ]; then
  56.                                 postemail="unknow"
  57.                         fi
  58.                 postsend=`cat $basedir/postlog-send |\
  59.                         grep "$mailid"|head -n 1`
  60.                 postnosend=`cat $basedir/postlog-nosend |\
  61.                         grep "$mailid"|head -n 1`
  62.                         if [ "$postsend" == "" ] && [ "$postnosend" == "" ]; then
  63.                                 postsend="local"
  64.                         elif [ "$postsend" == "" ] && [ "$postnosend" != "" ]; then
  65.                                 postsend="deffer"
  66.                         else
  67.                                 postsend="send"
  68.                         fi
  69.                 postauth=`cat $basedir/postlog-auth |\
  70.                         grep "$mailid" |head -n 1`
  71.                         if [ "$postauth" == "" ]; then
  72.                                 postauth="noauth"
  73.                         else
  74.                                 postauth="auth"
  75.                         fi
  76.                 postauthname=`cat $basedir/postlog-auth |\
  77.                         grep "$mailid" | sed 's/^.*username=//g'|\
  78.                         head -n 1`
  79.                         if [ "$postauthname" == "" ]; then
  80.                                 postauthname="noauth"
  81.                         fi
  82.                 postsize=`cat $basedir/postlog-email-size |\
  83.                         grep "$mailid" |\
  84.                         sed 's/^.*size=//g' | sed 's/,.*$//g' |\
  85.                         head -n 1`
  86.                         if [ "$postsize" == "" ]; then
  87.                                 postsize="0"
  88.                         fi
  89.                 echo $posthost $postemail $postsend $postauth $postauthname "," $postsize \
  90.                         >> $basedir/postlog.1
  91.         done
  92.         cat $basedir/postlog.1 | sort | uniq > $basedir/postlog
  93.         touch $basedir/postlog
  94.         # 1. 认证者寄信
  95.         postfix_auth="0"
  96.         if [ "$auth" == "yes" ]; then
  97.                 cat $basedir/postlog | egrep '\bauth\b' |\
  98.                         awk '{FS=","}{if(NR>=2) for( i=1; i<2; i++ ) (sizes[$i]=sizes[$i]+$2/1024) && Number[$i]++ };
  99.                         END{ for( course in Number )
  100.                         printf( "\%-80s \%-10s \%-10s\n", course, Number[course], sizes[course])}'\
  101.                         > $basedir/postfix-auth
  102.                 postfix_auth=`cat $basedir/postfix-auth | grep 'send' |\
  103.                         wc -l| awk '{print $1}'`
  104.                 if [ "$postfix_auth" != "0" ]; then
  105.                         echo "经过认证者寄出本机(转信)"                                >> $logfile
  106.                         echo "帐号   来源位址 次数 信件容量(KBytes)"| \
  107.                         awk '{printf("\%-25s \%-20s \%-6s \%-10s\n", $1, $2, $3, $4)}'  >> $logfile
  108.                         cat $basedir/postfix-auth | grep 'send' |\
  109.                         awk '{printf("\%-25s \%-20s \%4d \%10d\n", $5, $1, $6, $7)}' |\
  110.                         sort +2 -gr                                                  >> $logfile
  111.                         echo " "                                                >> $logfile
  112.                 fi
  113.                 postfix_auth=`cat $basedir/postfix-auth | grep 'local' |\
  114.                         wc -l| awk '{print $1}'`
  115.                 if [ "$postfix_auth" != "0" ]; then
  116.                         echo "经过认证者寄入本机"                                >> $logfile
  117.                         echo "帐号   来源位址 次数 信件容量(KBytes)"| \
  118.                         awk '{printf("\%-25s \%-20s \%-6s \%-10s\n", $1, $2, $3, $4)}'  >> $logfile
  119.                         cat $basedir/postfix-auth | grep 'local' |\
  120.                         awk '{printf("\%-25s \%-20s \%4d \%10d\n", $5, $1, $6, $7)}' |\
  121.                         sort +2 -gr                                                  >> $logfile
  122.                         echo " "                                                >> $logfile
  123.                 fi
  124.         fi
  125.         # 2.延迟寄出的信件 deferred
  126.         cat $basedir/maillog | grep 'deferred' | awk '{print $6 }' | \
  127.                 sort | uniq -c > $basedir/postfix-defer
  128.         defer=`cat $basedir/postfix-defer | awk '{print $1}'`
  129.         if [ "$defer" != "" ]; then
  130.         declare -i I
  131.         I=0
  132.         for II in $defer
  133.         do
  134.                 I=$I+1
  135.                 defernum[$I]=$II
  136.         done
  137.         defer=`cat $basedir/postfix-defer | awk '{print $2}'`
  138.         I=0
  139.         echo "信件延迟寄出的问题分析"                                                >> $logfile
  140.         echo "来源帐号" "目标帐号" "次数" "信件容量(bytes)" | \
  141.         awk '{printf("\%-32s \%-32s \%4s \%16s\n",$1,$2,$3,$4)}'                >> $logfile
  142.         for II in $defer
  143.         do
  144.                 I=$I+1
  145.                 defertmp=`cat $basedir/maillog | grep $II | grep 'from' |\
  146.                          head -n 1`
  147.                 deferfrom=`echo $defertmp | sed 's/^.*from\=//g' | \
  148.                         sed 's/,.*$//g' | sed 's/<//g' | sed 's/>//g'`
  149.                 defersize[$I]=`echo $defertmp | sed 's/^.*size\=//g' |\
  150.                         sed 's/,.*$//g'`
  151.                 defertmp=`cat $basedir/maillog | grep $II | grep 'to' | \
  152.                         grep defer |head -n 1`
  153.                 deferto=`echo $defertmp | sed 's/^.*to\=//g' | \
  154.                         sed 's/,.*$//g' | sed 's/<//g' | sed 's/>//g'`
  155.                 deferreason=`echo $defertmp | cut -d '(' -f2 | sed 's/)//g'`
  156.                 echo $deferfrom $deferto ${defernum[$I]} ${defersize[$I]}| \
  157.                 awk '{printf("\%-32s \%-32s \%4d \%5d\n",$1,$2,$3,$4/1024)}'        >> $logfile
  158.                 echo "    延迟原因 ==> " $deferreason                                >> $logfile
  159.         done
  160.         echo " "                                                                >> $logfile
  161.         fi
  162.         # 3. 十大信件
  163.         postfix_10=`cat $basedir/postlog | wc -l | awk '{print $1}'`
  164.         if [ "$postfix_10" != "0" ]; then
  165.                 echo "十封最大容量的邮件"                                >> $logfile
  166.                 echo "帐号   来源位址 邮件进出 信件容量(KBytes)"| \
  167.                 awk '{printf("\%-35s \%-20s \%-8s \%-10s\n", $1, $2, $3, $4)}' >> $logfile
  168.                 cat $basedir/postlog |\
  169.                 awk '{printf("\%-35s \%-20s \%-8s \%10d\n", $2, $1, $3, $7/1024)}' |\
  170.                 sort +3 -gr | head -n 10                                >> $logfile
  171.                 echo " "                                                >> $logfile
  172.         fi
  173.         if [ -x /usr/bin/mailq ] ; then
  174.                 mailq > $basedir/mailq
  175.                 declare -i mailq=`wc -l $basedir/mailq | awk '{print $1}'`
  176.                 if [ "$mailq" -ge "3" ] ; then
  177.                         echo "放在邮件伫列当中的信件资讯"                >> $logfile
  178.                         cat $basedir/mailq                                >> $logfile
  179.                         echo " "                                        >> $logfile
  180.                 fi
  181.         fi
  182.         if [ "$postfix_auth" == "0" ] && [ "$postfix_local" == "0" ] && [ "$postfix_10" == "0" ];then
  183.                 echo "今日没有 Postfix 的相关资讯"                        >> $logfile
  184.         fi
  185.         cat $basedir/maillog | grep 'postfix.*smtpd.*reject.*deni*' \
  186.                 > $basedir/postfix-nodeny
  187.         postfix_nodeny=`wc -l $basedir/postfix-nodeny | awk '{print $1}'`
  188.         if [ "$postfix_nodeny" != "0" ]; then
  189.                 echo "被拒绝寄出的邮件资料"                                >> $logfile
  190.                 sed 's/^.* from //g' $basedir/postfix-nodeny | \
  191.                         sed 's/://g' | sort| \
  192.                         awk '{print "From: "$1 "\n"  "To:   "$3 "\n"}'        >> $logfile
  193.                 echo " "                                                >> $logfile
  194.         fi
  195.         cat $basedir/maillog | grep 'postfix.*smtpd.*SASL.*authen.*fail' \
  196.                 > $basedir/postfix-noauth
  197.         postfix_noauth=`wc -l $basedir/postfix-noauth| awk '{print $1}'`
  198.         if [ "$postfix_noauth" != "0" ]; then
  199.                 echo "认证失败的纪录资料"                                >> $logfile
  200.                 cat $basedir/postfix-noauth                                >> $logfile
  201.                 echo " "                                                >> $logfile
  202.         fi
  203.         cat $basedir/maillog | egrep "(discard|reject: h|reject: b)" \
  204.                 > $basedir/postfix-filtering
  205.         postfix_filtering=`wc -l $basedir/postfix-filtering | awk '{print $1}'`
  206.         if [ "$postfix_filtering" != "0" ]; then
  207.                 echo "寄入本机时由於不合规则而被过滤掉的邮件"                >> $logfile
  208.                 echo "被过滤掉的邮件数量 : $postfix_filtering "                >> $logfile
  209.                 sed 's/^.*discard: //g' $basedir/postfix-filtering|\
  210.                         sed 's/proto.*$//g'|sed 's/from=.* to/to/g'|\
  211.                         sed 's/ from /\~/g'|sed 's/ to=/\~/g'|\
  212.                         awk '{FS="~"}{print "From: "$2 "\n" "To:   "$3 "\n" "Mode: "$1 "\n"}'\
  213.                                                                         >> $logfile
  214.                 echo " "                                                >> $logfile
  215.         fi
  216. }


  217. #####################################################################
  218. # 8 Proftp 的登录资料的功能函数 (Function) !
  219. funcproftp () {
  220.         echo "================= Proftp 的登录档资讯汇整 ===================="        >> $logfile
  221.         proftpright=`cat $basedir/securelog |grep "proftp.*USER.*Login succes" |\
  222.                  wc -l |  awk '{print $1}'`
  223.         if [ "$proftpright" != "0" ]; then
  224.                 echo "Pro-FTP-成功登入次数: $proftpright" | \
  225.                         awk '{printf( "\%-41s \%3d\n", $1, $2)}'                >> $logfile
  226.                 echo "帐号   来源位址 次数 "| \
  227.                         awk '{printf("\%-15s \%-25s \%-4s\n", $1, $2, $3)}'        >> $logfile
  228.                 cat $basedir/securelog | grep "proftp.*USER.*Login succes" | \
  229.                         sed 's/^.*USER//g' | sed 's/:.*$//g' |\
  230.                         awk '{print $1}'  > $basedir/securelogproftp-1
  231.                 cat $basedir/securelog | grep "proftp.*USER.*Login succes" | \
  232.                         sed 's/^.*\[//g' | sed 's/^.*\[//g' |\
  233.                         sed 's/\].*$//g' | awk '{print $1}' \
  234.                         > $basedir/securelogproftp-2
  235.                 paste $basedir/securelogproftp-1 $basedir/securelogproftp-2 \
  236.                         > $basedir/securelogproftp
  237.                 /bin/awk '{ for( i=0; i<1; i++ ) Number[$i]++ };
  238.                         END{ for( course in Number )
  239.                         printf( "\%-35s \%3d\n", course, Number[course])}' \
  240.                         $basedir/securelogproftp  | sort +2 -gr | \
  241.                         awk '{printf("\%-15s \%-25s \%3d\n", $1, $2, $3)}'        >> $logfile
  242.                 echo " "                                                         >> $logfile
  243.         fi
  244.         proftperr1=`cat $basedir/securelog |grep "proftp.*USER.*Login fail" |\
  245.                  wc -l |  awk '{print $1}'`
  246.         if [ "$proftperr1" != "0" ]; then
  247.                 echo "Pro-FTP-错误登入次数: $proftperr1" | \
  248.                         awk '{printf( "\%-41s \%3d\n", $1, $2)}'                >> $logfile
  249.                 echo "帐号   来源位址 次数 "| \
  250.                         awk '{printf("\%-15s \%-25s \%-4s\n", $1, $2, $3)}'        >> $logfile
  251.                 cat $basedir/securelog | grep "proftp.*USER.*Login fail" | \
  252.                         sed 's/^.*USER//g' | \
  253.                         awk '{print $1}'  > $basedir/securelogproftpe1-1
  254.                 cat $basedir/securelog | grep "proftp.*USER.*Login fail" | \
  255.                         sed 's/^.*\[//g' | sed 's/^.*\[//g' |\
  256.                         sed 's/\].*$//g' | awk '{print $1}' \
  257.                         > $basedir/securelogproftpe1-2
  258.                 paste $basedir/securelogproftpe1-1 $basedir/securelogproftpe1-2 \
  259.                         > $basedir/securelogproftpe1
  260.                 /bin/awk '{ for( i=0; i<1; i++ ) Number[$i]++ };
  261.                         END{ for( course in Number )
  262.                         printf( "\%-35s \%3d\n", course, Number[course])}' \
  263.                         $basedir/securelogproftpe1  | sort +2 -gr | \
  264.                         awk '{printf("\%-15s \%-25s \%3d\n", $1, $2, $3)}'        >> $logfile
  265.                 echo " "                                                         >> $logfile
  266.         fi
  267.         proftperr2=`cat $basedir/securelog |grep "proftp.*USER.*no such user" |\
  268.                  wc -l |  awk '{print $1}'`
  269.         if [ "$proftperr2" != "0" ]; then
  270.                 echo "Pro-FTP-错误登入次数: $proftperr2" | \
  271.                         awk '{printf( "\%-41s \%3d\n", $1, $2)}'                >> $logfile
  272.                 echo "帐号   来源位址 次数 "| \
  273.                         awk '{printf("\%-15s \%-25s \%-4s\n", $1, $2, $3)}'        >> $logfile
  274.                 cat $basedir/securelog | grep "proftp.*USER.*no such user" | \
  275.                         sed 's/^.*USER//g' | sed 's/:.*$//g' |\
  276.                         awk '{print $1}'  > $basedir/securelogproftpe2-1
  277.                 cat $basedir/securelog | grep "proftp.*USER.*no such user" | \
  278.                         sed 's/^.*\[//g' | sed 's/^.*\[//g' |\
  279.                         sed 's/\].*$//g' | awk '{print $1}' \
  280.                         > $basedir/securelogproftpe2-2
  281.                 paste $basedir/securelogproftpe2-1 $basedir/securelogproftpe2-2 \
  282.                         > $basedir/securelogproftpe2
  283.                 /bin/awk '{ for( i=0; i<1; i++ ) Number[$i]++ };
  284.                         END{ for( course in Number )
  285.                         printf( "\%-35s \%3d\n", course, Number[course])}' \
  286.                         $basedir/securelogproftpe2  | sort +2 -gr | \
  287.                         awk '{printf("\%-15s \%-25s \%3d\n", $1, $2, $3)}'        >> $logfile
  288.                 echo " "                                                         >> $logfile
  289.         fi
  290.         if [ "$proftpright" == "0" ] && [ "$proftperr1" == "0" ] && [ "$proftperr2" == "0" ]; then
  291.                 echo "今日没有 Proftp 的相关资讯"                        >> $logfile
  292.                 echo " "                                                        >> $logfile
  293.         fi
  294. }

  295. #####################################################################
  296. # 9 Vs-ftp 的登录资料的功能函数 (Function) !
  297. funvsftp () {
  298.         echo "================= Vs-ftp 的登录档资讯汇整 ===================="        >> $logfile
  299.         y="`cat $basedir/dattime`"
  300.         cat /var/log/vsftpd.log |grep "$y" > $basedir/vsftpdlog
  301.         vsftpright=`cat $basedir/messageslog |grep "vsftpd.*can't get client address:" |\
  302.                  wc -l |  awk '{print $1}'`
  303. #        vsftpright=`cat $basedir/vsftpdlog |grep "$y" |wc -l |awk '{print $1}'`
  304.         if [ "$vsftpright" != "0" ]; then
  305.                 echo "Vs-FTP-成功登入次数: $vsftpright" | \
  306.                         awk '{printf( "\%-41s \%3d\n", $1, $2)}'                >> $logfile
  307.                 echo "帐号   来源位址 次数 "| \
  308.                         awk '{printf("\%-15s \%-25s \%-4s\n", $1, $2, $3)}'        >> $logfile
  309.                 cat $basedir/vsftpdlog | grep "proftp.*USER.*Login succes" | \
  310.                         sed 's/^.*USER//g' | sed 's/:.*$//g' |\
  311.                         awk '{print $1}'  > $basedir/securelogproftp-1
  312.                 cat $basedir/securelog | grep "proftp.*USER.*Login succes" | \
  313.                         sed 's/^.*\[//g' | sed 's/^.*\[//g' |\
  314.                         sed 's/\].*$//g' | awk '{print $1}' \
  315.                         > $basedir/securelogproftp-2
  316.                 paste $basedir/securelogproftp-1 $basedir/securelogproftp-2 \
  317.                         > $basedir/securelogproftp
  318.                 /bin/awk '{ for( i=0; i<1; i++ ) Number[$i]++ };
  319.                         END{ for( course in Number )
  320.                         printf( "\%-35s \%3d\n", course, Number[course])}' \
  321.                         $basedir/securelogproftp  | sort +2 -gr | \
  322.                         awk '{printf("\%-15s \%-25s \%3d\n", $1, $2, $3)}'        >> $logfile
  323.                 echo " "                                                         >> $logfile
  324.         fi
  325.         vsftperr1=`cat $basedir/messageslog |grep "vsftpd.*authentication failure" |\
  326.                  wc -l |  awk '{print $1}'`
  327.         if [ "$vsftperr1" != "0" ]; then
  328.                 echo "Vs-FTP-错误登入次数: $vsftperr1" | \
  329.                         awk '{printf( "\%-41s \%3d\n", $1, $2)}'                >> $logfile
  330.                 echo "帐号   来源位址 次数 "| \
  331.                         awk '{printf("\%-15s \%-25s \%-4s\n", $1, $2, $3)}'        >> $logfile
  332.                 cat $basedir/messageslog | grep "vsftpd.*authentication failure" | \
  333.                         sed 's/^.*user=//g' | \
  334.                         awk '{print $1}'  > $basedir/securelogvsftpe1-1
  335.                 cat $basedir/messageslog | grep "proftp.*USER.*Login fail" | \
  336.                         sed 's/^.*\[//g' | sed 's/^.*\[//g' |\
  337.                         sed 's/\].*$//g' | awk '{print $1}' \
  338.                         > $basedir/securelogvsftpe1-2
  339.                 paste $basedir/securelogvsftpe1-1 $basedir/securelogvsftpe1-2 \
  340.                         > $basedir/securelogproftpe1
  341.                 /bin/awk '{ for( i=0; i<1; i++ ) Number[$i]++ };
  342.                         END{ for( course in Number )
  343.                         printf( "\%-35s \%3d\n", course, Number[course])}' \
  344.                         $basedir/securelogvsftpe1  | sort +2 -gr | \
  345.                         awk '{printf("\%-15s \%-25s \%3d\n", $1, $2, $3)}'        >> $logfile
  346.                 echo " "                                                         >> $logfile
  347.         fi
  348.         vsftperr2=`cat $basedir/messageslog |grep "vsftpd.*check pass" |\
  349.                  wc -l |  awk '{print $1}'`
  350.         if [ "$vsftperr2" != "0" ]; then
  351.                 echo "Vs-FTP-错误登入次数: $vsftperr2" | \
  352.                         awk '{printf( "\%-41s \%3d\n", $1, $2)}'                >> $logfile
  353.                 echo "帐号   来源位址 次数 "| \
  354.                         awk '{printf("\%-15s \%-25s \%-4s\n", $1, $2, $3)}'        >> $logfile
  355.                 cat $basedir/messageslog | grep "vsftpd.*check pass" | \
  356.                         sed 's/^.*user//g' | \
  357.                         awk '{print $1}'  > $basedir/securelogvsftpe2-1
  358.                 cat $basedir/messageslog | grep "vsftpd.*check pass" | \
  359.                         sed 's/^.*\[//g' | sed 's/^.*\[//g' |\
  360.                         sed 's/\].*$//g' | awk '{print $1}' \
  361.                         > $basedir/securelogvsftpe2-2
  362.                 paste $basedir/securelogvsftpe2-1 $basedir/securelogvsftpe2-2 \
  363.                         > $basedir/securelogvsftpe2
  364.                 /bin/awk '{ for( i=0; i<1; i++ ) Number[$i]++ };
  365.                         END{ for( course in Number )
  366.                         printf( "\%-35s \%3d\n", course, Number[course])}' \
  367.                         $basedir/securelogvsftpe2  | sort +2 -gr | \
  368.                         awk '{printf("\%-15s \%-25s \%3d\n", $1, $2, $3)}'        >> $logfile
  369.                 echo " "                                                         >> $logfile
  370.         fi
  371.         cat $basedir/vsftpdlog |awk '{print $7}' >$basedir/ftpip
  372.         cat $basedir/vsftpdlog |awk '{print $14}' >$basedir/ftpwho
  373. #        ftpsum=`cat $basedir/vsftpdlog |awk '{print $8}'`
  374.         cat $basedir/vsftpdlog |awk '{print $9}' |cut -d "/" -f4 >$basedir/ftpfile
  375.         ftpsize=`cat $basedir/vsftpdlog |awk '{print $8}'|awk '{ftps=ftps+$1} END {print ftps/1024}'`
  376.         ftpin=`cat $basedir/vsftpdlog |awk '{print $8,$12}'|grep "i"|awk '{print $1}'| \
  377.         awk '{ftps=ftps+$1} END {print ftps/1024}'`
  378.         ftpout=`cat $basedir/vsftpdlog |awk '{print $8,$12}'|grep "o"|awk '{print $1}'| \
  379.         awk '{ftps=ftps+$1} END {print ftps/1024}'`
  380.         echo -e "Vs-ftp total data size(Kbyte):$ftpsize\n" >>$logfile
  381.         echo -e "Vs-ftp input date size(Kbyte):$ftpin \n"  >>$logfile
  382.         echo -e "Vs-ftp output data size(Kbyte):$ftpout \n" >>$logfile
  383.         echo -e "Vs-ftp In/Out file:\n" >>$logfile
  384.         paste $basedir/ftpwho $basedir/ftpip $basedir/ftpfile > $basedir/ftplog
  385.         echo "帐号   来源位址 文件"| \
  386.                 awk '{printf("\%-15s \%-25s \%-4s\n", $1, $2, $3)}'        >> $logfile
  387.         cat "$basedir"/ftplog |awk '{printf("\%-15s \%-25s \%-4s\n",$1,$2,$3)}' >>$logfile
  388. #        /bin/awk '{ for( i=0; i<1; i++ ) Number[$i]++ };
  389. #                END{ for( course in Number )
  390. #                printf( "\%-35s \%3d\n", course, Number[course])}' \
  391. #                $basedir/ftplog  | sort +2 -gr | \
  392. #                awk '{printf("\%-15s \%-25s \%3d\n", $1, $2, $3)}'        >> $logfile
  393.         echo " "                                                        >> $logfile
  394.         if [ "$vsftpright" == "0" ] && [ "$vsftperr1" == "0" ] && [ "$vsftperr2" == "0" ]; then
  395.                 echo "今日没有 Vs-ftp 的相关资讯"                        >> $logfile
  396.                 echo " "                                                        >> $logfile
  397.         fi
  398. }

  399. #####################################################################
  400. # 9 procmail 的登录资料的功能函数 (Function) !
  401. funcprocmail () {
  402.         echo "================= Procmail 的登录档资讯汇整 ===================="        >> $logfile
  403.         echo "底下为今天信寄入本机的资讯"                                        >> $logfile
  404.         logprocmail=`/bin/ls /var/log/ | grep procmail| head -n 1`
  405.         declare -i nuall=`wc -l /var/log/"$logprocmail" | awk '{print $1}'`
  406.         dayproc=`cat "$basedir/dattime"`
  407.         declare -i nufir=`grep -n "$dayproc"  \
  408.                          /var/log/$logprocmail | cut -d ':' -f1|head -n 1`
  409.         declare -i num=$nuall-$nufir+1
  410.         tail -n $num /var/log/$logprocmail                                        >> $logfile
  411.         echo " "                                                                >> $logfile
  412. }


  413. #####################################################################
  414. # 9 开始测试需要进行的模组!
  415. input=`grep "22" $basedir/netstat.tmp`
  416. if [ "$input" != "" ]; then
  417.         funcssh
  418. fi
  419. input=`grep "21" $basedir/netstat.tmp`
  420. if [ "$input" != "" ]; then
  421.         [ -f /etc/ftpaccess ] && funcwuftp
  422.         proftppro=`which proftpd 2> /dev/null`
  423.         if [ "$proftppro" != "" ]; then
  424.                 funcproftp
  425.         else
  426.                 funvsftp
  427.         fi
  428. fi
  429. input=`grep "110" $basedir/netstat.tmp`
  430. if [ "$input" != "" ]; then
  431.         funcpop3
  432. fi
  433. input=`grep "25" $basedir/netstat.tmp`
  434. if [ "$input" != "" ]; then
  435.         sendmailtest=`ps -aux|grep sendmail| grep -v 'grep'`
  436.         if [ "$sendmailtest" != "" ] ;  then
  437.                 funcsendmail
  438.         else
  439.                 funcpost
  440.         fi
  441.         procmail=`/bin/ls /var/log| grep procmail| head -n 1`
  442.         if [ "$procmail" != "" ] ; then
  443.                 funcprocmail
  444.         fi
  445. fi


  446. #####################################################################
  447. # 10. 全部的资讯列出给人瞧一瞧!
  448. if [ "$outputall" == "yes" ] || [ "$outputall" == "YES" ] ; then
  449.         echo "  "                                                                  >> $logfile
  450.         echo "================= 全部的登录档资讯汇整 ======================="        >> $logfile
  451.         echo "1. 重要的登录记录档 ( Secure file )"           >> $logfile
  452.         echo "   说明:已经取消了 pop3 的资讯!"             >> $logfile
  453.         grep -v 'pop3' $basedir/securelog                    >> $logfile
  454.         echo " "                                             >> $logfile
  455.         echo "2. 使用 last 这个指令输出的结果"               >> $logfile
  456.         last -20                                             >> $logfile
  457.         echo " "                                             >> $logfile
  458.         echo "3. 将特重要的 /var/log/messages 列出来瞧瞧!"  >> $logfile
  459.         cat $basedir/messageslog | egrep -vi '\bcrond\['     >> $logfile
  460. fi
  461. # At last! we send this mail to you!
  462. mail -s "$hosthome 的登录档分析结果" $email < $logfile
复制代码

论坛徽章:
0
4 [报告]
发表于 2004-11-08 15:59 |只看该作者

系统日志分析脚本

大家可以从鸟哥的网站上下载,不过要转换为简体噢,其原脚本为繁体的,vsftp的分析要从这个网页上copy了
http://linux.vbird.org/download/vbird/logfile.sh

论坛徽章:
0
5 [报告]
发表于 2014-09-06 21:09 |只看该作者
拿来学习一下。。

论坛徽章:
0
6 [报告]
发表于 2014-12-14 10:55 |只看该作者
楼主有鸟哥自己写的登录档分析程序脚本文件吗?我点开鸟哥书里的那个链接里没有任何东西,可否共享出来让我们直接下载,也可直接发到我的邮箱2665402510@qq.com谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP