一次DDos防御过程全记录

行云流水
2022-02-26 / 0 评论 / 684 阅读 / 正在检测是否收录...

前言

一个小伙伴找到我,说新做的创业项目刚有点起色,每天断断续续有了收入。这几天,莫名其妙的就没法访问了,要不就卡得要死。也不知道什么原因?让我帮忙看看。
废话不多说,直接开始干活。
让他把访问日志,发给我。然后统计了一下,访问量。好家伙,一个小破站,单IP访问量好几万的就就两千多个,妥妥的DDos攻击哇。如图,

# 日志统计命令
cat httpd_access.log | awk '{print  $1}'| sort -k 1 | uniq -c | sort -rnk 1  | grep -v '::' > result.txt

分析

实施

更换iptables

service firewalld stop
systemctl disable firewalld.service 
yum remove firewalld
yum install iptables-services  iptables  ipset ipset-service
systemctl enable ipset
systemctl enable iptables

iptables脚本

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m set --match-set blackiplist src -m tcp --dport 80 -j DROP
iptables -A INPUT -p tcp -m set --match-set blackiplist src -m tcp --dport 443 -j DROP
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 4848 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 8  -j  DROP
iptables -A INPUT -j  DROP

iptables -A OUTPUT -p udp -d  183.60.82.98  --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp -d  183.60.83.19  --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp -j DROP

重启iptables服务

service iptables save
service iptables restart
iptables -nvL

添加ipset黑名单

ipset create blackiplist hash:ip timeout 86400 hashsize 4096 maxelem 1000000

设置计划任务

*/3 * * * *  /usr/bin/bash  /root/cron-for-ddos.sh > /dev/null 2>&1

nginx配置过程

修改nginx配置

计划任务

*/3  * * * *  /usr/bin/sh  /var/scripts/add_blackip_for_ddos_per_min.sh > /dev/null 2>&1

#!/bin/bash
m_time=`env LC_ALL=en_US.en date -d '1 minute ago' '+%e/%b/%G:%H:%M'`
log='/www/wwwlogs/nginx_acc.log'

conf='nginx/blackip.conf'  #配置文件路径

# 筛选攻击IP
tail -n  100000 $log  | grep "$m_time" |awk '{print  $1}'| sort -k 1 | uniq -c | sort -rnk 1 | grep -v '::' > /tmp/blackip_per_min.txt
cat /tmp/blackip_per_min.txt | awk '{if($1>60)print "deny "$2";"}' >> $conf

nginx加载配置

/opt/nginx/sbin/nginx  -s reload

评论 (0)

取消
只有登录/注册用户才可评论