Behavior of realip module with this config

Maxim Dounin mdounin at mdounin.ru
Fri Feb 10 12:33:35 UTC 2017


Hello!

On Thu, Feb 09, 2017 at 05:49:13PM -0500, Paul Nickerson wrote:

> I've got the config below. I don't have these settings reconfigured
> anywhere else. My understanding is that no matter anything else at all
> anywhere else, and no matter whether the X-Forwarded-For field in the HTTP
> header has one or multiple IP addresses, or isn't even present,
> $remote_addr will not be altered.
> 
> set_real_ip_from 0.0.0.0/0;
> real_ip_header X-Forwarded-For;
> real_ip_recursive on;
> 
> From what I read, "real_ip_recursive on" means that $remote_addr can only
> be set to an IP address that is not in the range set by set_real_ip_from.
> And since that's 0.0.0.0/0, there is no IP that can meet this requirement.
> 
> Am I correct in my analysis?

CIDR 0.0.0.0/0 means 0.0.0.0 - 255.255.255.255, so any IP address 
is allowed to change the IP via X-Forwarded-For.  You can find 
more information about CIDR notation here:

https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing

And real_ip_recursive switched on means that this happens 
recursively.  As a result, with the configuration in question 
nginx will use the first address in X-Forwarded-For provided, if 
any (assuming all addresses are valid).

Note that "set_real_ip_from 0.0.0.0/0" makes client's address as 
seen by nginx easily spoofable by any client, and it is generally 
a bad idea to use it in production.

-- 
Maxim Dounin
http://nginx.org/


More information about the nginx mailing list