Add TLS support to Coturn
This commit is contained in:
parent
018aeed5e9
commit
59e37105e8
23
CHANGELOG.md
23
CHANGELOG.md
@ -1,3 +1,26 @@
|
|||||||
|
# 2019-03-19
|
||||||
|
|
||||||
|
## TLS support for Coturn
|
||||||
|
|
||||||
|
We've added TLS support to the Coturn TURN server installed by the playbook by default.
|
||||||
|
The certificates from the Matrix domain will be used for the Coturn server.
|
||||||
|
|
||||||
|
This feature is enabled by default for new installations.
|
||||||
|
To make use of TLS support for your existing Matrix server's Coturn, make sure to rebuild both Coturn and Synapse:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ansible-playbook -i inventory/hosts setup.yml --tags=setup-coturn,setup-synapse,start
|
||||||
|
```
|
||||||
|
|
||||||
|
People who have an extra firewall (besides the iptables firewall, which Docker manages automatically), will need to open these additional firewall ports: `5349/tcp` (TURN over TCP) and `5349/udp` (TURN over UDP).
|
||||||
|
|
||||||
|
People who build their own custom playbook from our roles should be aware that:
|
||||||
|
|
||||||
|
- the `matrix-coturn` role and actually starting Coturn (e.g. `--tags=start`), requires that certificates are already put in place. For this reason, it's usually a good idea to have the `matrix-coturn` role execute after `matrix-nginx-proxy` (which retrieves the certificates).
|
||||||
|
|
||||||
|
- there are a few variables that can help you enable TLS support for Coturn. See the `matrix-coturn` section in [group_vars/matrix-servers](./group_vars/matrix-servers).
|
||||||
|
|
||||||
|
|
||||||
# 2019-03-12
|
# 2019-03-12
|
||||||
|
|
||||||
## matrix-nginx-proxy support for serving the base domain
|
## matrix-nginx-proxy support for serving the base domain
|
||||||
|
@ -12,6 +12,6 @@
|
|||||||
|
|
||||||
- properly configured DNS records for `<your-domain>` (details in [Configuring DNS](configuring-dns.md))
|
- properly configured DNS records for `<your-domain>` (details in [Configuring DNS](configuring-dns.md))
|
||||||
|
|
||||||
- some TCP/UDP ports open. This playbook configures the server's internal firewall for you. In most cases, you don't need to do anything special. But **if your server is running behind another firewall**, you'd need to open these ports: `80/tcp` (HTTP webserver), `443/tcp` (HTTPS webserver), `3478/tcp` (STUN over TCP), `3478/udp` (STUN over UDP), `8448/tcp` (Matrix Federation API HTTPS webserver), the range `49152-49172/udp` (TURN over UDP).
|
- some TCP/UDP ports open. This playbook configures the server's internal firewall for you. In most cases, you don't need to do anything special. But **if your server is running behind another firewall**, you'd need to open these ports: `80/tcp` (HTTP webserver), `443/tcp` (HTTPS webserver), `3478/tcp` (TURN over TCP), `3478/udp` (TURN over UDP), `5349/tcp` (TURN over TCP), `5349/udp` (TURN over UDP), `8448/tcp` (Matrix Federation API HTTPS webserver), the range `49152-49172/udp` (TURN over UDP).
|
||||||
|
|
||||||
When ready to proceed, continue with [Configuring DNS](configuring-dns.md).
|
When ready to proceed, continue with [Configuring DNS](configuring-dns.md).
|
||||||
|
@ -93,6 +93,14 @@ matrix_coturn_enabled: true
|
|||||||
|
|
||||||
matrix_coturn_turn_external_ip_address: "{{ ansible_host }}"
|
matrix_coturn_turn_external_ip_address: "{{ ansible_host }}"
|
||||||
|
|
||||||
|
matrix_coturn_tls_enabled: true
|
||||||
|
matrix_coturn_tls_cert_path: "{{ matrix_ssl_config_dir_path }}/live/{{ matrix_server_fqn_matrix }}/fullchain.pem"
|
||||||
|
matrix_coturn_tls_key_path: "{{ matrix_ssl_config_dir_path }}/live/{{ matrix_server_fqn_matrix }}/privkey.pem"
|
||||||
|
matrix_coturn_container_additional_volumes:
|
||||||
|
- src: "{{ matrix_ssl_config_dir_path }}"
|
||||||
|
dst: "{{ matrix_ssl_config_dir_path }}"
|
||||||
|
options: ro
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
#
|
#
|
||||||
# /matrix-coturn
|
# /matrix-coturn
|
||||||
@ -351,11 +359,15 @@ matrix_synapse_email_smtp_require_transport_security: false
|
|||||||
matrix_synapse_email_notif_from: "Matrix <{{ matrix_mailer_sender_address }}>"
|
matrix_synapse_email_notif_from: "Matrix <{{ matrix_mailer_sender_address }}>"
|
||||||
matrix_synapse_email_riot_base_url: "https://{{ matrix_server_fqn_riot }}"
|
matrix_synapse_email_riot_base_url: "https://{{ matrix_server_fqn_riot }}"
|
||||||
|
|
||||||
|
# Even if TURN doesn't support TLS (it does by default),
|
||||||
|
# it doesn't hurt to try a secure connection anyway.
|
||||||
matrix_synapse_turn_uris: |
|
matrix_synapse_turn_uris: |
|
||||||
{{
|
{{
|
||||||
[
|
[
|
||||||
'turn:' + matrix_server_fqn_matrix + ':3478?transport=udp',
|
'turns:' + matrix_server_fqn_matrix + '?transport=udp',
|
||||||
'turn:' + matrix_server_fqn_matrix + ':3478?transport=tcp',
|
'turns:' + matrix_server_fqn_matrix + '?transport=tcp',
|
||||||
|
'turn:' + matrix_server_fqn_matrix + '?transport=udp',
|
||||||
|
'turn:' + matrix_server_fqn_matrix + '?transport=tcp',
|
||||||
]
|
]
|
||||||
if matrix_coturn_enabled
|
if matrix_coturn_enabled
|
||||||
else []
|
else []
|
||||||
|
@ -38,3 +38,10 @@ matrix_coturn_allowed_peer_ips: []
|
|||||||
matrix_coturn_denied_peer_ips: []
|
matrix_coturn_denied_peer_ips: []
|
||||||
matrix_coturn_user_quota: null
|
matrix_coturn_user_quota: null
|
||||||
matrix_coturn_total_quota: null
|
matrix_coturn_total_quota: null
|
||||||
|
|
||||||
|
# To enable TLS, you need to provide paths to certificates.
|
||||||
|
# Paths defined in `matrix_coturn_tls_cert_path` and `matrix_coturn_tls_key_path` are in-container paths.
|
||||||
|
# Files on the host can be mounted into the container using `matrix_coturn_container_additional_volumes`.
|
||||||
|
matrix_coturn_tls_enabled: false
|
||||||
|
matrix_coturn_tls_cert_path: ~
|
||||||
|
matrix_coturn_tls_key_path: ~
|
||||||
|
@ -61,15 +61,40 @@
|
|||||||
immediate: yes
|
immediate: yes
|
||||||
permanent: yes
|
permanent: yes
|
||||||
with_items:
|
with_items:
|
||||||
- '3478/tcp' # STUN
|
- '3478/tcp'
|
||||||
- '3478/udp' # STUN
|
- '3478/udp'
|
||||||
|
- '5349/tcp'
|
||||||
|
- '5349/udp'
|
||||||
- "{{ matrix_coturn_turn_udp_min_port }}-{{ matrix_coturn_turn_udp_max_port }}/udp" # TURN
|
- "{{ matrix_coturn_turn_udp_min_port }}-{{ matrix_coturn_turn_udp_max_port }}/udp" # TURN
|
||||||
when: "matrix_coturn_enabled and ansible_os_family == 'RedHat'"
|
when: "matrix_coturn_enabled and ansible_os_family == 'RedHat'"
|
||||||
|
|
||||||
|
# This may be unnecessary when more long-lived certificates are used.
|
||||||
|
# We optimize for the common use-case though (short-lived Let's Encrypt certificates).
|
||||||
|
# Reloading doesn't hurt anyway, so there's no need to make this more flexible.
|
||||||
|
- name: Ensure periodic reloading of matrix-coturn is configured for SSL renewal (matrix-coturn-reload)
|
||||||
|
cron:
|
||||||
|
user: root
|
||||||
|
cron_file: matrix-coturn-ssl-reload
|
||||||
|
name: matrix-coturn-ssl-reload
|
||||||
|
state: present
|
||||||
|
hour: 4
|
||||||
|
minute: 20
|
||||||
|
day: "*/5"
|
||||||
|
job: /bin/systemctl reload matrix-coturn.service
|
||||||
|
when: matrix_coturn_enabled and matrix_coturn_tls_enabled
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Tasks related to getting rid of Coturn (if it was previously enabled)
|
# Tasks related to getting rid of Coturn (if it was previously enabled)
|
||||||
#
|
#
|
||||||
|
|
||||||
|
- name: Ensure matrix-coturn-ssl-reload cronjob removed
|
||||||
|
cron:
|
||||||
|
user: root
|
||||||
|
cron_file: matrix-coturn-ssl-reload
|
||||||
|
state: absent
|
||||||
|
when: "not matrix_coturn_enabled or not matrix_coturn_tls_enabled"
|
||||||
|
|
||||||
- name: Check existence of matrix-coturn service
|
- name: Check existence of matrix-coturn service
|
||||||
stat:
|
stat:
|
||||||
path: "/etc/systemd/system/matrix-coturn.service"
|
path: "/etc/systemd/system/matrix-coturn.service"
|
||||||
|
@ -9,15 +9,19 @@ After={{ service }}
|
|||||||
Type=simple
|
Type=simple
|
||||||
ExecStartPre=-/usr/bin/docker kill matrix-coturn
|
ExecStartPre=-/usr/bin/docker kill matrix-coturn
|
||||||
ExecStartPre=-/usr/bin/docker rm matrix-coturn
|
ExecStartPre=-/usr/bin/docker rm matrix-coturn
|
||||||
|
|
||||||
ExecStart=/usr/bin/docker run --rm --name matrix-coturn \
|
ExecStart=/usr/bin/docker run --rm --name matrix-coturn \
|
||||||
--log-driver=none \
|
--log-driver=none \
|
||||||
--user={{ matrix_user_uid }}:{{ matrix_user_gid }} \
|
--user={{ matrix_user_uid }}:{{ matrix_user_gid }} \
|
||||||
--cap-drop=ALL \
|
--cap-drop=ALL \
|
||||||
|
--entrypoint=turnserver \
|
||||||
--read-only \
|
--read-only \
|
||||||
--tmpfs=/var/tmp:rw,noexec,nosuid,size=100m \
|
--tmpfs=/var/tmp:rw,noexec,nosuid,size=100m \
|
||||||
--network={{ matrix_coturn_docker_network }} \
|
--network={{ matrix_coturn_docker_network }} \
|
||||||
-p 3478:3478 \
|
-p 3478:3478 \
|
||||||
-p 3478:3478/udp \
|
-p 3478:3478/udp \
|
||||||
|
-p 5349:5349 \
|
||||||
|
-p 5349:5349/udp \
|
||||||
-p {{ matrix_coturn_turn_udp_min_port }}-{{ matrix_coturn_turn_udp_max_port }}:{{ matrix_coturn_turn_udp_min_port }}-{{ matrix_coturn_turn_udp_max_port }}/udp \
|
-p {{ matrix_coturn_turn_udp_min_port }}-{{ matrix_coturn_turn_udp_max_port }}:{{ matrix_coturn_turn_udp_min_port }}-{{ matrix_coturn_turn_udp_max_port }}/udp \
|
||||||
-v {{ matrix_coturn_config_path }}:/turnserver.conf:ro \
|
-v {{ matrix_coturn_config_path }}:/turnserver.conf:ro \
|
||||||
{% for volume in matrix_coturn_container_additional_volumes %}
|
{% for volume in matrix_coturn_container_additional_volumes %}
|
||||||
@ -25,8 +29,14 @@ ExecStart=/usr/bin/docker run --rm --name matrix-coturn \
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
{{ matrix_coturn_docker_image }} \
|
{{ matrix_coturn_docker_image }} \
|
||||||
-c /turnserver.conf
|
-c /turnserver.conf
|
||||||
|
|
||||||
ExecStop=-/usr/bin/docker kill matrix-coturn
|
ExecStop=-/usr/bin/docker kill matrix-coturn
|
||||||
ExecStop=-/usr/bin/docker rm matrix-coturn
|
ExecStop=-/usr/bin/docker rm matrix-coturn
|
||||||
|
|
||||||
|
# This only reloads certificates (not other configuration).
|
||||||
|
# See: https://github.com/coturn/coturn/pull/236
|
||||||
|
ExecReload=/usr/bin/docker exec matrix-coturn kill -USR2 1
|
||||||
|
|
||||||
Restart=always
|
Restart=always
|
||||||
RestartSec=30
|
RestartSec=30
|
||||||
|
|
||||||
|
@ -1,23 +1,35 @@
|
|||||||
use-auth-secret
|
use-auth-secret
|
||||||
static-auth-secret={{ matrix_coturn_turn_static_auth_secret }}
|
static-auth-secret={{ matrix_coturn_turn_static_auth_secret }}
|
||||||
realm=turn.{{ matrix_server_fqn_matrix }}
|
realm=turn.{{ matrix_server_fqn_matrix }}
|
||||||
|
|
||||||
min-port={{ matrix_coturn_turn_udp_min_port }}
|
min-port={{ matrix_coturn_turn_udp_min_port }}
|
||||||
max-port={{ matrix_coturn_turn_udp_max_port }}
|
max-port={{ matrix_coturn_turn_udp_max_port }}
|
||||||
external-ip={{ matrix_coturn_turn_external_ip_address }}
|
external-ip={{ matrix_coturn_turn_external_ip_address }}
|
||||||
|
|
||||||
log-file=stdout
|
log-file=stdout
|
||||||
pidfile=/var/tmp/turnserver.pid
|
pidfile=/var/tmp/turnserver.pid
|
||||||
userdb=/var/tmp/turnserver.db
|
userdb=/var/tmp/turnserver.db
|
||||||
|
|
||||||
no-cli
|
no-cli
|
||||||
|
|
||||||
|
{% if matrix_coturn_tls_enabled %}
|
||||||
|
cert={{ matrix_coturn_tls_cert_path }}
|
||||||
|
pkey={{ matrix_coturn_tls_key_path }}
|
||||||
|
{% else %}
|
||||||
no-tls
|
no-tls
|
||||||
no-dtls
|
no-dtls
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
prod
|
prod
|
||||||
no-tcp-relay
|
no-tcp-relay
|
||||||
|
|
||||||
{% if matrix_coturn_user_quota != None %}
|
{% if matrix_coturn_user_quota != None %}
|
||||||
user-quota={{ matrix_coturn_user_quota }}
|
user-quota={{ matrix_coturn_user_quota }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if matrix_coturn_total_quota != None %}
|
{% if matrix_coturn_total_quota != None %}
|
||||||
total-quota={{ matrix_coturn_total_quota }}
|
total-quota={{ matrix_coturn_total_quota }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% for ip_range in matrix_coturn_denied_peer_ips %}
|
{% for ip_range in matrix_coturn_denied_peer_ips %}
|
||||||
denied-peer-ip={{ ip_range }}
|
denied-peer-ip={{ ip_range }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
roles:
|
roles:
|
||||||
- matrix-base
|
- matrix-base
|
||||||
- matrix-mailer
|
- matrix-mailer
|
||||||
- matrix-coturn
|
|
||||||
- matrix-postgres
|
- matrix-postgres
|
||||||
- matrix-corporal
|
- matrix-corporal
|
||||||
- matrix-synapse
|
- matrix-synapse
|
||||||
@ -14,4 +13,5 @@
|
|||||||
- matrix-mxisd
|
- matrix-mxisd
|
||||||
- matrix-dimension
|
- matrix-dimension
|
||||||
- matrix-nginx-proxy
|
- matrix-nginx-proxy
|
||||||
|
- matrix-coturn
|
||||||
- matrix-common-after
|
- matrix-common-after
|
||||||
|
Loading…
Reference in New Issue
Block a user