Nginx 基于用户真实IP-制定黑名单

2019年7月9日10:11:41 发表评论 2,116 views
摘要

通过nginx 限制IP访问功能,防止恶意攻击,确保流量正常。。。

广告也精彩

公司合规要求,后台地址限制外网访问,所以通过匹配进行限制,但通过nginx deny allow进行设置无法生效,故通过用户真实IP进行判断,步骤如下:
1)环境介绍:
场景: 前端SLB--->nginx---->proxy
Nginx 基于用户真实IP-制定黑名单
2)配置SLB
开启Xforwardfor 记录用户真实IP
Nginx 基于用户真实IP-制定黑名单
SLB其它配置,可去阿里云产品页面查询
3)查看access访问日志,确定判断哪个字段去限制IP访问

直接解析到指定ECS IP

Nginx 基于用户真实IP-制定黑名单
可以通过 localtion 的 allow 与 deny 去控制访问IP
Nginx 基于用户真实IP-制定黑名单

通过waf解析到 slb 的IP 在代理到服务器IP

这个时候我们就需要判断$http_x_forwarded_for字段去控制访问权限

4)nginx修改配置
添加到server 标签内

#-----------------------------IP白名单-----------------------------
        set $allow true;
        if ($http_x_forwarded_for ~ "白名单IP1|白名单IP2"){ #如果用户真实IP是后面列出的
        set $allow false;   #那allow状态为false
        }
        if ($allow != false){  #如何状态不为flase 就返回404,也就是说不是授权的用户,就返回404
        return 404;
    }

二、阿里云SLB场景使用Nginx封用户真实IP

1.环境与上面一致
2.tomcat开启X-Forwarded-For日志功能
开启tomcat的X-Forwarded-For,在tomcat/conf/server.xml中,修改AccessLogValve日志纪录功能为如下内容:

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%{X-Forwarded-For}i %h %l %u %t %r %s %b" />
提示:修改完重启生效!!

下午被的日志:(筛选访问公司网站前10 的IP地址)

[root@node2 ~]# awk -F "[ ]" '{print $1}' /home/wwwlogs/access.log |sort -nr|uniq -c|sort -nr|head -n 10

Nginx 基于用户真实IP-制定黑名单

3.Nginx配置(安装不解释了)
在Server标签下添加如下几行

    set $allow true;
    if ($http_x_forwarded_for ~ "121.42.0.30|121.42.0.38|121.42.0.36|121.42.0.15121.42.0.37"){
        set $allow false;
    }
    if ($allow = false){
        return 404;
    }
#提示:IP添加在上面!

小结: 因为无法禁止用户进行访问,我们设置404可以让IP无法进行访问数据库。不然数据库会被查询语句进行刷爆

  • QQ精品交流群
  • weinxin
  • 微信公众号
  • weinxin
广告也精彩
admin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: