Re: secure_link + realip + if

2018-08-21 Пенетрантность Pavel
On Wed, 22 Aug 2018 04:28:39 +0300 Maxim Dounin 
 wrote:



Hello!

В случае, если модуль realip включён на уровне location, 
он  работает после окончательного выбора конфигурации, 
частью какового  выбора являются директивы модуля rewrite.  
В результате в такой конфигурации $remote_addr будет использоваться до 
переопределения модулем realip.


Понятно, спасибо за разъяснение!
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: secure_link + realip + if

2018-08-21 Пенетрантность Maxim Dounin
Hello!

On Tue, Aug 21, 2018 at 01:25:36AM +0700, Pavel wrote:

> В процессе использования появился вопрос по совместному 
> использованию
> модулей ngx_http_secure_link_module и 
> ngx_http_realip_module, с использованием
> проверки доступа через if (Да, "if is evil", но есть ли 
> другой способ?).
> 
> Ранее модуль ngx_http_secure_link_module использовался для 
> проверки
> доступа в самостоятельной конфигурации, без realip_module.
> Теперь сервис переезжает за дополнительный прокси в целях 
> защиты от DDOS,
> и для получения реального айпи браузера добавился 
> ngx_http_realip_module.
> 
> Проблема в следущем: если в одном локейшне используются 
> два вышеуказанных
> модуля + директива if, то переопределение remote_addr не 
> происходит.
> Если if не использовать - переопределение работает.

[...]

> server {
>  listen 127.0.0.1:80;
>  server_name vhost;
> 
>  root /tmp;
> 
>  location / {
>  set_real_ip_from 127.0.0.1/32;
>  real_ip_header X-Forwarded-For;
> 
>  secure_link $arg_st;
>  secure_link_md5 "${remote_addr}_$uri";
>  if ($secure_link = "") {
>  return 403;
>  }

В случае, если модуль realip включён на уровне location, он 
работает после окончательного выбора конфигурации, частью какового 
выбора являются директивы модуля rewrite.  В результате в такой 
конфигурации $remote_addr будет использоваться до переопределения 
модулем realip.

Кроме того, ещё не изменённое значение переменной $remote_addr 
закэшируется при первом обращении 
(https://trac.nginx.org/nginx/ticket/603#comment:1),
и в результате будет казаться, что адрес клиента не переопределён 
(на самом деле - переопределён, и скажем allow/deny сработают 
правильно).

[...]

> Какие будут рекомендации?

Наиболее простое и правильное решение - указать set_real_ip_from на 
уровне server.  Тогда адрес клиента будет переопределяться сразу 
после чтения заголовков запроса, и проблемы не будет.

-- 
Maxim Dounin
http://mdounin.ru/
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru