Использование Nginx для блокировки IP-адресов за прокси

У меня здесь веб-сервер Nginx 1.2.4, и я сижу за прокси своего хостера, чтобы предотвратить ddos-атаки. Недостатком использования этого прокси-сервера является то, что мне нужно получить РЕАЛЬНУЮ информацию об IP-адресе из дополнительного заголовка. В PHP это прекрасно работает, например, при выполнении $_SERVER[HTTP_X_REAL_IP].

Теперь, прежде чем я оказался за этим прокси моего хостера, у меня был очень эффективный способ блокировать определенные IP-адреса, делая это: include /etc/nginx/block.conf и разрешать/запрещать IP-адреса.

Но теперь из-за прокси Nginx видит весь трафик, идущий с 1 IP.

Я настроил Nginx с помощью --with-http_realip_module, поэтому теперь я могу получать реальные IP-адреса от людей.

В моем nginx.conf я добавил:

real_ip_header X-Forwarded-For;
include blockips.conf;

Я также пробовал:

real_ip_header X-Real-IP;
include blockips.conf;

В обоих случаях IP-адреса, указанные в blockips.conf, не блокируются. Также в моих файлах журналов я не вижу реальных IP-адресов, а отображается только IP-адрес прокси.

Что я делаю не так?


person Mr.Boon    schedule 31.10.2012    source источник
comment
Только прокси-сервер обращается к вашему сайту, так что это единственный IP-адрес, который вы видите. Если вы хотите заблокировать пользователей по IP, вам нужно будет либо заблокировать их на прокси-сервере, либо настроить прокси так, чтобы каким-то образом пересылать информацию о реальном IP-адресе.   -  person Wug    schedule 31.10.2012
comment
Прокси также делает это, иначе PHP не сможет получить информацию об IP через $_SERVER[HTTP_X_REAL_IP]. Таким образом, с модулем, который я установил для Nginx, я также смогу получить реальную информацию об IP.   -  person Mr.Boon    schedule 31.10.2012


Ответы (2)


Я решил это.

Пришлось добавить:

set_real_ip_from 0.0.0.0;

Где IP 0.0.0.0 является прокси

person Mr.Boon    schedule 31.10.2012
comment
Нужно добавить /0 в конец: set_real_ip_from 0.0.0.0/0; - person fotinakis; 15.04.2015
comment
Будьте очень осторожны с set_real_ip_from 0.0.0.0/0;. По сути, это означает, что вы доверяете любому IP-адресу, который дает вам точные заголовки (например, X-Forwarded-For). Вам понадобится отдельный способ блокировки запросов от ненадежных заголовков; iptables может это сделать. Без чего-то вроде iptables set_real_ip_from 0.0.0.0/0; позволит хакеру тривиально подделать IP-адреса. - person phylae; 03.06.2015
comment
Это решение требует включения дополнительного модуля nginx http://nginx.org/en/docs/http/ngx_http_realip_module.html - person phylae; 03.06.2015
comment
Для меня добавление /0 в конце не было необходимо. На самом деле, это просто породило раздражающее предупреждение, поэтому я удалил его. - person William; 22.01.2016

  • Убедитесь, что у вас есть http://nginx.org/en/docs/http/ngx_http_realip_module.html включен

  • set_real_ip_from 123.123.255.0;

    или для диапазона IP-адресов:

    set_real_ip_from 123.123.255.0/255;

    Где IP 123.123.255.0 является IP-адресом/IP-адресами прокси-сервера

Внимание: настройка set_real_ip_from 0.0.0.0/0; может быть потенциальной проблемой безопасности, поскольку она позволит любому входящему запросу с такими заголовками, как X-Forwarded-For, установить реальный IP-адрес. Несмотря на то, что в особых случаях это может быть полезно, это почти наверняка создает метод обхода блокировки IP в nginx. спасибо @phylae за разъяснения в своем комментарии.

person kask    schedule 19.04.2017