一、问题
DOS是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络带宽攻击和连通性攻击。
解决DOS攻击方法:可以通过分析web日志,或者查看网络连接数,当某个IP并发连接数过多(或判断PV短时内达到1000),则调用防火墙命令封掉对应的ip,监控频率可是每隔3分钟。
二、详解
1、网络连接
(1)判断某个网段,可以连接的用户
ping通即在线,但该方法花费的时间比较长
#判断用户在线,ping通即在线
#!/bin/bash
for n in `seq 254` #从192.168.40.1-192.168.40.254
do
ping -c2 192.168.40.$n > /dev/null 2>&1 #发送两个数据包
if [ $? -eq 0 ] #返回状态判断
then
echo "192.168.40.$n is up" >> downlist.log #记录结果文件
#else
#echo "192.168.40.$n is down" >> downlist.log
fi
done
echo "spend time:$SECONDS"
2、解决DOS攻击
(1)方法一:分析web日志
把单IP PV数高的封掉(可按天定义PV=1000即封掉):
#!/bin/bash
while true
do
#access.log为web日志文件
awk '{print $1}' access.log | grep -v "^$" | sort | uniq -c > tmp.log
exec < tmp.log #输入重定向
while read line #读取文件
do
ip=`echo $line | awk '{print $2}'`
count=`echo $line | awk '{print $1}'`
if [ $count -gt 100 ] && [ `iptables -n -L | grep "$ip" | wc -l` -lt 1 ]
then
iptables -I INPUT -s $ip -j DROP
echo "$line is dropped" >> droplist.log
fi
done
sleep 3
done
(2)方法二:分析网络连接数
netstat -an | grep EST查看网络状态如下:
tcp 0 0 192.168.40.125:46476 112.95.242.171:80 ESTABLISHED
tcp 0 74 192.168.40.125:57948 173.194.127.177:443 ESTABLISHED
tcp 0 0 192.168.40.125:52290 118.144.78.52:80 ESTABLISHED
tcp 0 0 192.168.40.125:42593 163.177.65.182:80 ESTABLISHED
tcp 0 0 192.168.40.125:49259 121.18.230.110:80 ESTABLISHED
tcp 0 0 192.168.40.125:52965 117.79.157.251:80 ESTABLISHED
#!/bin/bash
while true
do
grep EST est.log | awk -F '[ :]+' '{print $6}' | sort | uniq -c > tmp.log
#netstat -an | grep EST | awk -F '[ :]+' '{print $6}' | sort | uniq -c
exec < tmp.log
while read line
do
ip=`echo $line | awk '{print $2}'`
count=`echo $line | awk '{print $1}'`
if [ $count -gt 100 ] && [ `iptables -n -L | grep "$ip" | wc -l` -lt 1 ]
then
iptables -I INPUT -s $ip -j DROP
echo "$line is dropped" >> droplist.log
fi
done
sleep 3
done
三、总结
(1)也可以将上述脚本在linux的定时任务crontab中设置就可按实际时间需求进行监控了。