Список доступа к местоположению Nginx и «X-Forwarded-For»

У меня есть несколько WordPress сайтов на кластере с балансировкой нагрузки Nginx. Я хочу заблокировать доступ к / wp-admin и /wp-login.php на этих. Клиент не желает использовать плагин, такой как Wordfence, для достижения этого (понятно).

Балансировщики нагрузки перенаправляют реальный IP-адрес клиента в X-Forwarded-For, и это присутствует в Nginx, так как в настоящее время я использую его в своем основном формате журнала с «$ HTTP_X_FORWARDED_FOR».

Это мой текущий блок местоположения:

   location ~ ^/(wp-admin|wp-login.php) {

real_ip_header X-Forwarded-For;

try_files $uri $uri/ /index.php?$args;
index index.html index.htm index.php;

root           /var/www/vhosts/domain.com/html;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
include        fastcgi_params;

allow 1.1.1.1;
allow 2.2.2.2;
allow 3.3.3.3;
#allow 10.10.85.0/24;
deny all;
}

Как видите, я использую «real_ip_header X-Forwarded-For;» объявить, каким должен быть настоящий ip. Но это не работает. С учетом вышесказанного ВСЕ запросы к нему блокируются. Если я раскомментирую частный 10.10.85.0/24 подсети (которая является частной сетью, по которой трафик доставляется ОТ балансировщиков нагрузки), тогда доступ к расположениям предоставляется для ВСЕХ.

У меня действительно есть модуль realip, скомпилированный в Nginx, как можно увидеть здесь:

[root@STR-MAI-ORDS1 conf.d]# 2>&1 nginx -V | tr -- - '\n' | grep http_realip_module
http_realip_module
[root@STR-MAI-ORDS1 conf.d]#

В моих файлах журналов я вижу реальный общедоступный IP-адрес, который печатается для входа в систему с использованием X-Forwarded-For, но то же самое не работает для этого блока realip, и я не уверен, почему.

Если это имеет значение, среда выглядит следующим образом:

  • pfSense FW (2 узла HA)
  • Балансировщик нагрузки Zevenet (2 узла HA)
  • Веб-сервер CentOS 6.x (кластер из 3 узлов)

Веб-стек:

  • Nginx v1.12.0
  • PHP-FPM v7.0.20 (fastcgi)

Любой совет о том, что я делаю неправильно, был бы великолепен. Благодарю.

0

Решение

Оказывается, «set_real_ip_from» в Nginx не является обязательным … Даже если я правильно установил «real_ip_header» на «X-Forwarded-For из LoadBalancers», Nginx полностью отказался сделать это, потому что этого не происходит (по умолчанию) доверять LB как источнику, который может установить реальный IP.

Исправление должно было включать следующее в моем блоке местоположения:

set_real_ip_from 10.10.85.0/24;
real_ip_header X-Forwarded-For;

Затем Nginx доверяет LB (который находится в этой подсети) и устанавливает для него реальный ip.

1

Другие решения

Вы можете создать файл конфигурации для нескольких блокировок, как показано ниже.

изменить файл конфигурации ngnix

vi /usr/local/nginx/conf/nginx.conf

включить новый файл конфигурации для блокировки IP-адресов внутри nginx.conf

include blockips.conf;

сохраните файл конфигурации ngnix и создайте новый файл

vi blockips.conf

добавьте свои черные IP-адреса

deny 1.2.3.4;

или блокировка подсети

deny 91.212.45.0/24;

для получения дополнительной информации см. nginx блокирующий IP
и для подсеть

0

По вопросам рекламы [email protected]