From b9b69a4482d85bb6ca525ed845ca096d5f0d422c Mon Sep 17 00:00:00 2001 From: Ivan Reshetnikov Date: Fri, 4 Oct 2024 02:09:16 +0500 Subject: [PATCH] Add coturn server --- coturn.yml | 5 + roles/coturn/tasks/main.yml | 32 + roles/coturn/templates/server.conf.j2 | 811 ++++++++++++++++++++++++ roles/coturn/vars/main.yml | 3 + roles/synapse/tasks/synapse.yml | 3 + roles/synapse/templates/synapse.yaml.j2 | 6 + synapse.yml | 1 + vaulted_vars.yml | 163 ++--- 8 files changed, 945 insertions(+), 79 deletions(-) create mode 100644 coturn.yml create mode 100644 roles/coturn/tasks/main.yml create mode 100644 roles/coturn/templates/server.conf.j2 create mode 100644 roles/coturn/vars/main.yml diff --git a/coturn.yml b/coturn.yml new file mode 100644 index 0000000..289f4eb --- /dev/null +++ b/coturn.yml @@ -0,0 +1,5 @@ +--- +- hosts: webservers + roles: + - name: coturn + static_auth_secret: "{{ coturn_static_auth_secret }}" diff --git a/roles/coturn/tasks/main.yml b/roles/coturn/tasks/main.yml new file mode 100644 index 0000000..46e889b --- /dev/null +++ b/roles/coturn/tasks/main.yml @@ -0,0 +1,32 @@ +--- +- name: Create coturn config dir + become: true + ansible.builtin.file: + path: /etc/coturn + state: directory + mode: '1755' + owner: root + group: root +- name: Copy coturn config + become: true + ansible.builtin.template: + src: server.conf.j2 + dest: /etc/coturn/server.conf + mode: '0644' + owner: root + group: root + register: turnconf +- name: Create coturn container + become: true + community.docker.docker_container: + name: coturn + image: coturn/coturn:4.6.2-bookworm + command: ["-c", "/etc/coturn/server.conf"] + network_mode: host + restart_policy: unless-stopped + volumes: + - /etc/coturn:/etc/coturn:ro + mounts: + - type: tmpfs + target: /var/lib/coturn + recreate: "{{ turnconf.changed }}" diff --git a/roles/coturn/templates/server.conf.j2 b/roles/coturn/templates/server.conf.j2 new file mode 100644 index 0000000..a742bb0 --- /dev/null +++ b/roles/coturn/templates/server.conf.j2 @@ -0,0 +1,811 @@ +# Coturn TURN SERVER configuration file +# +# Boolean values note: where a boolean value is supposed to be used, +# you can use '0', 'off', 'no', 'false', or 'f' as 'false, +# and you can use '1', 'on', 'yes', 'true', or 't' as 'true' +# If the value is missing, then it means 'true' by default. +# + +# Listener interface device (optional, Linux only). +# NOT RECOMMENDED. +# +#listening-device=eth0 + +# TURN listener port for UDP and TCP (Default: 3478). +# Note: actually, TLS & DTLS sessions can connect to the +# "plain" TCP & UDP port(s), too - if allowed by configuration. +# +#listening-port=3478 + +# TURN listener port for TLS (Default: 5349). +# Note: actually, "plain" TCP & UDP sessions can connect to the TLS & DTLS +# port(s), too - if allowed by configuration. The TURN server +# "automatically" recognizes the type of traffic. Actually, two listening +# endpoints (the "plain" one and the "tls" one) are equivalent in terms of +# functionality; but Coturn keeps both endpoints to satisfy the RFC 5766 specs. +# For secure TCP connections, Coturn currently supports +# TLS version 1.0, 1.1 and 1.2. +# For secure UDP connections, Coturn supports DTLS version 1. +# +#tls-listening-port=5349 + +# Alternative listening port for UDP and TCP listeners; +# default (or zero) value means "listening port plus one". +# This is needed for RFC 5780 support +# (STUN extension specs, NAT behavior discovery). The TURN Server +# supports RFC 5780 only if it is started with more than one +# listening IP address of the same family (IPv4 or IPv6). +# RFC 5780 is supported only by UDP protocol, other protocols +# are listening to that endpoint only for "symmetry". +#alt-listening-port=0 + +# Alternative listening port for TLS and DTLS protocols. +# Default (or zero) value means "TLS listening port plus one". +# +#alt-tls-listening-port=0 + +# Some network setups will require using a TCP reverse proxy in front +# of the STUN server. If the proxy port option is set a single listener +# is started on the given port that accepts connections using the +# haproxy proxy protocol v2. +# (https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt) +# +#tcp-proxy-port=5555 + +# Listener IP address of relay server. Multiple listeners can be specified. +# If no IP(s) specified in the config file or in the command line options, +# then all IPv4 and IPv6 system IPs will be used for listening. +# +listening-ip={{ listening_ip }} +#listening-ip=10.207.21.238 +#listening-ip=2607:f0d0:1002:51::4 + +# Auxiliary STUN/TURN server listening endpoint. +# Aux servers have almost full TURN and STUN functionality. +# The (minor) limitations are: +# +# 1) Auxiliary servers do not have alternative ports and +# they do not support STUN RFC 5780 functionality (CHANGE REQUEST). +# +# 2) Auxiliary servers also are never returning ALTERNATIVE-SERVER reply. +# +# Valid formats are 1.2.3.4:5555 for IPv4 and [1:2::3:4]:5555 for IPv6. +# +# There may be multiple aux-server options, each will be used for listening +# to client requests. +# +#aux-server=172.17.19.110:33478 +#aux-server=[2607:f0d0:1002:51::4]:33478 + +# (recommended for older Linuxes only) +# Automatically balance UDP traffic over auxiliary servers (if configured). +# The load balancing is using the ALTERNATE-SERVER mechanism. +# The TURN client must support 300 ALTERNATE-SERVER response for this +# functionality. +# +#udp-self-balance + +# Relay interface device for relay sockets (optional, Linux only). +# NOT RECOMMENDED. +# +#relay-device=eth1 + +# Relay address (the local IP address that will be used to relay the +# packets to the peer). +# Multiple relay addresses may be used. +# The same IP(s) can be used as both listening IP(s) and relay IP(s). +# +# If no relay IP(s) specified, then the turnserver will apply the default +# policy: it will decide itself which relay addresses to be used, and it +# will always be using the client socket IP address as the relay IP address +# of the TURN session (if the requested relay address family is the same +# as the family of the client socket). +# +#relay-ip=172.17.19.105 +#relay-ip=2607:f0d0:1002:51::5 + +# For Amazon EC2 users: +# +# TURN Server public/private address mapping, if the server is behind NAT. +# In that situation, if a -X is used in form "-X " then that ip will be reported +# as relay IP address of all allocations. This scenario works only in a simple case +# when one single relay address is be used, and no RFC5780 functionality is required. +# That single relay address must be mapped by NAT to the 'external' IP. +# The "external-ip" value, if not empty, is returned in XOR-RELAYED-ADDRESS field. +# For that 'external' IP, NAT must forward ports directly (relayed port 12345 +# must be always mapped to the same 'external' port 12345). +# +# In more complex case when more than one IP address is involved, +# that option must be used several times, each entry must +# have form "-X ", to map all involved addresses. +# RFC5780 NAT discovery STUN functionality will work correctly, +# if the addresses are mapped properly, even when the TURN server itself +# is behind A NAT. + +external-ip={{ external_ip }} + + +# Number of the relay threads to handle the established connections +# (in addition to authentication thread and the listener thread). +# If explicitly set to 0 then application runs relay process in a +# single thread, in the same thread with the listener process +# (the authentication thread will still be a separate thread). +# +# If this parameter is not set, then the default OS-dependent +# thread pattern algorithm will be employed. Usually the default +# algorithm is optimal, so you have to change this option +# if you want to make some fine tweaks. +# +# In the older systems (Linux kernel before 3.9), +# the number of UDP threads is always one thread per network listening +# endpoint - including the auxiliary endpoints - unless 0 (zero) or +# 1 (one) value is set. +# +#relay-threads=0 + +# Lower and upper bounds of the UDP relay endpoints: +# (default values are 49152 and 65535) +# +#min-port=49152 +#max-port=65535 + +# Uncomment to run TURN server in 'normal' 'moderate' verbose mode. +# By default the verbose mode is off. +verbose + +# Uncomment to run TURN server in 'extra' verbose mode. +# This mode is very annoying and produces lots of output. +# Not recommended under normal circumstances. +# +#Verbose + +# Uncomment to use fingerprints in the TURN messages. +# By default the fingerprints are off. +# +#fingerprint + +# Uncomment to use long-term credential mechanism. +# By default no credentials mechanism is used (any user allowed). +# +#lt-cred-mech + +# This option is the opposite of lt-cred-mech. +# (TURN Server with no-auth option allows anonymous access). +# If neither option is defined, and no users are defined, +# then no-auth is default. If at least one user is defined, +# in this file, in command line or in usersdb file, then +# lt-cred-mech is default. +# +#no-auth + +# Enable prometheus exporter +# If enabled the turnserver will expose an endpoint with stats on a prometheus format +# this endpoint is listening on a different port to not conflict with other configurations. +# +# You can simply run the turnserver and access the port 9641 and path /metrics +# +# For more info on the prometheus exporter and metrics +# https://prometheus.io/docs/introduction/overview/ +# https://prometheus.io/docs/concepts/data_model/ +# +#prometheus + +# TURN REST API flag. +# (Time Limited Long Term Credential) +# Flag that sets a special authorization option that is based upon authentication secret. +# +# This feature's purpose is to support "TURN Server REST API", see +# "TURN REST API" link in the project's page +# https://github.com/coturn/coturn/ +# +# This option is used with timestamp: +# +# usercombo -> "timestamp:userid" +# turn user -> usercombo +# turn password -> base64(hmac(secret key, usercombo)) +# +# This allows TURN credentials to be accounted for a specific user id. +# If you don't have a suitable id, then the timestamp alone can be used. +# This option is enabled by turning on secret-based authentication. +# The actual value of the secret is defined either by the option static-auth-secret, +# or can be found in the turn_secret table in the database (see below). +# +# Read more about it: +# - https://tools.ietf.org/html/draft-uberti-behave-turn-rest-00 +# - https://www.ietf.org/proceedings/87/slides/slides-87-behave-10.pdf +# +# Be aware that use-auth-secret overrides some parts of lt-cred-mech. +# The use-auth-secret feature depends internally on lt-cred-mech, so if you set +# this option then it automatically enables lt-cred-mech internally +# as if you had enabled both. +# +# Note that you can use only one auth mechanism at the same time! This is because, +# both mechanisms conduct username and password validation in different ways. +# +# Use either lt-cred-mech or use-auth-secret in the conf +# to avoid any confusion. +# +use-auth-secret + +# 'Static' authentication secret value (a string) for TURN REST API only. +# If not set, then the turn server +# will try to use the 'dynamic' value in the turn_secret table +# in the user database (if present). The database-stored value can be changed on-the-fly +# by a separate program, so this is why that mode is considered 'dynamic'. +# +static-auth-secret={{ static_auth_secret }} + +# Server name used for +# the oAuth authentication purposes. +# The default value is the realm name. +# +#server-name=blackdow.carleon.gov + +# Flag that allows oAuth authentication. +# +#oauth + +# 'Static' user accounts for the long term credentials mechanism, only. +# This option cannot be used with TURN REST API. +# 'Static' user accounts are NOT dynamically checked by the turnserver process, +# so they can NOT be changed while the turnserver is running. +# +#user=username1:key1 +#user=username2:key2 +# OR: +#user=username1:password1 +#user=username2:password2 +# +# Keys must be generated by turnadmin utility. The key value depends +# on user name, realm, and password: +# +# Example: +# $ turnadmin -k -u ninefingers -r north.gov -p youhavetoberealistic +# Output: 0xbc807ee29df3c9ffa736523fb2c4e8ee +# ('0x' in the beginning of the key is what differentiates the key from +# password. If it has 0x then it is a key, otherwise it is a password). +# +# The corresponding user account entry in the config file will be: +# +#user=ninefingers:0xbc807ee29df3c9ffa736523fb2c4e8ee +# Or, equivalently, with open clear password (less secure): +#user=ninefingers:youhavetoberealistic +# + +# SQLite database file name. +# +# The default file name is /var/db/turndb or /usr/local/var/db/turndb or +# /var/lib/turn/turndb. +# +#userdb=/var/db/turndb + +# PostgreSQL database connection string in the case that you are using PostgreSQL +# as the user database. +# This database can be used for the long-term credential mechanism +# and it can store the secret value for secret-based timed authentication in TURN REST API. +# See http://www.postgresql.org/docs/8.4/static/libpq-connect.html for 8.x PostgreSQL +# versions connection string format, see +# http://www.postgresql.org/docs/9.2/static/libpq-connect.html#LIBPQ-CONNSTRING +# for 9.x and newer connection string formats. +# +#psql-userdb="host= dbname= user= password= connect_timeout=30" + +# MySQL database connection string in the case that you are using MySQL +# as the user database. +# This database can be used for the long-term credential mechanism +# and it can store the secret value for secret-based timed authentication in TURN REST API. +# +# Optional connection string parameters for the secure communications (SSL): +# ca, capath, cert, key, cipher +# (see http://dev.mysql.com/doc/refman/5.1/en/ssl-options.html for the +# command options description). +# +# Use the string format below (space separated parameters, all optional): +# +#mysql-userdb="host= dbname= user= password= port= connect_timeout= read_timeout=" + +# If you want to use an encrypted password in the MySQL connection string, +# then set the MySQL password encryption secret key file with this option. +# +# Warning: If this option is set, then the mysql password must be set in "mysql-userdb" in an encrypted format! +# If you want to use a cleartext password then do not set this option! +# +# This is the file path for the aes encrypted secret key used for password encryption. +# +#secret-key-file=/path/ + +# MongoDB database connection string in the case that you are using MongoDB +# as the user database. +# This database can be used for long-term credential mechanism +# and it can store the secret value for secret-based timed authentication in TURN REST API. +# Use the string format described at http://hergert.me/docs/mongo-c-driver/mongoc_uri.html +# +#mongo-userdb="mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]" + +# Redis database connection string in the case that you are using Redis +# as the user database. +# This database can be used for long-term credential mechanism +# and it can store the secret value for secret-based timed authentication in TURN REST API. +# Use the string format below (space separated parameters, all optional): +# +#redis-userdb="ip= dbname= password= port= connect_timeout=" + +# Redis status and statistics database connection string, if used (default - empty, no Redis stats DB used). +# This database keeps allocations status information, and it can be also used for publishing +# and delivering traffic and allocation event notifications. +# The connection string has the same parameters as redis-userdb connection string. +# Use the string format below (space separated parameters, all optional): +# +#redis-statsdb="ip= dbname= password= port= connect_timeout=" + +# The default realm to be used for the users when no explicit +# origin/realm relationship is found in the database, or if the TURN +# server is not using any database (just the commands-line settings +# and the userdb file). Must be used with long-term credentials +# mechanism or with TURN REST API. +# +# Note: If the default realm is not specified, then realm falls back to the host domain name. +# If the domain name string is empty, or set to '(None)', then it is initialized as an empty string. +# +realm=turn.comfycamp.space + +# This flag sets the origin consistency +# check. Across the session, all requests must have the same +# main ORIGIN attribute value (if the ORIGIN was +# initially used by the session). +# +#check-origin-consistency + +# Per-user allocation quota. +# default value is 0 (no quota, unlimited number of sessions per user). +# This option can also be set through the database, for a particular realm. +# +#user-quota=0 + +# Total allocation quota. +# default value is 0 (no quota). +# This option can also be set through the database, for a particular realm. +# +#total-quota=0 + +# Max bytes-per-second bandwidth a TURN session is allowed to handle +# (input and output network streams are treated separately). Anything above +# that limit will be dropped or temporarily suppressed (within +# the available buffer limits). +# This option can also be set through the database, for a particular realm. +# +#max-bps=0 + +# +# Maximum server capacity. +# Total bytes-per-second bandwidth the TURN server is allowed to allocate +# for the sessions, combined (input and output network streams are treated separately). +# +# bps-capacity=0 + +# Uncomment if no UDP client listener is desired. +# By default UDP client listener is always started. +# +#no-udp + +# Uncomment if no TCP client listener is desired. +# By default TCP client listener is always started. +# +#no-tcp + +# Uncomment if no TLS client listener is desired. +# By default TLS client listener is always started. +# +#no-tls + +# Uncomment if no DTLS client listener is desired. +# By default DTLS client listener is always started. +# +#no-dtls + +# Uncomment if no UDP relay endpoints are allowed. +# By default UDP relay endpoints are enabled (like in RFC 5766). +# +#no-udp-relay + +# Uncomment if no TCP relay endpoints are allowed. +# By default TCP relay endpoints are enabled (like in RFC 6062). +# +no-tcp-relay + +# Uncomment if extra security is desired, +# with nonce value having a limited lifetime. +# The nonce value is unique for a session. +# Set this option to limit the nonce lifetime. +# Set it to 0 for unlimited lifetime. +# It defaults to 600 secs (10 min) if no value is provided. After that delay, +# the client will get 438 error and will have to re-authenticate itself. +# +#stale-nonce=600 + +# Uncomment if you want to set the maximum allocation +# time before it has to be refreshed. +# Default is 3600s. +# +#max-allocate-lifetime=3600 + + +# Uncomment to set the lifetime for the channel. +# Default value is 600 secs (10 minutes). +# This value MUST not be changed for production purposes. +# +#channel-lifetime=600 + +# Uncomment to set the permission lifetime. +# Default to 300 secs (5 minutes). +# In production this value MUST not be changed, +# however it can be useful for test purposes. +# +#permission-lifetime=300 + +# Certificate file. +# Use an absolute path or path relative to the +# configuration file. +# Use PEM file format. +# +#cert=/usr/local/etc/turn_server_cert.pem + +# Private key file. +# Use an absolute path or path relative to the +# configuration file. +# Use PEM file format. +# +#pkey=/usr/local/etc/turn_server_pkey.pem + +# Private key file password, if it is in encoded format. +# This option has no default value. +# +#pkey-pwd=... + +# Allowed OpenSSL cipher list for TLS/DTLS connections. +# Default value is "DEFAULT". +# +#cipher-list="DEFAULT" + +# CA file in OpenSSL format. +# Forces TURN server to verify the client SSL certificates. +# By default this is not set: there is no default value and the client +# certificate is not checked. +# +# Example: +#CA-file=/etc/ssh/id_rsa.cert + +# Curve name for EC ciphers, if supported by OpenSSL +# library (TLS and DTLS). The default value is prime256v1, +# if pre-OpenSSL 1.0.2 is used. With OpenSSL 1.0.2+, +# an optimal curve will be automatically calculated, if not defined +# by this option. +# +#ec-curve-name=prime256v1 + +# Use 566 bits predefined DH TLS key. Default size of the key is 2066. +# +#dh566 + +# Use 1066 bits predefined DH TLS key. Default size of the key is 2066. +# +#dh1066 + +# Use custom DH TLS key, stored in PEM format in the file. +# Flags --dh566 and --dh1066 are ignored when the DH key is taken from a file. +# +#dh-file= + +# Flag to prevent stdout log messages. +# By default, all log messages go to both stdout and to +# the configured log file. With this option everything will +# go to the configured log only (unless the log file itself is stdout). +# +#no-stdout-log + +# Option to set the log file name. +# By default, the turnserver tries to open a log file in +# /var/log, /var/tmp, /tmp and the current directory +# (Whichever file open operation succeeds first will be used). +# With this option you can set the definite log file name. +# The special names are "stdout" and "-" - they will force everything +# to the stdout. Also, the "syslog" name will force everything to +# the system log (syslog). +# In the runtime, the logfile can be reset with the SIGHUP signal +# to the turnserver process. +# +log-file=stdout + +# Option to redirect all log output into system log (syslog). +# +syslog + +# Set syslog facility for syslog messages +# Default values is ''. +# +#syslog-facility="LOG_LOCAL1" + +# This flag means that no log file rollover will be used, and the log file +# name will be constructed as-is, without PID and date appendage. +# This option can be used, for example, together with the logrotate tool. +# +#simple-log + +# Enable full ISO-8601 timestamp in all logs. +#new-log-timestamp + +# Set timestamp format (in strftime(1) format). Depends on new-log-timestamp to be enabled. +#new-log-timestamp-format "%FT%T%z" + +# Disabled by default binding logging in verbose log mode to avoid DoS attacks. +# Enable binding logging and UDP endpoint logs in verbose log mode. +#log-binding + +# Option to set the "redirection" mode. The value of this option +# will be the address of the alternate server for UDP & TCP service in the form of +# [:]. The server will send this value in the attribute +# ALTERNATE-SERVER, with error 300, on ALLOCATE request, to the client. +# Client will receive only values with the same address family +# as the client network endpoint address family. +# See RFC 5389 and RFC 5766 for the description of ALTERNATE-SERVER functionality. +# The client must use the obtained value for subsequent TURN communications. +# If more than one --alternate-server option is provided, then the functionality +# can be more accurately described as "load-balancing" than a mere "redirection". +# If the port number is omitted, then the default port +# number 3478 for the UDP/TCP protocols will be used. +# Colon (:) characters in IPv6 addresses may conflict with the syntax of +# the option. To alleviate this conflict, literal IPv6 addresses are enclosed +# in square brackets in such resource identifiers, for example: +# [2001:db8:85a3:8d3:1319:8a2e:370:7348]:3478 . +# Multiple alternate servers can be set. They will be used in the +# round-robin manner. All servers in the pool are considered of equal weight and +# the load will be distributed equally. For example, if you have 4 alternate servers, +# then each server will receive 25% of ALLOCATE requests. A alternate TURN server +# address can be used more than one time with the alternate-server option, so this +# can emulate "weighting" of the servers. +# +# Examples: +#alternate-server=1.2.3.4:5678 +#alternate-server=11.22.33.44:56789 +#alternate-server=5.6.7.8 +#alternate-server=[2001:db8:85a3:8d3:1319:8a2e:370:7348]:3478 + +# Option to set alternative server for TLS & DTLS services in form of +# :. If the port number is omitted, then the default port +# number 5349 for the TLS/DTLS protocols will be used. See the previous +# option for the functionality description. +# +# Examples: +#tls-alternate-server=1.2.3.4:5678 +#tls-alternate-server=11.22.33.44:56789 +#tls-alternate-server=[2001:db8:85a3:8d3:1319:8a2e:370:7348]:3478 + +# Option to suppress TURN functionality, only STUN requests will be processed. +# Run as STUN server only, all TURN requests will be ignored. +# By default, this option is NOT set. +# +#stun-only + +# Option to hide software version. Enhance security when used in production. +# Revealing the specific software version of the agent through the +# SOFTWARE attribute might allow them to become more vulnerable to +# attacks against software that is known to contain security holes. +# Implementers SHOULD make usage of the SOFTWARE attribute a +# configurable option (https://tools.ietf.org/html/rfc5389#section-16.1.2) +# +#no-software-attribute + +# Option to suppress STUN functionality, only TURN requests will be processed. +# Run as TURN server only, all STUN requests will be ignored. +# By default, this option is NOT set. +# +#no-stun + +# This is the timestamp/username separator symbol (character) in TURN REST API. +# The default value is ':'. +# rest-api-separator=: + +# Flag that can be used to allow peers on the loopback addresses (127.x.x.x and ::1). +# This is an extra security measure. +# +# (To avoid any security issue that allowing loopback access may raise, +# the no-loopback-peers option is replaced by allow-loopback-peers.) +# +# Allow it only for testing in a development environment! +# In production it adds a possible security vulnerability, so for security reasons +# it is not allowed using it together with empty cli-password. +# +#allow-loopback-peers + +# Flag that can be used to disallow peers on well-known broadcast addresses (224.0.0.0 and above, and FFXX:*). +# This is an extra security measure. +# +#no-multicast-peers + +# Option to set the max time, in seconds, allowed for full allocation establishment. +# Default is 60 seconds. +# +#max-allocate-timeout=60 + +# Option to allow or ban specific ip addresses or ranges of ip addresses. +# If an ip address is specified as both allowed and denied, then the ip address is +# considered to be allowed. This is useful when you wish to ban a range of ip +# addresses, except for a few specific ips within that range. +# +# This can be used when you do not want users of the turn server to be able to access +# machines reachable by the turn server, but would otherwise be unreachable from the +# internet (e.g. when the turn server is sitting behind a NAT) + +# don't let the relay ever try to connect to private IP address ranges within your network (if any) +# given the turn server is likely behind your firewall, remember to include any privileged public IPs too. +#denied-peer-ip=10.0.0.0-10.255.255.255 +denied-peer-ip=192.168.0.0-192.168.255.255 +denied-peer-ip=172.16.0.0-172.31.255.255 + +# recommended additional local peers to block, to mitigate external access to internal services. +# https://www.rtcsec.com/article/slack-webrtc-turn-compromise-and-bug-bounty/#how-to-fix-an-open-turn-relay-to-address-this-vulnerability +no-multicast-peers +denied-peer-ip=0.0.0.0-0.255.255.255 +denied-peer-ip=100.64.0.0-100.127.255.255 +denied-peer-ip=127.0.0.0-127.255.255.255 +denied-peer-ip=169.254.0.0-169.254.255.255 +denied-peer-ip=192.0.0.0-192.0.0.255 +denied-peer-ip=192.0.2.0-192.0.2.255 +denied-peer-ip=192.88.99.0-192.88.99.255 +denied-peer-ip=198.18.0.0-198.19.255.255 +denied-peer-ip=198.51.100.0-198.51.100.255 +denied-peer-ip=203.0.113.0-203.0.113.255 +denied-peer-ip=240.0.0.0-255.255.255.255 + +# special case the turn server itself so that client->TURN->TURN->client flows work +# this should be one of the turn server's listening IPs +allowed-peer-ip={{ listening_ip }} + +# consider whether you want to limit the quota of relayed streams per user (or total) to avoid risk of DoS. +user-quota=12 # 4 streams per video call, so 12 streams = 3 simultaneous relayed calls per user. +total-quota=1200 + +# File name to store the pid of the process. +# Default is /var/run/turnserver.pid (if superuser account is used) or +# /var/tmp/turnserver.pid . +# +#pidfile="/var/run/turnserver.pid" + +# Require authentication of the STUN Binding request. +# By default, the clients are allowed anonymous access to the STUN Binding functionality. +# +#secure-stun + +# Mobility with ICE (MICE) specs support. +# +#mobility + +# Allocate Address Family according (DEPRECATED and will be removed in favour of allocation-default-address-family) +# If enabled then TURN server allocates address family according the TURN +# Client <=> Server communication address family. +# (By default Coturn works according RFC 6156.) +# !!Warning: Enabling this option breaks RFC6156 section-4.2 (violates use default IPv4)!! +# +#keep-address-family + +# TURN server allocates address family according TURN client requested address family. +# If address family not requested explicitly by the client, then it falls back to this default. +# The standard RFC explicitly define that this default must be IPv4, +# so use other option values with care! +# Possible values: "ipv4" or "ipv6" or "keep" +# "keep" sets the allocation default address family according to +# the TURN client allocation request connection address family. +#allocation-default-address-family="ipv4" +#allocation-default-address-family="ipv4" + + +# User name to run the process. After the initialization, the turnserver process +# will attempt to change the current user ID to that user. +# +#proc-user= + +# Group name to run the process. After the initialization, the turnserver process +# will attempt to change the current group ID to that group. +# +#proc-group= + +# Turn OFF the CLI support. +# By default it is always ON. +# See also options cli-ip and cli-port. +# +#no-cli + +#Local system IP address to be used for CLI server endpoint. Default value +# is 127.0.0.1. +# +#cli-ip=127.0.0.1 + +# CLI server port. Default is 5766. +# +#cli-port=5766 + +# CLI access password. Default is empty (no password). +# For the security reasons, it is recommended that you use the encrypted +# form of the password (see the -P command in the turnadmin utility). +# +# Secure form for password 'qwerty': +# +#cli-password=$5$79a316b350311570$81df9cfb9af7f5e5a76eada31e7097b663a0670f99a3c07ded3f1c8e59c5658a +# +# Or unsecure form for the same password: +# +#cli-password=qwerty + +# Enable Web-admin support on https. By default it is Disabled. +# If it is enabled it also enables a http a simple static banner page +# with a small reminder that the admin page is available only on https. +# +#web-admin + +# Local system IP address to be used for Web-admin server endpoint. Default value is 127.0.0.1. +# +#web-admin-ip=127.0.0.1 + +# Web-admin server port. Default is 8080. +# +#web-admin-port=8080 + +# Web-admin server listen on STUN/TURN worker threads +# By default it is disabled for security resons! (Not recommended in any production environment!) +# +#web-admin-listen-on-workers + +#acme-redirect=http://redirectserver/.well-known/acme-challenge/ +# Redirect ACME, i.e. HTTP GET requests matching '^/.well-known/acme-challenge/(.*)' to '$1'. +# Default is '', i.e. no special handling for such requests. + +# Server relay. NON-STANDARD AND DANGEROUS OPTION. +# Only for those applications when you want to run +# server applications on the relay endpoints. +# This option eliminates the IP permissions check on +# the packets incoming to the relay endpoints. +# +#server-relay + +# Maximum number of output sessions in ps CLI command. +# This value can be changed on-the-fly in CLI. The default value is 256. +# +#cli-max-output-sessions + +# Set network engine type for the process (for internal purposes). +# +#ne=[1|2|3] + +# Do not allow an TLS/DTLS version of protocol +# +#no-tlsv1 +#no-tlsv1_1 +#no-tlsv1_2 + +# Disable RFC5780 (NAT behavior discovery). +# +# Originally, if there are more than one listener address from the same +# address family, then by default the NAT behavior discovery feature enabled. +# This option disables the original behavior, because the NAT behavior +# discovery adds extra attributes to response, and this increase the +# possibility of an amplification attack. +# +# Strongly encouraged to use this option to decrease gain factor in STUN +# binding responses. +# +no-rfc5780 + +# Disable handling old STUN Binding requests and disable MAPPED-ADDRESS +# attribute in binding response (use only the XOR-MAPPED-ADDRESS). +# +# Strongly encouraged to use this option to decrease gain factor in STUN +# binding responses. +# +no-stun-backward-compatibility + +# Only send RESPONSE-ORIGIN attribute in binding response if RFC5780 is enabled. +# +# Strongly encouraged to use this option to decrease gain factor in STUN +# binding responses. +# +response-origin-only-with-rfc5780 diff --git a/roles/coturn/vars/main.yml b/roles/coturn/vars/main.yml new file mode 100644 index 0000000..54b1c35 --- /dev/null +++ b/roles/coturn/vars/main.yml @@ -0,0 +1,3 @@ +--- +listening_ip: 192.168.0.39 +external_ip: 62.16.41.235 diff --git a/roles/synapse/tasks/synapse.yml b/roles/synapse/tasks/synapse.yml index d2c929f..e832032 100644 --- a/roles/synapse/tasks/synapse.yml +++ b/roles/synapse/tasks/synapse.yml @@ -19,6 +19,7 @@ owner: root group: root mode: '0664' + register: serverconf - name: Copy synapse log config become: true ansible.builtin.copy: @@ -27,6 +28,7 @@ owner: root group: root mode: '0664' + register: logconf - name: Create synapse container become: true community.docker.docker_container: @@ -42,3 +44,4 @@ ports: - 127.0.0.1:3005:8008/tcp restart_policy: unless-stopped + recreate: "{{ serverconf.changed or logconf.changed }}" diff --git a/roles/synapse/templates/synapse.yaml.j2 b/roles/synapse/templates/synapse.yaml.j2 index 42b9971..39b8d7e 100644 --- a/roles/synapse/templates/synapse.yaml.j2 +++ b/roles/synapse/templates/synapse.yaml.j2 @@ -19,3 +19,9 @@ media_store_path: /data/media_store signing_key_path: /data/matrix.comfycamp.space.signing.key log_config: /etc/synapse/log.config report_stats: true +trusted_key_servers: + - server_name: "matrix.org" +turn_uris: [ "turn:turn.comfycamp.space?transport=udp", "turn:turn.comfycamp.space?transport=tcp" ] +turn_shared_secret: "{{ turn_shared_secret }}" +turn_user_lifetime: 86400000 +turn_allow_guests: true diff --git a/synapse.yml b/synapse.yml index 457365a..ca80e62 100644 --- a/synapse.yml +++ b/synapse.yml @@ -3,3 +3,4 @@ roles: - role: synapse postgresql_password: "{{ synapse_postgresql_password }}" + turn_shared_secret: "{{ coturn_static_auth_secret }}" diff --git a/vaulted_vars.yml b/vaulted_vars.yml index 2f83820..2be7a5a 100644 --- a/vaulted_vars.yml +++ b/vaulted_vars.yml @@ -1,80 +1,85 @@ $ANSIBLE_VAULT;1.1;AES256 -37323032313466326664303835366564636666356234303564306330333532326161303339356534 -3665383733643239633065643538666462366636386530370a636237646437373133656339666234 -66346138393562383432323263313366313963326533363035656436343766386266333464383831 -6532373533653766650a313233333532356266383935633238333435633862313438393765663032 -61336564333934323134356239363636343033343164393038633630643137363436373135656535 -31393733383938343630313438623631643435656466613434613537623533346337376438333436 -65396464633431353033316234326263653237306131626664633562633035383866613363666332 -34353434363734656434326338633332653132363066303637616139663166636537313363383565 -35613535393333336633323065646434643238323339363931613038303036643466336465383466 -39316131366563623038356262363239363263636166623864393437386336313538393736663138 -65306230636433373632386635343665313062666161643031313037363435623436393730643736 -32303639653231306236616239303036366466643034303633636564313439663433633766613336 -37636335666666316234306261373661373836366139666538383235663833323236623439353165 -34366635306337323465316364393562323933666331326262366638313137326661303932343862 -35383662386336313066323532343730376236663536373334396463393637333436646165306464 -65613663626364653432353236393636383065376630653732653665386339346366343164323532 -36666665323536383765336263653737353330653635356366366231336561373963646465356637 -38666236616366613736663362373465333730646435613666636334383837643661646239363766 -65623366383137653635313664343534613765396235626536383866616335306633356265393261 -62333039383764616438303337636561396365393963366266306236316638346232383866313062 -37343433656561326533663266663964653261363433663830623865613139663535623838353365 -66666437353632623735643430323464393631616464383363663766316265656135643433656639 -36663131653331316638616639336363323064666330633933386635383662316263363238343565 -38346132373461336661663031613962666332346264616337383361376462653965663461383864 -30666137323961633638623061396366633334353630616164653565633663623866323539646163 -31616264663138663535373438383831323336656534373734633538353535633061376230393434 -63303133633666333337373432636662386661663837343234383536633264363637383833316561 -30623539636166613230343365303536373937333363316636393533643830383561643136663035 -62323966333730353039376432626531326236366563393033626634633461643134613964653765 -39613535316131373663383138326562363138646566306435313663633130326164343933343831 -32623735313235616366663962366433663732373265643435383164363337613864623038363364 -62376363373566616634353863366239626534333063393765333963373834316536626661316138 -63306431306164656633346233636132626233333861363965636663373635666231383064366334 -64313233363434646137366261626437626139666263346538353731616438343565323336366138 -64313631623430326339373762373735336664326538373532636233396663353666326638313035 -62643239633962313833346232326436313835306436303534306636386134656236333332646138 -33646237353733323061383861306537323339373133363431326461386431373930623032626261 -31616561616231616464623061326164313232613534396239616237623031353563346337316362 -62306564306339616235333264313731626166613638646234653036326362663334633438363366 -33633932376462363336343639626239613639623938646561613732303964323666316135353762 -65656363653866633161373331623539623866363135393232646131653838666162636131383539 -31653131653365343064346136626430363561623932613134306634613538383663656136393333 -32616262613536336666376239373132646537373836616533623738316638373162663838643336 -39656331333137386638376536313335346265326532376161623735353336656461336434383036 -61373466306635636265366534313230333432303331346464353762373064333839636362353434 -35663761366232353030643131663164363966663630343761386463386662363966366464326433 -39363331303336626235656131626362653335653632386131396238653730333439303239396261 -35353930333930353161653732326465373362313231633235393864666635363736363136646666 -39613965626133646335393931613734393635363866373264366664353365643036303466363161 -30393064643061353061383965333636626361653335313164663130386233383461353939393834 -36346666306638353937346633373635363237376232623866343032616137633439623265366561 -37646633343464653465633933333636663138396433343738363630623935383362626438313131 -66656439626632626538613936643561323830303630343833383632643831386533643761643963 -38356631346335666137356434656463653061363339666136303066383230646137393964623262 -65393862643938353731623164343536303837643532383461346162323462386535653830386430 -32346132373566353430356239643230393861653838316434343961666635396535363531356261 -38663036646537386463623761616462646666643038353737383662326130373333373862343766 -62326533346663663161656238336435626564643835326536353161636532363035343964396364 -36323637376233353237646235626635393266656361303339373034653534363165366433383364 -63376665373164623961313138663238333231316233303764316238306539623933316364386266 -64346639363534653938343063396566346662366663626632343933383030636461666533353137 -61373035356263663937333732386134346639383463656264636436323636616637396361313038 -39343435616464363131616165393938633165643531333862306639373535306364663662383237 -33343734316131373138663936646634393861366634313035393039383434653738643531376439 -62303363613933343138333835353233393963633361383834353163396465656530663636613030 -66306335633931356232303335303135363765303137356438616666646561366665333835343634 -65366661636339333661306561353764623063633339343166393737393862623339633033326639 -30386539386563326265643330633838633265616565366331663162333530613339393866653431 -31393830653239663633343362616636336233633464343638333930393732633732623838623437 -64373734656330656464333666343732346665663661396162363062623237303362636239623731 -31623035633561326138623463643738663332616563356636636131346263666130323138343030 -64626439633662363866343032363963613837306563613439343735613030383065376130393832 -36613665366531333135626339356438383565653037363835346239656462626366303234626266 -30306138616333383433373131316364356438656532623531313466633533653162386163376637 -38383465396165663261623964616566626236333062336666353834333634653563653266363533 -62383138313831386236636434396165663533646165353039633233646631373534663331636664 -32653866663937623730623365383037323530393633313736316331343463363033633939633139 -64393264376665393334363362353132396162346164613364306432333366646339366631646234 -353331316566383365386134653738313737 +36313839333930356436636439383062646133343337303337633863363966396266393733386663 +3532363631376634643637323134363061646538653830640a303238303764326135316165333438 +63343938653836393839303636613861326435646161626339656439373739303739383531313965 +3239613664643539320a613530323764366330616434666266626161626633353136323133653134 +33333734356433623061643339643530323730623062373066633961636566616463313137393935 +34333365363931396562396134643038303930383961636564383334366161633864396434373938 +35343535373361306231356433353338373461343131623161346635363737616233653736363161 +63363138333232366131616666373666646365353533383435316139323533363235653130646362 +38386664646532323334313336336262376534363064393632353665623165646231356165303938 +30373639333835383461346131356364663866666161306663323363656366366466646535613837 +32323266626463343066663465653837653966316136666235666162393363636438303431663037 +36666239656366346664376337333339646464616466626436653765393334333865656266356461 +38653266313934666537323637653165343666343630363863333534623065346566353135633038 +66653235343363306563303661616662366132323663633638646437663833366133653631613666 +30343735346364613063343663633934386266366266353538643435393239393263343562323864 +33313631356463333733383132623030323631633262643064353631313565636138613430633462 +39323331303236643632613362643665663163373333306436376365376563343439343238613431 +65376639636234646630623737313562363237366638356364303630656138393931393532366333 +35376131643630313766373565343462656238316231623034623761366665653934376233383162 +35316538613231633436666237666464393033303165373130396535343033646461363230666234 +61626333646438613732636538383936316561333539666236643939396561373633383130653265 +38353736663261303862613935373830633933633361663731616632316462303732643936366437 +34316136343264616331383665343837333230666132376163646530636637623863306236393031 +37343631643464313238303365626265366637326564613663316163343465353330373233633837 +37383739313239386136656132323937373561313239353665333465303939643866306132663335 +64333432663837306135393434666135663038383065386535393736323131393434383231383962 +32626365666162663762386235323035373933656465643636633563333562336331303061353138 +39636263656339633435353231653430306233323232316238326334646462303630646262323136 +35396161363635336331626661626561343531383032393363336463393735653430656530323832 +30333765376366663466363536383364353366663961616462343566356535633566373166626233 +31373665653864626365353466333163353764376331386463653334643438636134313330663132 +36663162643230333936623063326264323434656135636537636437626431303462616235306264 +37663461656461636632316664653830396134643965646261323232323936313366346432336236 +36386333303364363834313530323730376661383837336235633762353336616561386431316632 +66643861303966646266393533666439623539663334386532336138663038613161353130623066 +64346235616464386466386335353862633164623832323435613932666639343136356133396432 +62303963326634623436343163363136646232616137613534326631663433323938383662633031 +35613464303235313964656463366661353336396437653436616336376234346266336337366330 +30386463643462333432303530626134373932316136633537383938396439643331663766396232 +33353261323034666364323537313566393037636337386162613564353865386438656633623262 +31623435653536646464353035316431313664653837316233616362306632653931653265643166 +64663338323764376537313333656665653965636264626335333336633163303232363539323163 +65303334663832306365633465393634663461376631653034353963366434306539656639386138 +37333336613836313333366239393539306364333634316430643862326562636466393764356361 +32353033326161343961303439336139373132366633363734336166383565336530616665356432 +32613034333731303962333266623263363366633638343530313030366438636433666465333038 +66366266373635616233323239666264626433643936636432663537666662646131373736363838 +37313636323763366339333462373736656339323937376266383239313736373763616666363262 +66386364396237373537653133363861643762353735373636326433343931623563613837363533 +37333939623264363435643464396261656563616263626263626362343630653833306162396531 +61313133386663636339653632613231363862623766653235376163646133383733383136386538 +62373737333763313862626263343235343239663132623632333562393530643431653937643866 +34383731663065346561363565393562386565643331333032616562393038343230326134626161 +65626338306336626636666562623531313533666635323834303933363465316132623864356332 +39616561313633626164663935356334373664396635336162316462653233386434353639396563 +39363264666264393537323637366365353633396131373131653535313738353030393566646337 +31326633653833356630613134366266646264303735656136393335363162386632353062343863 +65663966303463623534303734336431353330636564303762343133393266623837633939356664 +64303563663666666636343931326663396133373736656465356463306439343637336362663865 +38656263393432383461646534343962626264363862653732626562393330656663393665373636 +38663765363133336466626339303036346236316631643366393137303939303165653334356239 +66343162393134386666373438363836366133306465666166313334386235303964356462393738 +66393833306531646431396332396666383537663361396638373863633738336363613061336130 +63393965313539383761653233326365313030366232353161353631303131336663316162363534 +64333137376238666632306265616133376362613431363839623330383734373465613739643861 +30343766333065666435656462353565303164633532313230356663353433393861626166303035 +32616531346238386231366136653036326366356463323866643266616139396431313363636637 +63313965623465376235353433323038653638663066666563326465643735306336353261376234 +62636435613031353235646434333730396238653634613631306161346263373333386535653366 +39313561313039316261336435663764623433363666333263333232383436386532626530336439 +62343634623634623765356334356561386333323263303562383934396333643566626130343730 +38653230623631623465646164333035353466363330633734636538383232663935313439303163 +38626533313137363863633934663038373062356261636230363962346634363566323361326338 +65646535303037623031663532386637386364343665343436356564666665613930396464306466 +64303765633032393433663639616530343466353666373966373166326635396131356466623961 +65633332366334666330613162626336303938353030346131363664663731623366356233643261 +35306138356330656131363162343738373630663531303230383361306465326437636330646331 +66386239376333353537383865633639653261636462396561396633336337383739626162646164 +64623336623837306533303465323330376639616630666239666432343964353636343731366162 +64613931343930356661313664336233623934306664643838623233376666656465393361343332 +33343037363135376136313935373032343738633562663237323763373037613836333236623934 +32303362313062636536613064653730383333613937346565333534386664326637636132333738 +37333963646436633736646639323039343230613538643139313531353635663137666662623434 +66333561393832396634