Closes https://github.com/spantaleev/matrix-docker-ansible-deploy/pull/755pull/778/head
| @@ -1,3 +1,25 @@ | |||
| # 2021-01-08 | |||
| ## (Breaking Change) New SSL configuration | |||
| SSL configuration (protocols, ciphers) can now be more easily controlled thanks to us making use of configuration presets. | |||
| We define a few presets (old, intermediate, modern), following the [Mozilla SSL Configuration Generator](https://ssl-config.mozilla.org/#server=nginx). | |||
| A new variable `matrix_nginx_proxy_ssl_preset` controls which preset is used (defaults to `"intermediate"`). | |||
| Compared to before, this changes nginx's `ssl_prefer_server_ciphers` to `off` (used to default to `on`). It also add some more ciphers to the list, giving better performance on mobile devices, and removes some weak ciphers. More information in the [documentation](docs/configuring-playbook-nginx.md). | |||
| To revert to the old behaviour, set the following variables: | |||
| ```yaml | |||
| matrix_nginx_proxy_ssl_ciphers: "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH" | |||
| matrix_nginx_proxy_ssl_prefer_server_ciphers: "on" | |||
| ``` | |||
| Just like before, you can still use your own custom protocols by specifying them in `matrix_nginx_proxy_ssl_protocols`. Doing so overrides the values coming from the preset. | |||
| # 2021-01-03 | |||
| ## Signal bridging support via mautrix-signal | |||
| @@ -48,7 +70,6 @@ If you went with the Postgres migration and it went badly for you (some bridge n | |||
| - re-run the playbook (`ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start`) | |||
| - [get in touch](README.md#support) with us | |||
| # 2020-12-11 | |||
| ## synapse-janitor support removed | |||
| @@ -24,6 +24,27 @@ matrix_nginx_proxy_proxy_matrix_nginx_status_allowed_addresses: | |||
| - 1.1.1.1 | |||
| ``` | |||
| ## Adjusting SSL in your server | |||
| You can adjust how the SSL is served by the nginx server using the `matrix_nginx_proxy_ssl_preset` variable. We support a few presets, based on the Mozilla Server Side TLS | |||
| Recommended configurations. These presets influence the TLS Protocol, the SSL Cipher Suites and the `ssl_prefer_server_ciphers` variable of nginx. | |||
| Possible values are: | |||
| - `"modern"` - For Modern clients that support TLS 1.3, with no need for backwards compatibility | |||
| - `"intermediate"` (**default**) - Recommended configuration for a general-purpose server | |||
| - `"old"` - Services accessed by very old clients or libraries, such as Internet Explorer 8 (Windows XP), Java 6, or OpenSSL 0.9.8 | |||
| **Be really carefull when setting it to `"modern"`**. This could break comunication with other Matrix servers, limiting your federation posibilities. The | |||
| [Federarion tester](https://federationtester.matrix.org/) also won't work. | |||
| Besides changing the preset (`matrix_nginx_proxy_ssl_preset`), you can also directly override these 3 variables: | |||
| - `matrix_nginx_proxy_ssl_protocols`: for specifying the supported TLS protocols. | |||
| - `matrix_nginx_proxy_ssl_prefer_server_ciphers`: for specifying if the server or the client choice when negotiating the cipher. It can set to `on` or `off`. | |||
| - `matrix_nginx_proxy_ssl_ciphers`: for specifying the SSL Cipher suites used by nginx. | |||
| For more information about these variables, check the `roles/matrix-nginx-proxy/defaults/main.yml` file. | |||
| ## Synapse + OpenID Connect for Single-Sign-On | |||
| If you want to use OpenID Connect as an SSO provider (as per the [Synapse OpenID docs](https://github.com/matrix-org/synapse/blob/develop/docs/openid.md)), you need to use the following configuration (in your `vars.yml` file) to instruct nginx to forward `/_synapse/oidc` to Synapse: | |||
| @@ -219,8 +219,46 @@ matrix_nginx_proxy_proxy_domain_additional_server_configuration_blocks: [] | |||
| # a new SSL certificate could go into effect. | |||
| matrix_nginx_proxy_reload_cron_time_definition: "20 4 */5 * *" | |||
| # Specifies which SSL protocols to use when serving all the various vhosts | |||
| matrix_nginx_proxy_ssl_protocols: "TLSv1.2 TLSv1.3" | |||
| # Specifies the SSL configuration that should be used for the SSL protocols and ciphers | |||
| # This is based on the Mozilla Server Side TLS Recommended configurations. | |||
| # | |||
| # The posible values are: | |||
| # - "modern" - For Modern clients that support TLS 1.3, with no need for backwards compatibility | |||
| # - "intermediate" - Recommended configuration for a general-purpose server | |||
| # - "old" - Services accessed by very old clients or libraries, such as Internet Explorer 8 (Windows XP), Java 6, or OpenSSL 0.9.8 | |||
| # | |||
| # For more information visit: | |||
| # - https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations | |||
| # - https://ssl-config.mozilla.org/#server=nginx | |||
| matrix_nginx_proxy_ssl_preset: "intermediate" | |||
| # Presets are taken from Mozilla's Server Side TLS Recommended configurations | |||
| # DO NOT modify these values and use `matrix_nginx_proxy_ssl_protocols`, `matrix_nginx_proxy_ssl_ciphers` and `matrix_nginx_proxy_ssl_ciphers` | |||
| # if you wish to use something more custom. | |||
| matrix_nginx_proxy_ssl_presets: | |||
| modern: | |||
| protocols: TLSv1.3 | |||
| ciphers: "" | |||
| prefer_server_ciphers: "off" | |||
| intermediate: | |||
| protocols: TLSv1.2 TLSv1.3 | |||
| ciphers: ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 | |||
| prefer_server_ciphers: "off" | |||
| old: | |||
| protocols: TLSv1 TLSv1.1 TLSv1.2 TLSv1.3 | |||
| ciphers: ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA | |||
| prefer_server_ciphers: "on" | |||
| # Specifies which *SSL protocols* to use when serving all the various vhosts. | |||
| matrix_nginx_proxy_ssl_protocols: "{{ matrix_nginx_proxy_ssl_presets[matrix_nginx_proxy_ssl_preset]['protocols'] }}" | |||
| # Specifies whether to prefer *the client’s choice or the server’s choice* when negotiating ciphers. | |||
| matrix_nginx_proxy_ssl_prefer_server_ciphers: "{{ matrix_nginx_proxy_ssl_presets[matrix_nginx_proxy_ssl_preset]['prefer_server_ciphers'] }}" | |||
| # Specifies which *SSL Cipher suites* to use when serving all the various vhosts. | |||
| # To see the full list for suportes ciphers run `openssl ciphers` on your server | |||
| matrix_nginx_proxy_ssl_ciphers: "{{ matrix_nginx_proxy_ssl_presets[matrix_nginx_proxy_ssl_preset]['ciphers'] }}" | |||
| # Controls whether the self-check feature should validate SSL certificates. | |||
| matrix_nginx_proxy_self_check_validate_certificates: true | |||
| @@ -18,3 +18,9 @@ | |||
| msg: >- | |||
| `matrix_ssl_retrieval_method` needs to be set to a known value. | |||
| when: "matrix_ssl_retrieval_method not in ['lets-encrypt', 'self-signed', 'manually-managed', 'none']" | |||
| - name: Fail on unknown matrix_nginx_proxy_ssl_config | |||
| fail: | |||
| msg: >- | |||
| `matrix_nginx_proxy_ssl_preset` needs to be set to a known value. | |||
| when: "matrix_nginx_proxy_ssl_preset not in ['modern', 'intermediate', 'old']" | |||
| @@ -5,7 +5,7 @@ | |||
| gzip_types text/plain application/json application/javascript text/css image/x-icon font/ttf image/gif; | |||
| add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; | |||
| add_header X-Content-Type-Options nosniff; | |||
| add_header X-Frame-Options SAMEORIGIN; | |||
| add_header X-Frame-Options SAMEORIGIN; | |||
| {% for configuration_block in matrix_nginx_proxy_proxy_element_additional_server_configuration_blocks %} | |||
| {{- configuration_block }} | |||
| {% endfor %} | |||
| @@ -67,9 +67,12 @@ server { | |||
| ssl_certificate {{ matrix_ssl_config_dir_path }}/live/{{ matrix_nginx_proxy_proxy_element_hostname }}/fullchain.pem; | |||
| ssl_certificate_key {{ matrix_ssl_config_dir_path }}/live/{{ matrix_nginx_proxy_proxy_element_hostname }}/privkey.pem; | |||
| ssl_protocols {{ matrix_nginx_proxy_ssl_protocols }}; | |||
| ssl_prefer_server_ciphers on; | |||
| ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; | |||
| {% if matrix_nginx_proxy_ssl_ciphers != "" %} | |||
| ssl_ciphers {{ matrix_nginx_proxy_ssl_ciphers }}; | |||
| {% endif %} | |||
| ssl_prefer_server_ciphers {{ matrix_nginx_proxy_ssl_prefer_server_ciphers }}; | |||
| {{ render_vhost_directives() }} | |||
| } | |||
| @@ -65,9 +65,12 @@ server { | |||
| ssl_certificate {{ matrix_ssl_config_dir_path }}/live/{{ matrix_nginx_proxy_proxy_dimension_hostname }}/fullchain.pem; | |||
| ssl_certificate_key {{ matrix_ssl_config_dir_path }}/live/{{ matrix_nginx_proxy_proxy_dimension_hostname }}/privkey.pem; | |||
| ssl_protocols {{ matrix_nginx_proxy_ssl_protocols }}; | |||
| ssl_prefer_server_ciphers on; | |||
| ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; | |||
| {% if matrix_nginx_proxy_ssl_ciphers != '' %} | |||
| ssl_ciphers {{ matrix_nginx_proxy_ssl_ciphers }}; | |||
| {% endif %} | |||
| ssl_prefer_server_ciphers {{ matrix_nginx_proxy_ssl_prefer_server_ciphers }}; | |||
| {{ render_vhost_directives() }} | |||
| } | |||
| @@ -58,9 +58,12 @@ server { | |||
| ssl_certificate {{ matrix_ssl_config_dir_path }}/live/{{ matrix_nginx_proxy_base_domain_hostname }}/fullchain.pem; | |||
| ssl_certificate_key {{ matrix_ssl_config_dir_path }}/live/{{ matrix_nginx_proxy_base_domain_hostname }}/privkey.pem; | |||
| ssl_protocols {{ matrix_nginx_proxy_ssl_protocols }}; | |||
| ssl_prefer_server_ciphers on; | |||
| ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; | |||
| {% if matrix_nginx_proxy_ssl_ciphers != '' %} | |||
| ssl_ciphers {{ matrix_nginx_proxy_ssl_ciphers }}; | |||
| {% endif %} | |||
| ssl_prefer_server_ciphers {{ matrix_nginx_proxy_ssl_prefer_server_ciphers }}; | |||
| {{ render_vhost_directives() }} | |||
| } | |||
| @@ -86,9 +86,12 @@ server { | |||
| ssl_certificate {{ matrix_ssl_config_dir_path }}/live/{{ matrix_nginx_proxy_proxy_jitsi_hostname }}/fullchain.pem; | |||
| ssl_certificate_key {{ matrix_ssl_config_dir_path }}/live/{{ matrix_nginx_proxy_proxy_jitsi_hostname }}/privkey.pem; | |||
| ssl_protocols {{ matrix_nginx_proxy_ssl_protocols }}; | |||
| ssl_prefer_server_ciphers on; | |||
| ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; | |||
| {% if matrix_nginx_proxy_ssl_ciphers != '' %} | |||
| ssl_ciphers {{ matrix_nginx_proxy_ssl_ciphers }}; | |||
| {% endif %} | |||
| ssl_prefer_server_ciphers {{ matrix_nginx_proxy_ssl_prefer_server_ciphers }}; | |||
| {{ render_vhost_directives() }} | |||
| } | |||
| @@ -51,9 +51,12 @@ server { | |||
| ssl_certificate {{ matrix_ssl_config_dir_path }}/live/{{ matrix_nginx_proxy_proxy_riot_compat_redirect_hostname }}/fullchain.pem; | |||
| ssl_certificate_key {{ matrix_ssl_config_dir_path }}/live/{{ matrix_nginx_proxy_proxy_riot_compat_redirect_hostname }}/privkey.pem; | |||
| ssl_protocols {{ matrix_nginx_proxy_ssl_protocols }}; | |||
| ssl_prefer_server_ciphers on; | |||
| ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; | |||
| {% if matrix_nginx_proxy_ssl_ciphers != '' %} | |||
| ssl_ciphers {{ matrix_nginx_proxy_ssl_ciphers }}; | |||
| {% endif %} | |||
| ssl_prefer_server_ciphers {{ matrix_nginx_proxy_ssl_prefer_server_ciphers }}; | |||
| {{ render_vhost_directives() }} | |||
| } | |||
| @@ -203,9 +203,12 @@ server { | |||
| ssl_certificate {{ matrix_ssl_config_dir_path }}/live/{{ matrix_nginx_proxy_proxy_matrix_hostname }}/fullchain.pem; | |||
| ssl_certificate_key {{ matrix_ssl_config_dir_path }}/live/{{ matrix_nginx_proxy_proxy_matrix_hostname }}/privkey.pem; | |||
| ssl_protocols {{ matrix_nginx_proxy_ssl_protocols }}; | |||
| ssl_prefer_server_ciphers on; | |||
| ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; | |||
| {% if matrix_nginx_proxy_ssl_ciphers != '' %} | |||
| ssl_ciphers {{ matrix_nginx_proxy_ssl_ciphers }}; | |||
| {% endif %} | |||
| ssl_prefer_server_ciphers {{ matrix_nginx_proxy_ssl_prefer_server_ciphers }}; | |||
| {{ render_vhost_directives() }} | |||
| } | |||
| @@ -235,9 +238,13 @@ server { | |||
| {% if matrix_nginx_proxy_https_enabled %} | |||
| ssl_certificate {{ matrix_nginx_proxy_proxy_matrix_federation_api_ssl_certificate }}; | |||
| ssl_certificate_key {{ matrix_nginx_proxy_proxy_matrix_federation_api_ssl_certificate_key }}; | |||
| ssl_protocols {{ matrix_nginx_proxy_ssl_protocols }}; | |||
| ssl_prefer_server_ciphers on; | |||
| ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; | |||
| ssl_protocols {{ matrix_nginx_proxy_ssl_protocols }}; | |||
| {% if matrix_nginx_proxy_ssl_ciphers != '' %} | |||
| ssl_ciphers {{ matrix_nginx_proxy_ssl_ciphers }}; | |||
| {% endif %} | |||
| ssl_prefer_server_ciphers {{ matrix_nginx_proxy_ssl_prefer_server_ciphers }}; | |||
| {% endif %} | |||
| location / { | |||