У меня есть несколько 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, и я не уверен, почему.
Если это имеет значение, среда выглядит следующим образом:
Веб-стек:
Любой совет о том, что я делаю неправильно, был бы великолепен. Благодарю.
Оказывается, «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.
Вы можете создать файл конфигурации для нескольких блокировок, как показано ниже.
изменить файл конфигурации 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
и для подсеть