Table des matières

client element (ex -riot)

Pour vous connecter aux serveurs Matrix, il vous faut un client.

Dans cet article, nous utiliseront le port www/element-web que nous ferons tourner sous nginx. Ce n'est qu'un jeu de Javascript. Pour pimenter le tout, nous allons régler nginx en mode paranoïaque.

Installer

C'est assez simple, il suffit d'installer le port, qui n'est, en fait, que le clone du site officiel qui va s'installer dans /usr/local/www/element.

Certificats

A l'aide de security/py-certbot-nginx, demandons un certificat pour le site reuz.lapinbilly.eu à Letsencrypt.

root@popeye:/# certbot certonly --webroot -w /usr/local/www/nginx/ -d reuz.lapinbilly.eu

Puis, utiliser des clefs robustes de type Diffie-Hellman:

root@popeye:/#openssl dhparam -out /usr/local/etc/nginx/dhparam.pem 2048

Element

La configuration est assez simple, il suffit d'en avoir une par défaut:

usr/local/www/element/config.json
root@popeye:~ # diff -u /usr/local/www/element/config.sample.json /usr/local/www/element/config.json 
--- /usr/local/www/element/config.sample.json	2020-03-04 13:59:59.000000000 +0100
+++ /usr/local/www/element/config.json	2020-04-12 17:47:58.575171000 +0200
@@ -1,8 +1,8 @@
 {
     "default_server_config": {
         "m.homeserver": {
-            "base_url": "https://matrix-client.matrix.org",
-            "server_name": "matrix.org"
+            "base_url": "https://kreuz.lapinbilly.eu",
+            "server_name": "kreuz.lapinbilly.eu"
         },
         "m.identity_server": {
             "base_url": "https://vector.im"

Serveur Web

Voici une configuration pour notre jeu de javascript:

/usr/local/etc/nginx.conf
server {
  	        http2 on;
		listen 443 ssl;
		listen [::]:443 ssl;
		server_name reuz.lapinbilly.eu;
		root /usr/local/www/element/;
		index index.html index.php index.htm;
 
		access_log /var/log/nginx/riot.access.log;
		error_log /var/log/nginx/riot.error.log;
 
		add_header X-Content-Type-Options nosniff;
		add_header X-XSS-Protection "1; mode=block";
		add_header X-Frame-Options "SAMEORIGIN" always;
		add_header Strict-Transport-Security "max-age=31536000";
		ssl_dhparam /usr/local/etc/nginx/dhparam.pem;
 
		ssl_protocols TLSv1.2 TLSv1.3;
		ssl_ecdh_curve X25519:P-521:P-384:P-256;
		ssl_prefer_server_ciphers on;
 
		ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384";
		ssl_session_cache shared:SSL:10m;
		ssl_session_timeout 15m;
		ssl_session_tickets off;
 
		ssl_certificate /usr/local/etc/letsencrypt/live/reuz.lapinbilly.eu/fullchain.pem;
		ssl_certificate_key /usr/local/etc/letsencrypt/live/reuz.lapinbilly.eu/privkey.pem;
 
		location / {
			try_files $uri $uri/ =404;
		}
 
		location = /robots.txt {
			allow all;
			log_not_found off;
			access_log off;
		}
 
		location = /favicon.ico {
			log_not_found off;
			access_log off;
		}
 
	}