首页 > 其他 > 详细

nginx/iptables动态IP黑白名单实现方案

时间:2020-05-21 14:24:32      阅读:45      评论:0      收藏:0      [点我收藏+]

一、手动封IP步骤

1.Nginx手动封IP

1.获取各个IP访问次数
awk ‘{print $1}‘ nginx.access.log |sort |uniq -c|sort -n
2.新建一个黑名单文件 blacklist.conf ,放在 nginx/conf下面
3.添加一个IP ,deny 192.168.59.1;
4.在http或者server模块引入
include blacklist.conf ;
5.需要重启服务器, nginx -s reload; 即可生效

2.iptables手动封IP

单个IP的命令是
iptables -I INPUT -s 124.115.0.199 -j DROP

封IP段的命令是
iptables -I INPUT -s 124.115.0.0/16 -j DROP

封整个段的命令是
iptables -I INPUT -s 194.42.0.0/8 -j DROP

封几个段的命令是
iptables -I INPUT -s 61.37.80.0/24 -j DROP
iptables -I INPUT -s 61.37.81.0/24 -j DROP 

解封
iptables -F
清空
iptables -D INPUT 数字


service iptables save
service iptables restart
iptables -L -n

二、Nginx自动封IP

1.示例:覆盖

#!/bin/sh
tail -n500000 /usr/local/tengine/logs/access.log |awk ‘{print $1,$7}‘ |grep -i -E "payments|smsSdk|reportErrorLog|errorPay" |awk ‘{print $1}‘|sort|uniq -c |sort -rn |awk ‘{if($1>100)print "deny "$2";"}‘ > /usr/local/tengine/conf/ip.blacklist.auto.conf
/usr/local/tengine/sbin/nginx -s reload

2.示例:追加

#!/bin/sh
cat /usr/local/tengine/logs/access.log |awk ‘{print $1,$7}‘ |grep -i -E "payments|smsSdk|reportErrorLog|errorPay" |awk ‘{print $1}‘|sort|uniq -c |sort -rn |awk ‘{if($1>500)print "deny "$2";"}‘ >> /usr/local/tengine/conf/ip.blacklist.auto.append.conf
/usr/local/tengine/sbin/nginx -s reload

这里注意 >是覆盖,>>是追加

3.nginx中配置

location / {
	
	...
	limit_req zone=one burst=5 nodelay;

	include ip.blacklist.auto.append.conf;
	include ip.blacklist.auto.conf;
        
}

三、添加到系统计划任务

crontab每隔10分钟执行一次

crontab -e
*/10 * * * * /data/scripts/nginx_ipblack_auto.sh
或者:
0,10,20,30,40,50 /data/scripts/nginx_ipblack_auto.sh

四、iptables自动封IP

 
#!/bin/bash
num=100 #上限
list=`netstat -an |grep ^tcp.*:80|egrep -v ‘LISTEN|127.0.0.1‘|awk -F"[ ]+|[:]" ‘{print $6}‘|sort|uniq -c|sort -rn|awk ‘{if ($1>$num){print $2}}‘`
for i in $list
do
      iptables -I INPUT -s $i --dport 80 -j DROP
done

五、tengine限流模块

tengine 限制同IP对同URL连接数限制的配置

 white_black_list_conf conf/white.list zone=white1:4m;
 white_black_list_conf conf/black.list zone=black1:4m;


limit_req_zone $binary_remote_addr zone=one:3m rate=1r/s;
limit_req_zone $binary_remote_addr $uri zone=two:3m rate=1r/s;
limit_req_zone $binary_remote_addr $request_uri zone=thre:3m rate=1r/s;

nginx/iptables动态IP黑白名单实现方案

原文:https://www.cnblogs.com/grimm/p/12930381.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!