Eu tenho uma instância do WordPress com o Varnish na frente no qual eu bloqueei o acesso a wp-login.php
via VCL usando:
sub vcl_recv {
# block outside access to login
if (req.url ~ "wp-admin" && !client.ip ~ white_list) {
return (synth(404, "Page not found"));
}
}
Para referência, white_list
é apenas um arquivo incluído com uma lista de IPs da lista branca. Até este ponto, isso funcionou muito bem.
Meu cliente solicitou recentemente o uso de páginas protegidas do WordPress para uma página protegida por senha. Descobri que esse método usa /wp-login.php?action=postpass
para validar a senha. Devido ao meu bloco whitelist de wp-login.php
alguns (não todos, o que é estranho), os pedidos retornam como 404.
Isso significa que todas as solicitações para /wp-login.php?action=postpass
devem ser passadas e todas as solicitações para wp-login.php
nas quais o IP solicitante não corresponde ao white_list
devem ser negadas. O que eu comecei foi:
sub vcl_recv {
# allow wp protected pages
if (req.url ~ "wp-login" && req.url ~ "\?action\=postpass$") {
return(pass);
} else if (req.url ~ "wp-(admin|login)" && !client.ip ~ white_list) {
return(synth(404, "Page not found"));
}
}
Isso me parece que deveria funcionar, mas não funciona. Como está, esta regra permite todo o acesso a wp-login.php
, independentemente do white_list
. Eu removi temporariamente && !client.ip ~ white_list
para manter o bloqueio, mas estou perplexo com o motivo de essa parte da condicional ter sido falsa quando ela já funcionou antes.
Tags varnish