Isolate Coturn from services in the default Docker network

Most (all?) of our Matrix services are running in the `matrix` network,
so they were safe -- not accessible from Coturn to begin with.

Isolating Coturn into its own network is a security improvement
for people who were starting other services in the default
Docker network. Those services were potentially reachable over the
private Docker network from Coturn.

Discussed in #120 (Github Pull Request)
This commit is contained in:
Slavi Pantaleev 2019-03-18 17:36:00 +02:00
parent c6858d2a08
commit 24cf27c60c
4 changed files with 27 additions and 0 deletions

View file

@ -90,6 +90,7 @@ matrix_corporal_matrix_registration_shared_secret: "{{ matrix_synapse_registrati
######################################################################
matrix_coturn_enabled: true
matrix_coturn_turn_external_ip_address: "{{ ansible_host }}"
######################################################################

View file

@ -2,6 +2,15 @@ matrix_coturn_enabled: true
matrix_coturn_docker_image: "instrumentisto/coturn:4.5.1.1"
# The Docker network that Coturn would be put into.
#
# Because Coturn relays traffic to unvalidated IP addresses,
# using a dedicated network, isolated from other Docker (and local) services is preferrable.
#
# Setting up deny/allow rules with `matrix_coturn_allowed_peer_ips`/`matrix_coturn_denied_peer_ips` is also
# possible for achieving such isolation, but is more complicated due to the dynamic nature of Docker networking.
matrix_coturn_docker_network: "matrix-coturn"
matrix_coturn_base_path: "{{ matrix_base_data_path }}/coturn"
matrix_coturn_config_path: "{{ matrix_coturn_base_path }}/turnserver.conf"

View file

@ -25,6 +25,22 @@
mode: 0644
when: matrix_coturn_enabled
# `docker_network` doesn't work as expected when the given network
# is a substring of a network that already exists.
#
# See our other comments in `roles/matrix-base/tasks/setup_matrix_base.yml`
- name: Check existence of Coturn network in Docker
shell:
cmd: "docker network ls -q --filter='name=^{{ matrix_coturn_docker_network }}$'"
register: matrix_coturn_result_docker_network
changed_when: false
when: matrix_coturn_enabled
- name: Create Coturn network in Docker
shell:
cmd: "docker network create --driver=bridge {{ matrix_coturn_docker_network }}"
when: "matrix_coturn_enabled and matrix_coturn_result_docker_network.stdout == ''"
- name: Ensure matrix-coturn.service installed
template:
src: "{{ role_path }}/templates/systemd/matrix-coturn.service.j2"

View file

@ -15,6 +15,7 @@ ExecStart=/usr/bin/docker run --rm --name matrix-coturn \
--cap-drop=ALL \
--read-only \
--tmpfs=/var/tmp:rw,noexec,nosuid,size=100m \
--network={{ matrix_coturn_docker_network }} \
-p 3478:3478 \
-p 3478:3478/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 \