Portanto, a solução alternativa para isso (possível bug em 4.1.3-1.el7.x86_64) foi uma pista que encontrei enquanto procurava outras questões de registro de verniz, especificamente uma sobre desabilitando o cabeçalho x-forwarded-for completamente .
Embora isso não seja o que eu queria fazer, ele forneceu a dica sobre como evitar que o verniz anexasse seu próprio conteúdo vcl_recv ao buttom da minha definição de função vcl_recv. Especificamente, forneça seu próprio retorno (pesquisa) (embora seja o verniz < = 3) ou o retorno (hash) (verniz 4.x).
Então agora eu tenho isso no topo do vcl_recv ():
# ensure proper logging of x-forwarded-for IP addresses
std.collect(req.http.x-forwarded-for);
set req.http.x-forwarded-for = regsub ( req.http.x-forwarded-for, "^(([0-9]{1,3}\.){3}[0-9]{1,3})(.*)", "" );
if (req.http.x-forwarded-for) {
std.log("ip:" + req.http.x-forwarded-for);
} else {
std.log("ip:" + client.ip);
}
Então, no final da função, tenho, claro, como mencionei:
return (hash);
Portanto, agora é log de sucesso apenas o endereço IP do cliente como deveria ser com a adição de uma opção de varnishncsa de:
-F "%%{VCL_Log:ip}x %%l %%u %%t \"%%r\" %%s %%b \"%%{Referer}i\" \"%%{User-agent}i\""
Espero que alguém encontre essa informação útil.
UPDATE: Apenas como uma nota, encontrei este postar sobre spoofing nesta resposta nginx e seria legal ter uma espécie de real_ip_from ou trusted_ip_from cabeçalhos em verniz como bem, mas não parece nativamente no momento. Minha solução inicial selecionará o endereço falsificado nesse caso. Portanto, seria melhor ter um regex com IPs conhecidos removidos e, em vez disso, você pegaria o primeiro IP do cliente não manipulado. Algo assim funcionaria:
set req.http.x-forwarded-for = regsub ( req.http.x-forwarded-for, "(([0-9]{1,3}\.){3}[0-9]{1,3})(, (172.25.20.65|172.25.10.228),?)+$", "" );
em que 172.25.20.65 e 172.25.10.228 são meus IPs confiáveis (proxies ou balanceadores de carga captados e adicionados ao X-Forwarded-For, etc). Dependendo se você espera ver um proxy / LB na frente dele, seu regex pode ser isso se você espera que sempre haja pelo menos um balanceador de carga / proxy no seu cabeçalho:
(([0-9]{1,3}\.){3}[0-9]{1,3})(, (<trustedip1>|<trustedip2>|...),?)+$
ou isto se for permitido não ter nada antes do seu servidor de verniz:
(([0-9]{1,3}\.){3}[0-9]{1,3})(, (<trustedip1>|<trustedip2>|...),?)*$
Embora este seja o caso, por que você estaria olhando para o cabeçalho x-forwarded-for ...