From 6857d1f606042c3b707076c913a7ebe2b7c5e238 Mon Sep 17 00:00:00 2001 From: Lars Beckers <lars.beckers@rwth-aachen.de> Date: Fri, 19 Jul 2019 17:02:58 +0200 Subject: [PATCH] dovecot: preset-based tls config, new presets, buster compat --- dovecot/defaults/main.yml | 7 ++++--- dovecot/tasks/main.yml | 21 +++++++++++++++++++++ dovecot/templates/conf.d/10-ssl.conf.j2 | 25 +++++++++++++++++++++++-- dovecot/vars/tls-intermediate.yml | 8 ++++++++ dovecot/vars/tls-modern.yml | 8 ++++++++ dovecot/vars/tls-old.yml | 8 ++++++++ dovecot/vars/tls-previous.yml | 8 ++++++++ 7 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 dovecot/vars/tls-intermediate.yml create mode 100644 dovecot/vars/tls-modern.yml create mode 100644 dovecot/vars/tls-old.yml create mode 100644 dovecot/vars/tls-previous.yml diff --git a/dovecot/defaults/main.yml b/dovecot/defaults/main.yml index 9c147a9..f2b867c 100644 --- a/dovecot/defaults/main.yml +++ b/dovecot/defaults/main.yml @@ -14,9 +14,10 @@ dovecot_max_uid: 0 dovecot_tls_cert: /etc/ssl/private/fullchain.pem dovecot_tls_key: /etc/ssl/private/privkey.pem dovecot_tls_ca_dir: /etc/ssl/certs -dovecot_tls_ciphers: "{{ tls_ciphers }}" -dovecot_tls_dh_length: 4096 -dovecot_tls_protocols: 'TLSv1.1 TLSv1.2 !SSLv3' + +# possible values: modern, intermediate, old, previous +# see also: https://ssl-config.mozilla.org/ +dovecot_tls_configuration: 'previous' dovecot_dsync: false dovecot_dsync_tls: false diff --git a/dovecot/tasks/main.yml b/dovecot/tasks/main.yml index 9148c20..0102bde 100644 --- a/dovecot/tasks/main.yml +++ b/dovecot/tasks/main.yml @@ -1,5 +1,12 @@ --- +- name: "include tls config vars (preset: {{ dovecot_tls_configuration }})" + include_vars: + file: "tls-{{ dovecot_tls_configuration }}.yml" + tags: + - dovecot + - mail + - name: ensure all required dovecot packages are installed apt: name: @@ -36,6 +43,20 @@ - dovecot - mail +- name: ensure dh params are available + copy: + src: "{{ dovecot_tls_dh_file }}" + dest: /etc/dovecot/dh.pem + owner: root + group: root + mode: '0644' + when: dovecot_tls_dh_file is string + notify: + - restart dovecot + tags: + - dovecot + - mail + - name: ensure there is a folder for global sieve scripts file: dest: /var/lib/dovecot/sieve.d diff --git a/dovecot/templates/conf.d/10-ssl.conf.j2 b/dovecot/templates/conf.d/10-ssl.conf.j2 index 54bfbc8..a461620 100644 --- a/dovecot/templates/conf.d/10-ssl.conf.j2 +++ b/dovecot/templates/conf.d/10-ssl.conf.j2 @@ -42,18 +42,39 @@ ssl_client_ca_dir = {{ dovecot_tls_ca_dir }} # auth_ssl_username_from_cert=yes. #ssl_cert_username_field = commonName +{% if ansible_distribution_major_version|int < 10 %} # DH parameters length to use. +{% if dovecot_tls_dh_length %} ssl_dh_parameters_length = {{ dovecot_tls_dh_length }} +{% else %} +#ssl_dh_parameters_length = +{% endif %} +{% else %} +# DH parameters to use. +{% if dovecot_tls_dh_file %} +ssl_dh = </etc/dovecot/dh.pem +{% else %} +#ssl_dh = +{% endif %} +{% endif %} +{% if ansible_distribution_major_version|int < 10 %} # SSL protocols to use ssl_protocols = {{ dovecot_tls_protocols }} +{% else %} +# Minimum TLS version to use +ssl_min_protocol = {{ dovecot_tls_min_protocol }} +{% endif %} # SSL ciphers to use -#ssl_cipher_list = HIGH:!LOW:!SSLv2:!EXP:!aNULL:!MD5:!RC4:!SHA1 +{% if dovecot_tls_ciphers %} ssl_cipher_list = {{ dovecot_tls_ciphers }} +{% else %} +#ssl_cipher_list = +{% endif %} # Prefer the server's order of ciphers over client's. -ssl_prefer_server_ciphers = yes +ssl_prefer_server_ciphers = {{ 'yes' if dovecot_tls_prefer_server_ciphers else 'no' }} # SSL crypto device to use, for valid values run "openssl engine" #ssl_crypto_device = diff --git a/dovecot/vars/tls-intermediate.yml b/dovecot/vars/tls-intermediate.yml new file mode 100644 index 0000000..dcb1468 --- /dev/null +++ b/dovecot/vars/tls-intermediate.yml @@ -0,0 +1,8 @@ +--- + +dovecot_tls_protocols: 'TLSv1.2 TLSv1.3' +dovecot_tls_min_protocol: 'TLSv1.2' +dovecot_tls_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' +dovecot_tls_dh_length: 4096 # 2048 +dovecot_tls_dh_file: ffdhe4096.txt # ffdhe2048.txt +dovecot_tls_prefer_server_ciphers: false diff --git a/dovecot/vars/tls-modern.yml b/dovecot/vars/tls-modern.yml new file mode 100644 index 0000000..ef71bdd --- /dev/null +++ b/dovecot/vars/tls-modern.yml @@ -0,0 +1,8 @@ +--- + +dovecot_tls_protocols: 'TLSv1.3' +dovecot_tls_min_protocol: 'TLSv1.3' +dovecot_tls_ciphers: null +dovecot_tls_dh_length: null +dovecot_tls_dh_file: null +dovecot_tls_prefer_server_ciphers: false diff --git a/dovecot/vars/tls-old.yml b/dovecot/vars/tls-old.yml new file mode 100644 index 0000000..936012f --- /dev/null +++ b/dovecot/vars/tls-old.yml @@ -0,0 +1,8 @@ +--- + +dovecot_tls_protocols: 'TLSv1 TLSv1.1 TLSv1.2 !SSLv3' +dovecot_tls_min_protocol: 'TLSv1' +dovecot_tls_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' +dovecot_tls_dh_length: 2048 # 1024 +dovecot_tls_dh_file: ffdhe2048.txt # openssl dhparam 1024 > ffdhe1024.txt +dovecot_tls_prefer_server_ciphers: true diff --git a/dovecot/vars/tls-previous.yml b/dovecot/vars/tls-previous.yml new file mode 100644 index 0000000..82d3f36 --- /dev/null +++ b/dovecot/vars/tls-previous.yml @@ -0,0 +1,8 @@ +--- + +dovecot_tls_protocols: 'TLSv1.1 TLSv1.2 !SSLv3' +dovecot_tls_min_protocol: 'TLSv1.1' +dovecot_tls_ciphers: "{{ tls_ciphers }}" +dovecot_tls_dh_length: 4096 +dovecot_tls_dh_file: ffdhe4096.txt # ffdhe2048.txt +dovecot_tls_prefer_server_ciphers: true -- GitLab