ssl configuração de proxy nginx para roundcube

1

Estou executando o webmail roundcube em um servidor da Web nginx que serve apenas http.

Isso é intermediado por outro nginx que serve https.

Ambos são prisões separadas do FreeBSD na mesma máquina.

Eu basicamente posso acessar a página da web do roundcube através do endereço do proxy, mas alguns recursos não estão funcionando. Por exemplo:

  • a seleção de um item da lista de mensagens não exibe o conteúdo no iframe de visualização
  • selecionando um item da lista de mensagens e clicando nos botões superiores, o botão Excluir não exclui o item. No entanto, o botão de resposta, bem como marcar como lido funciona.
  • Arrastar e soltar uma mensagem em uma pasta não funciona. Ele mostra todos os realces e animações durante o arrasto, mas a mensagem não é movida ao soltar
  • No entanto, clicar duas vezes em uma mensagem para abri-la na exibição de quadro completo funciona bem.

Alguém tem alguma idéia do que poderia ser o problema aqui? O mesmo proxy com a mesma configuração está funcionando bem para minha instância owncloud.

Os logs de erro de ambas as instâncias nginx não mostram nenhuma entrada quando eu seleciono uma mensagem quando estou conectado via proxy.

No entanto, ao selecionar uma mensagem sem proxy entre, vejo o seguinte log no access.log:

10.0.0.25 - - [05/Jan/2016:14:03:22 +0100] "GET /?_task=mail&_caps=pdf%3D1%2Cflash%3D1%2Ctif%3D0&_uid=44613&_mbox=INBOX&_framed=1&_action=preview HTTP/1.1" 200 11236 "http://10.0.0.211/?_task=mail&_mbox=INBOX" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0"
10.0.0.25 - - [05/Jan/2016:14:03:22 +0100] "GET /skins/larry/styles.min.css?s=1448290416 HTTP/1.1" 304 0 "http://10.0.0.211/?_task=mail&_caps=pdf%3D1%2Cflash%3D1%2Ctif%3D0&_uid=44613&_mbox=INBOX&_framed=1&_action=preview" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0"
10.0.0.25 - - [05/Jan/2016:14:03:22 +0100] "GET /skins/larry/mail.min.css?s=1448290416 HTTP/1.1" 304 0 "http://10.0.0.211/?_task=mail&_caps=pdf%3D1%2Cflash%3D1%2Ctif%3D0&_uid=44613&_mbox=INBOX&_framed=1&_action=preview" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0"
10.0.0.25 - - [05/Jan/2016:14:03:22 +0100] "GET /plugins/jqueryui/themes/larry/jquery-ui-1.10.4.custom.css?s=1448290415 HTTP/1.1" 304 0 "http://10.0.0.211/?_task=mail&_caps=pdf%3D1%2Cflash%3D1%2Ctif%3D0&_uid=44613&_mbox=INBOX&_framed=1&_action=preview" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0"
10.0.0.25 - - [05/Jan/2016:14:03:22 +0100] "GET /skins/larry/ui.min.js?s=1448290416 HTTP/1.1" 304 0 "http://10.0.0.211/?_task=mail&_caps=pdf%3D1%2Cflash%3D1%2Ctif%3D0&_uid=44613&_mbox=INBOX&_framed=1&_action=preview" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0"
10.0.0.25 - - [05/Jan/2016:14:03:22 +0100] "GET /program/js/jquery.min.js?s=1448290416 HTTP/1.1" 304 0 "http://10.0.0.211/?_task=mail&_caps=pdf%3D1%2Cflash%3D1%2Ctif%3D0&_uid=44613&_mbox=INBOX&_framed=1&_action=preview" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0"
10.0.0.25 - - [05/Jan/2016:14:03:22 +0100] "GET /program/js/common.min.js?s=1448290416 HTTP/1.1" 304 0 "http://10.0.0.211/?_task=mail&_caps=pdf%3D1%2Cflash%3D1%2Ctif%3D0&_uid=44613&_mbox=INBOX&_framed=1&_action=preview" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0"
10.0.0.25 - - [05/Jan/2016:14:03:22 +0100] "GET /program/js/app.min.js?s=1448290416 HTTP/1.1" 304 0 "http://10.0.0.211/?_task=mail&_caps=pdf%3D1%2Cflash%3D1%2Ctif%3D0&_uid=44613&_mbox=INBOX&_framed=1&_action=preview" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0"
10.0.0.25 - - [05/Jan/2016:14:03:22 +0100] "GET /plugins/jqueryui/js/jquery-ui-1.10.4.custom.min.js?s=1448290415 HTTP/1.1" 304 0 "http://10.0.0.211/?_task=mail&_caps=pdf%3D1%2Cflash%3D1%2Ctif%3D0&_uid=44613&_mbox=INBOX&_framed=1&_action=preview" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0"
10.0.0.25 - - [05/Jan/2016:14:03:22 +0100] "GET /plugins/jqueryui/js/i18n/jquery.ui.datepicker-de.js?s=1448290415 HTTP/1.1" 304 0 "http://10.0.0.211/?_task=mail&_caps=pdf%3D1%2Cflash%3D1%2Ctif%3D0&_uid=44613&_mbox=INBOX&_framed=1&_action=preview" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0"

