zhmg23

我们是如此的不同

利用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

评论