shell实例浅谈之五解决网络中DOS攻击的方法

一、问题

      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中设置就可按实际时间需求进行监控了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乌托邦2号

博文不易,支持的请给予小小打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值