1、解决DOS攻击生产案例:根据web日志或者或者网络连接数,监控当某个IP 并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频 率每隔5分钟。防火墙命令为:iptables -A INPUT -s IP -j REJECT
1.1 通过监控日志的方法
#!/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
done2)exec<a.log
while read line
do
done3)while read line
do
done<a.logsort sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
-n 按数字进行排序
-r 反向排序
-f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写
uniq 命令 去重
-c 在每一行加上重复的次数
sort -t -k 参数
-t : tables 指定分隔符,默认tab为分隔符
-k: 指定安装哪一个分割区域进行排序iptables -L -n -v
-L:显示规则链中已有的所有条目;
-n :以数字的形式显示规则-v :显示详细信息
#!/bin/bash
[ -f /tmp/tmp.txt ] && rm -f /tmp/tmp.txt || touch /tmp/tmp.txt
while true
do
awk '{a[$1]++}END{for (i in a) if(a[i]>100) print i,a[i]}' /apps/http/logs/access_log >> /tmp/tmp.txt
while read line
do
ip=`echo $line |awk '{ print $1 }'`