ddos DDOS DDoS攻击和HTTP_X_FORWARDED_FOR

原文:https://blog.csdn.net/weixin_37569048/article/details/86484079

这里可能有朋友会不理解,我来补充解释一下http_realip_module这个模块好了,它包括三个指令:

1、set_real_ip_from 是指接受从哪个信任前代理处获得真实用户ip

2、real_ip_header 是指从接收到报文的哪个http首部去获取前代理传送的用户ip

3、real_ip_recursive 是否递归地排除直至得到用户ip(默认为off)

首先,real_ip_header 指定一个http首部名称,默认是X-Real-Ip,假设用默认值的话,nginx在接收到报文后,会查看http首部X-Real-Ip。

(1)如果有1个IP,它会去核对,发送方的ip是否在set_real_ip_from指定的信任ip列表中。如果是被信任的,它会去认为这个X-Real-Ip中的IP值是前代理告诉自己的,用户的真实IP值,于是,它会将该值赋值给自身的 r e m o t e a d d r 变 量 ; 如 果 不 被 信 任 , 那 么 将 不 作 处 理 , 那 么 remote_addr变量;如果不被信任,那么将不作处理,那么 remoteaddrremote_addr还是发送方的ip地址。

(2)如果X-Real-Ip有多个IP值,比如前一方代理是这么设置的:proxy_set_header X-Real-Ip $proxy_add_x_forwarded_for;

得到的是一串IP,那么此时real_ip_recursive 的值就至关重要了。nginx将会从ip列表的右到左,去比较set_real_ip_from 的信任列表中的ip。如果real_ip_recursive为off,那么,当最右边一个IP,发现是信任IP,即认为下一个IP(右边第二个)就是用户的真正IP;如果real_ip_recursive为on,那么将从右到左依次比较,知道找到一个不是信任IP为止。然后同样把IP值复制给$remote_addr。(可以参考上面的例子,帮助理解这个过程)

因此,明白了整个过程后,我们知道,用realip模块是非常好用的,能满足各种获取用户IP的需求,而且不会受到XFF欺骗!

那么问题来了,后端除了想获取用户ip,也想获取代理ip,怎么办呢?那么此时$proxy_add_x_forwarded_for派上用场。只需要在每一层代理IP,都保持一个良好的习惯:proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;然后后端得到的X-Forwarded-For首部,依次就是用户IP到各层代理的IP,至于最靠近自己的代理ip,各种web开发语言都有获取发送方真实IP的接口了,然后你知道该怎么做了吧?!

深入理解:
https://blog.csdn.net/ff900709/article/details/82151191

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值