工作中的一次linux防范ddos攻击

本文发布时间: 2019-Mar-21
在上班路上,看到手机短信里面发送报警信息,一台服务器凌晨4点下线了.匆忙到工位,检查机器果然下线了,报告老板,然后联系机房.大概十分钟后机房回复,机器受到攻击,机房切断了Ip. 机器用电信联通双网络,既然电信ip被封,那就用联通的ip进入机器.要素一:机器的硬件信息以及Ip信息平时一定要保管好.免得有问题了还要去问机房,白白浪费很多时间.进入机器后top等发现机器硬件性能ok,再用iptraf,流量也不高(当然不高,主ip都被切了).机器跑的是网站业务,所以要找问题,去日志文件里面找访问量最高的ip即可.要素二:找到日志文件找到攻击ip,前面为访问数量,后面为访问ip[root@localhost logs]# awk '{print $1}' xxx.xxx.com.access.log-20160616| sort | uniq -c | sort -n -k 1 -r | head -n 20 91653 106.185.53.124 59492 113.116.56.80 56556 106.186.18.224 48629 106.187.45.172 26962 103.61.136.93 22825 191.101.1.49 21068 103.61.136.168 8947 207.46.13.2 7508 157.55.39.95 6392 40.77.167.49 3673 62.210.247.93 2827 46.4.94.226 2670 207.46.13.1 2576 58.60.220.128 2402 61.143.205.246 2035 157.55.39.80 2029 45.33.44.22 1953 157.55.39.105 1872 157.55.39.242 1862 183.8.3.47这是我第一次想到的命令,其实在网站访问日志里面应该过滤掉各种蜘蛛爬虫才对,封错了,老板会跟你急眼.所以,正确的命令应该是:[root@localhost logs]# cat xxx.xxx.com.access.log-20160616|grep -i -v -E "bing|baidu|google|sougou"|awk '{print $1}'|sort | uniq -c | sort -n -k 1 -r | head -n 20 91653 106.185.53.124 59492 113.116.56.80 56556 106.186.18.224 48629 106.187.45.172 26962 103.61.136.93 22825 191.101.1.49 21068 103.61.136.168 3661 62.210.247.93 2814 46.4.94.226 2576 58.60.220.128 2402 61.143.205.246 2029 45.33.44.22 1862 183.8.3.47 1300 103.61.136.164 1066 218.6.71.194 880 14.125.142.195 683 61.158.163.117 682 61.158.180.226 680 218.29.54.198 678 118.212.147.71把前几个ip查询,都是日本,台湾,德国.再配合访问日志,得知是cc攻击.先把这几个Ip用iptables封掉.输入封杀内容,重启iptables.[root@localhost logs]# vim /etc/sysconfig/iptables-A INPUT -s 106.185.53.124 -p tcp -m state --state NEW -j DROP[root@localhost logs]# service iptables restart使用iptables查看就可以看到,很多流量包被丢弃;[root@localhost logs]# iptables -nvLChain INPUT (policy ACCEPT 4045K packets, 604M bytes)pkts bytes target prot opt in out source destination 0 0 DROP tcp -- * * 103.61.136.167 0.0.0.0/0 state NEW382K 18M DROP tcp -- * * 106.186.18.85 0.0.0.0/0 state NEW 97 4920 DROP tcp -- * * 183.8.3.47 0.0.0.0/0 state NEW380K 18M DROP tcp -- * * 106.187.45.172 0.0.0.0/0 state NEW 300 15204 DROP tcp -- * * 46.4.94.226 0.0.0.0/0 state NEW这个时候机房那边也解封了电信Ip.观察一段时间,流量正常.事后,研究写过脚本,把访问量异常的ip获取然后放在一个文件里面,使用iptbales封杀.[root@localhost logs]# cat /sbin/cc.sh#!/bin/shLOG_FILE=/usr/local/nginx/logs/xxx.xxx.com.access.log #访问日志IP_FILE=/etc/black #存放需要禁止的ip文件NUMBER=2000 #非法访问量的值wan0=eth0 #网卡BACKIP=`cat $IP_FILE` #每次操作先清空之前的ip`cat /dev/null > $IP_FILE`Denyip=`cat $LOG_FILE|grep -i -v -E "bing|baidu|google|sougou"|awk '{print $1}'|sort | uniq -c | sort -n -k 1 -r | head -n 1000000|awk '{if($1>'$NUMBER')print $2}'`echo $Denyip > $IP_FILEif [ "$BACKIP" != "" ];then for X in $BACKIP do echo $X ---deny iptables -A INPUT -i $wan0 -s $X -p all -j DROP donefi清空规则很简单,因为没有把规则保存,所以只要用[root@localhost logs]# service iptables restart就可以把iptbales规则恢复.反思:1.使用netstat把非法ip列出 2.不遍历整个日志,假设当前被攻击,列出1小时内访问异常的Ip并封杀.欢迎各位提出解决方案,或者链接


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:08pm
栏目列表