安全的防范无处不在,其中一个主要的途径是监控日志,日志记录了绝大多数服务器受访的动向和痕迹。Web服务的日志每天的量比较大,我们怎么知道哪些IP地址访问不正常,偏多?可以写个shell脚本对Web服务的日志进行分析,得出访问最多的IP地址的列表
- #!/bin/bash
- # 获取ip列表存放位置
- DEST=~/reports/ips
- # 域名
- DOM=$1
- # 该域名访问日志位置
- LOGFILE=/var/logs/httpd/$DOM/access.log
- # 如果没有给出具体域名,直接退出
- [ $# -eq 0 ] && exit 1
- # 建立目标目录
- [ ! -d $DEST ] && mkdir -p $DEST
- # 开始处理
- if [ -f $LOGFILE ]
- then
- echo "Processing log for $DOM..."
- awk '{ print $1}' $LOGFILE | sort | uniq -c | sort -nr > $DEST/$DOM.txt
- echo "Report written to $DEST/$DOM.txt"
- fi
使用前把上面的代码存入文件,如 gettopips.sh,下面给一个例子,假如我服务器上有一个 foobar.com 的站点,我想看看访问我的这个站点最多的ip:
./gettopips.sh foobar.com
执行后会得到类似如下的输出
13687 72.30.87.116
7416 66.249.71.138
7402 66.249.71.140
7261 66.249.71.139
6510 74.86.49.130
4879 67.195.37.159
4121 66.90.104.20
3958 93.158.144.27
3262 122.172.49.89
第一列是数量,第二列是ip地址
上面的代码在使用的时候,不同的linux发行版本,不同的安装目录,可能有些地方要更改的,不过,主体是那个 awk 的 shell,大家看着改吧