Evite que o mod_status do Apache seja exposto pelo verniz

2

Uma caixa do Ubuntu 9.04 rodando o Apache no 8080 e o Varnish no 80.

Recentemente, configurei Munin e fiquei me perguntando por que os gráficos do Apache estão vazios. Vi os logs que Munin está acessando /server-status?auto e recebendo 403 Forbidden de volta. Então eu editei /etc/apache2/monds-enabled/status.conf para permitir acesso de 127.0.0.1 . Mas fazer isso realmente tornou /server-status public, já que as solicitações provenientes do Varnish parecem vir de 127.0.0.1 também.

Então a pergunta é: como eu configuro o mod_status para ser acessível somente por munin-node e não pelo verniz?

    
por Pēteris Caune 03.11.2010 / 10:47

3 respostas

3

A maneira como resolvo isso é garantir que o Apache obtenha o IP do visitante real mesmo quando as solicitações passam pelo cache de verniz. Eu uso o mod_rpaf do Apache para isso (veja link ).

Além disso, apenas no caso de o pedido do cliente também passar por algum proxy que defina o cabeçalho X-Forwarded-For, eu o redefino na minha instância de cache de verniz (em vcl_recv):

  remove req.http.X-Forwarded-For;
  set    req.http.X-Forwarded-For = client.ip;

Em seguida, informe também ao verniz para nunca armazenar em cache a resposta para / server-status e / server-info. O seguinte (também em vcl_recv) funciona para mim:

  if (req.url ~ "server-(info|status)") {
    return (pass);
  }
    
por 16.04.2012 / 06:39
1

Isto parece uma solução, diga-me o que você pensa.

O Varnish adiciona alguns cabeçalhos HTTP, como X-Varnish , a todas as solicitações enviadas para o back-end. Estes podem ser usados na configuração do Apache para reconhecer pedidos vindos do verniz.

Em /etc/apache2/mods-enabled/status.conf :

<IfModule mod_status.c>

SetEnvIf X-Varnish ".+" from_varnish
ExtendedStatus On

<Location /server-status>
    SetHandler server-status
    Order allow,deny
    Deny from env=from_varnish
    Allow from localhost ip6-localhost 127.0.0.1

</Location>

</IfModule>

Em seguida, diga ao munin para monitorar a porta 8080, em vez de 80. Os pedidos de munin-node virão diretamente e, portanto, não terão o conjunto de cabeçalhos X-Varnish .

Adicionado a /etc/munin/plugin-conf.d/munin-node :

[apache_*]
env.url   http://127.0.0.1:%d/server-status?auto
env.ports 8080
    
por 03.11.2010 / 11:41
0

Eu tive a mesma situação com o Ubuntu 12.04, Apache2 na porta 8008 e Varnish na porta 80. Com o Varnish VCL eu estava usando minha página de status do servidor foi armazenada em cache por uma hora, por isso ainda estava disponível, mas só forneceu um relatório de status quando o cache é atualizado. A implementação da solução de Alain tornou o status do servidor ativo disponível através do Varnish, à medida que passava para o backend. Para garantir meu status de servidor, fiz o seguinte:

Configurei o munin-node para escutar no 8008 em /etc/munin/plugin-conf.d/munin-node:

[apache_*]
env.url   http://127.0.0.1:%d/server-status?auto
env.ports 8008

Em seguida, adicionei a seguinte linha à minha VCL na parte superior da seção vcl_recv:

if (req.url ~ "^/server-status") {
error 403;
}

Isso bloqueia o acesso à URL de status do servidor na porta 80 com uma mensagem proibida 403, mas o nó munin ainda pode se conectar ao status do servidor em localhost: 8008

Esta postagem foi útil: link

    
por 28.01.2013 / 13:22