lighttpd + Webmin em uma subpasta [fechada]

1

Estou usando o Webmin para a administração do meu servidor doméstico.

Em vez de executá-lo na porta padrão ( link ), eu queria hospedá-lo em uma subpasta ( link ). Isso está funcionando perfeitamente quando usando o Apache (arquivos de configuração do Apache estão anexados abaixo). No entanto, estou usando normalmente o lighttpd e queria fazer o mesmo (executando o Webmin em uma subpasta) com o lighttpd. No entanto, não está funcionando corretamente. Sempre que vou ao link , recebo a mensagem:

Error - Bad Request
This web server is running in SSL mode. Try the URL https://localhost:10000/ instead.

Então eu olhei um pouco mais para o assunto. Em vez de executar o Webmin, usei o netcat para escutar a porta 10000. Ao usar o lighttpd, recebo:

myhost@myhost:~$ nc -l 10000
GET /webmin/ HTTP/1.0
Host: myhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: testing=1
Cache-Control: max-age=0
X-Forwarded-For: 192.168.159.1
X-Host: myhost
X-Forwarded-Proto: https

Considerando que, ao usar o Apache, recebo:

myhost@myhost:~$ nc -l 10000
ÌÈOPù¶°$óI¢ÚH,-ånú­? ÆÀ2´ûZÀÀ
98ÀÀ5
À    ÀÀ
ÀÀ      32EDÀÀ/AÀÀÀ
ÀÿD

42
#PuTTYPuTTYPuTTY^C

Como você pode ver, este é provavelmente um handshake SSL. A interrupção do netcat nesse ponto também mostra a mensagem de erro do Apache "Motivo: erro durante o handshake SSL com o servidor remoto", portanto, tenho certeza de que um handshake SSL está realmente acontecendo aqui.

Isso significa que o Webmin está certo, a solicitação que recebe não é um HTTPS, mas uma solicitação HTTP.

Então a questão é: por que o Apache está usando corretamente o HTTPS para proxy, enquanto o lighttpd usa HTTP com algum Proto X-Encaminhado para proxy? Como posso conseguir um proxy SSL similar com o lighttpd?

Para o registro, todas as alterações feitas nos arquivos de configuração que fiz. Eu adicionei as seguintes linhas ao / etc / webmin / config:

webprefix=/webmin
webprefixnoredir=1
referer=myhost

Eu adicionei o seguinte para o lighttpd no lighttpd.conf (que produz o erro acima):

$HTTP["url"] =~ "^/webmin" {
   proxy.server  = ( "/webmin/" =>
     ( (
        "strip-request-uri" => "/webmin",
        "host" => "127.0.0.1",
        "port" => 10000,
        "fix-redirects" => 1
     ) ) )
}

E estou usando o seguinte arquivo de configuração para o Apache (que está funcionando corretamente):

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so

ProxyPass /webmin/ https://myhost:10000/
ProxyPassReverse /webmin/ https://myhost:10000/
SSLProxyEngine On

<Proxy *>
allow from all
SSLRequireSSL
</Proxy>

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
    </VirtualHost>
</IfModule>
    
por Edward Fuller 02.03.2012 / 18:27

1 resposta

5

Deixa pra lá, funcionou agora.

Oh espere, você pensou que é tudo? Não, colegas usuários de mecanismos de busca e de falha de servidor, aqui está um guia sobre como configurar o lighttpd com o Webmin em execução em uma subpasta. Aproveite!

Pré-requisitos

O objetivo deste guia é configurar uma instalação lighttpd junto com o Webmin, para que seja possível acessar a interface Webmin no * link .

Quando este guia foi escrito, a versão atual do Webmin era 1.580, e a versão lighttpd usada era a 1.4.28. Eu suponho que você já tenha instalado os dois. O nome "myhost" sempre denota o nome do host da máquina na qual o lighttpd é executado.

Etapas

1. Configuração do Webmin

Como mencionado no guia oficial do Apache, você deve adicionar as seguintes linhas ao / etc / webmin / config:

webprefix=/webmin
webprefixnoredir=1
referer=myhost

2. Desativar SSL no Webmin

Sim, você ouviu bem, e como Shane Madden mencionou no comentário acima, isso não é inseguro, já que a comunicação é assim:

client <----SSL----> myhost <--Loopback--> myhost:10000

O Webmin estará se comunicando com a instância do lighttpd em execução no myhost através do dispositivo de loopback, que está dentro da máquina, que normalmente só pode ser obversed com privilégios de superusuário. A comunicação entre o cliente e o lighttpd ainda estará usando o SSL.

Então e como desativar o SSL no Webmin? Basta editar a seguinte linha no /etc/webmin/miniserv.conf:

ssl=0

3. Configuração do Lighttpd

Adicione as seguintes linhas ao seu /etc/lighttpd/lighttpd.conf:

$HTTP["url"] =~ "^/webmin" {
  magnet.attract-physical-path-to = ( "/var/www/webmin/conf/webmin-rewrite.lua" )

  proxy.server  = ( "" =>
    ( (
        "host" => "127.0.0.1",
        "port" => 10000,
    ) ) )
}

Como você pode ver, verificamos se o URL começa com "/ webmin" e o redirecionamento para a instância do Webmin ouvindo 127.0.0.1:10000. No entanto, o Webmin não espera ter o caminho adicional "... / webmin" em seu URL de solicitação, portanto, temos que retirar isso do URL. No entanto, como estamos em uma condição $ HTTP ["url"] -, não podemos usar nenhuma técnica de reescrita de URL apresentada pelo mod_rewrite. (Caso contrário, simplesmente diríamos "strip-request-uri" = > "/ webmin", mas isso não funcionará. Esse é um problema conhecido, não corrigido, do lighttpd 1.4. Veja também a documentação do mod_rewrite.) pode usar mod_magnet para reescrever a URL em um script LUA.

4. Script LUA para mod_magnet

Crie /var/www/webmin/conf/webmin-rewrite.lua com o seguinte conteúdo:

subfolder = "/webmin"
n = string.len(subfolder)

if string.sub(lighty.env["request.uri"], 1, n) == subfolder then
    lighty.env["request.uri"] = string.sub(lighty.env["request.uri"], n+1)
end

Isso retira o prefixo "/ webmin" dos URLs de solicitação.

5. Alterações de código para corrigir redirecionamentos

Isso já funciona quase, no entanto, ainda há um bug no código de redirecionamento do Webmin, também mencionado aqui . Em /usr/share/webmin/miniserv.pl, altere a linha

&write_data("Location: $prot://$host$portstr$in{'page'}\r\n");

para

&write_data("Location: $prot://$host$config{'subfolder_prefix'}$in{'page'}\r\n");

E em /etc/webmin/miniserv.conf, adicione a linha:

subfolder_prefix=/webmin

Isso corrige o redirecionamento de login do Webmin e está pronto!

Mais notas

A partir do lighttpd versão 1.5, você provavelmente pode substituir o script LUA pelo mod_proxy_core, já que é capaz de reescrever os URLs de solicitação. No entanto, eu não tentei isso.

Além disso, como não há mais necessidade de acessar a porta 10000 do lado de fora, sugiro bloqueá-la:

iptables -A INPUT -i eth0 -p tcp --dport 10000 -j REJECT --reject-with tcp-reset

No entanto, este comando pode variar dependendo da sua configuração local.

    
por 03.03.2012 / 14:25

Tags