根据web日志或者网络连接数,监控当某个IP并发连接数或者段时间内PV连接到达100及使用防火墙命令封堵对应的IP,监控频率每隔3分钟;防火墙命令为:iptables -A INPUT -s 192.168.0.7 -j DROP
查看防火墙iptables -L -n

第一种:监控日志

#!/bin/sh
while true
do
cat access_log.dms|awk '{print $1}'|sort|uniq -c|sort -nr > a.log
exec< a.log
while read line
do
pv=$(echo $line|awk '{print $1}')
ip=$(echo $line|awk '{print $2}')
if [ $pv -gt 1000 ]&& [ iptables -L -n|grep "$ip"|wc -l -eq 0 ];then
iptables -A INPUT -s $ip -j DROP
fi
done
sleep 180
done

说明:

while读文件的写法
1)cat al.log|while read line
do
done

2)execwhile read line
do
done

3)while read line
do
done

sort sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
-n 按数字进行排序
-r 反向排序
-f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写
uniq 命令 去重
-c 在每一行加上重复的次数
sort -t -k 参数
-t : tables 指定分隔符,默认tab为分隔符
-k: 指定安装哪一个分割区域进行排序

[rocrocket@rocrocket programming]$ cat facebook.txt
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4
[rocrocket@rocrocket programming]$ sort -n -k 2 -t : facebook.txt
#-n 按照数字进行排序
#-t 此例中指定 : 为分隔符
#-k 此例中按照分割的第二区域进行排序
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3
iptables 防火墙
iptables -L -n|grep "$ip"|wc -l 查看相关IP在防火墙里是否有封堵

第二种:监控ip连接数

#!/bin/sh
while true
do
netstat -an|grep EST|awk -F '[ :]+' '{print $6}'|sort|uniq -c >a.log
exec< a.log
while read line
do
pv=$(echo $line|awk '{print $1}')
ip=$(echo $line|awk '{print $2}')
if [ $pv -gt 1000 ]&& [ iptables -L -n|grep "$ip"|wc -l -eq 0 ];then
iptables -A INPUT -s $ip -j DROP
fi
done
sleep 180
done

说明:
netstat -an|grep EST|awk -F '[ :]+' '{print $6}'|sort|uniq -c >a.log

netstat命令

-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到