利用iptables防恶意攻击
最近有些恶意地址频繁刷我们的接口,为了应对,临时用iptables过滤一些恶意IP,此方法有一定的缺陷,有时可能会误伤一些正常的地址,所以使用时,还需要根据实际情况。
原理:用shell脚本,定时分析nginx日志,然后把请求量超过阈值的IP,加入iptables屏蔽
#!/bin/bash
num=50
cd /adsring/nginx/logs
for i in `tail access.log -n 1000|awk '{print $1}'|sort|uniq -c|sort -rn|awk '{if ($1>$num){print $2}}'`
#读取最新1000条记录,如果单IP超过50条就封掉。
do
iptables -I INPUT -p tcp -s $i --dport 80 -j DROP
done
制定计划任务,每隔一分钟,检测一次
*/1 * * * * /data/shell/ip_nginx.sh
另外,nginx其他一些防cc思路:
https://xrong.net/2015/05/07/Nginx%E9%98%B2CC%E6%94%BB%E5%87%BB/
https://segmentfault.com/a/1190000002483422
https://www.centos.bz/2011/08/nginx-defense-cc-attack-simply/
查看nginx日志前10个访问量最大的IP
awk '{print $1}' /var/log//nginx/logs/access.log | sort | uniq -c | sort -nr -k1 | head -n 10
查看1000个地址中,前10个最大访问访问地址
tail access.log -n 1000|awk '{print $1}'|sort|uniq -c|sort -rn| head -n 10
评论