Quando clico em uma mensagem WITH the proxy in between, o log de acesso de ambas as instâncias nginx não mostra novas entradas.

Isso pode sugerir o que pode estar errado com minha configuração?

Aqui estão as minhas configurações do nginx:

nginx da prisão do roundcube:

worker_processes  2;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
                #listen      80;
                root        /usr/local/www/roundcubemail;

                # Logs
                access_log  /usr/home/webmail/roundcube-access.log;
                error_log   /usr/home/webmail/roundcube-error.log;

                # Default location settings
                location / {
                        index   index.php;
                        try_files $uri $uri/ /index.php?$args;
                }

                # Redirect server error pages to the static page /50x.html
                error_page 500 502 503 504 /50x.html;
                        location = /50x.html {
                        root /usr/share/nginx/html;
                }

                # Pass the PHP scripts to FastCGI server (locally with unix: param to avoid network overhead)
                location ~ \.php$ {
                        # Prevent Zero-day exploit
                        try_files $uri =404;

                        fastcgi_keep_conn on;
                        fastcgi_split_path_info       ^(.+\.php)(.*)$;
                        fastcgi_param PATH_INFO       $fastcgi_path_info;
                        fastcgi_param SCRIPT_FILENAME    $document_root$fastcgi_script_name;
                        fastcgi_pass    unix:/var/run/php-fpm.sock;
                        fastcgi_index   index.php;
                        include         fastcgi_params;
                }

                # Deny access to .htaccess files, if Apache's document root
                location ~ /\.ht {
                    deny  all;
                }

                # Exclude favicon from the logs to avoid bloating when it's not available
                location /favicon.ico {
                        log_not_found   off;
                        access_log      off;
                }
        }
}

nginx da cadeia proxy:

worker_processes  2;

error_log  /usr/local/etc/nginx/proxy.error.log;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen 80;
        return 301 https://$host$request_uri;
    }

    server {
        listen 443;
        server_name mydomain.tld;

        ssl_certificate           /usr/local/etc/nginx/server.crt;
        ssl_certificate_key       /usr/local/etc/nginx/server.key;

        ssl on;
        ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;
        add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
        add_header X-Frame-Options DENY;
        add_header X-Content-Type-Options nosniff;
        ssl_session_tickets off; # Requires nginx >= 1.5.9
        resolver_timeout 5s;

        access_log            /usr/local/etc/nginx/proxy.access.log;

        location ^~ /owncloud {
            proxy_set_header X-Forwarded-Host mydomain.tld;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_pass http://10.0.0.202:80/owncloud;
            proxy_redirect http:// https://;
            client_max_body_size 2G;
        }
        location ^~ /mail {
            proxy_set_header X-Forwarded-Host mydomain.tld;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_pass http://10.0.0.211:80/;
            proxy_redirect http:// https://;
        }
    }
}
    
por TorbenKorx 05.01.2016 / 14:10

2 respostas

1

Encontrei a solução!

Na configuração do proxy, a linha

add_header X-Frame-Options DENY;

causou perigo.

Se eu comentar tudo funciona bem.

Diferente do que eu encontrei em outras fontes, a opção $config['x_frame_options'] = 'sameorigin'; no defaults.inc.php do roundcube pode permanecer no valor padrão e não precisa ser alterada para falsa.

Talvez isso ajude alguém no futuro com um problema semelhante.

    
por 13.01.2016 / 18:52
0

Seu proxy não é transparente, está traduzindo URIs como /mail/xxx para /xxx no servidor de e-mail.

Olhando para o access.log , a página da Web contém recursos incorporados em /skins , /plugins e /program . Quando esses recursos são acessados por meio do proxy, não há uma regra para enviar a solicitação ao servidor de correio. Portanto, suas páginas da Web estão incompletas.

A solução mais simples é provavelmente tornar seu proxy transparente para o servidor de correio, já que você afirma que o proxy owncloud está funcionando. Experimente:

location /owncloud {
    # owncloud proxy
}
location / {
    # mail proxy
}

Assim, todos os URIs serão passados de forma transparente para o servidor de e-mail, exceto os URIs especificamente direcionados ao serviço owncloud.

    
por 05.01.2016 / 20:01