Comunicacions corporatives amb Synapse

En aquest post veurem la instal·lació de Synapse, un servidor propi que ens permetrà controlar i securitzar les comunicacions de missatgeria entre els nostres usuaris, un símil de Slack. Podrem mitjançant una app mòbil o una web donar-los accés segur a sales de reunions, missatgeria privada, integració amb Directori Actiu, amb Jitsi, Núvol següent…

Una eina que ens agilitzarà molt organitzant la nostra vida laboral mitjançant canals o sales on els usuaris podran intercanviar les seves necessitats, una alternativa real al correu electrònic, Teams, Slack i altres. Podran xatejar, enviar-se fitxers, videoconferències integrades amb el nostre Jitsi, o el que s' ha dit, si tens Nextcloud podrem integrar el client de manera nativa.

Comencem! Matrix es un protocolo abierto y una red para la comunicación descentralada, donde los usuarios poden participar en sales de xat pública y privadas a través de servidors públicos i privats (“servidores domésticos”); así como cualquier client de la seva elecció, al igual que hacemos amb el correu electrònic. El objetivo es proporcionar una red global libre y abierta para la comunicación encriptada de principio a fin, sin sacrificar la facilitat de uso, y así poder liberar a los usuarios de quedar atrapados en les apps de ciertos fabricantes, que se hoy en día se ha convertido en lo más común.

Synapse es la implementación de servidor doméstico Matrix más instalada, está escrito en Python 3 y és codi obert. En aquest post veremos diverses cosillas:

  • Instalar Synapse
  • Habilitar Proxy inverso con Nginx
  • Instalar cliente Element
  • Integración de autenticación con Directorio Activo.
  • Instalar Element-web
  • Integración con Jitsi
  • Integración con Nextcloud

Instalación de Synapse

Para hacer la instalación nos basaremos en un Ubuntu Server 21.04 que tendremos actualizadito y con una IP estática. Comenzamos instalando los requisitos:

sudo apt install build-essential python3-dev libffi-dev python3-pip python3-setuptools sqlite3 libssl-dev virtualenv libjpeg-dev libxslt1-dev

Nos descargamos la repo y las claves para finalmente instalar Matrix Synapse:

sudo apt install -y lsb-release wget apt-transport-https
sudo wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg
echo "Deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) principal" | sudo tee /etc/apt/sources.list.d/matrix-org.list
sudo apt update
sudo apt install matrix-synapse-py3

Ens apareixerà la següent pregunta, hem d'indicar el nom FQDN del servidor, alguna cosa com matrix.midomini.això que hauràs de donar d'alta als teus servidors DNS i que resolguin cap a la IP d'aquesta màquina.

Si volem enviar estadístiques anònimes perquè millorin l'ús,

Iniciem i habilitem el servei:

sudo systemctl start matrix-synapse.service
sudo systemctl enable matrix-synapse.service

Editem el fitxer de configuració de Synapse: /etc/matrix-synapse/homeserver.yaml i veurem el port d'escolta, l'adreça d'escolta (podrem deixar 127.0.0.1 si accedim amb el proxy invers), si volem TLS, o important, si volem permetre que es registrin usuaris lliurement al nostre entorn, o no:

...
- port: 8008
    tls: false
    type: http
    x_forwarded: true
    bind_addresses: ['0.0.0.0']

    resources:
      - Noms: [client, federation]
        compress: false
...
enable_registration: false
...

Si fem qualsevol canvi reiniciem el servei:

sudo systemctl restart matrix-synapse.service

I si a bind_address escoltem des de 0.0.0.0 podrem obrir un navegador i verificar que el servei està en funcionament, obrim contra http://ADREÇA_IP_SYNAPSE:8008

Proxy Invers

Com veiem, el nostre Synapse funciona sota HTTP, el que farem a continuació serà instal·lar Nginx i habilitar l'accés a Synapse mitjançant proxy invers i xifrat amb SSL. Així que venga, instal·lem Nginx, el iniciem i el marquem com a inici automàtic amb el sistema:

sudo apt install nginx
sudo systemctl start nginx.service
sudo systemctl enable nginx.service

Creamos el fichero de configuración para el sitio web de Synapse, le llamamos por ejemplo ‘/etc/nginx/sites-available/synapsey al menos reemplazaremos el FQDN de ejemplo que os dejo con el de cada uno de vosotros:

server {
       listen 80;
       server_name matrix.midominio.eso;
       return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name matrix.midominio.eso;

    ssl_certificate /etc/ssl/certs/wildcard_midominio_eso.cer;
    ssl_certificate_key /etc/ssl/certs/wildcard_midominio_eso.key;

    # If you don't wanna serve a site, comment this out
    root /var/www/html;
    index index.html index.htm;

    location /_matrix {
      proxy_pass http://127.0.0.1:8008;
      proxy_set_header X-Forwarded-For $remote_addr;
    }
    location /.well-known/matrix/server {
      return 200 '{"m.server": "matrix.midominio.eso:443"}';
      add_header Content-Type application/json;
    }
    location /.well-known/matrix/client {
      return 200 '{"m.homeserver": {"base_url": "https://matrix.midominio.eso"},"m.identity_server": {"base_url": "https://vector.im"}}';
      add_header Content-Type application/json;
      add_header "Access-Control-Allow-Origin" *;
    }
}

Creamos un enlace para habilitar el sitio de Synapse y reiniciamos Nginx:

sudo ln -s /etc/nginx/sites-available/synapse /etc/nginx/sites-enabled/
sudo systemctl restart nginx.service

Si tot ha ido bien podremos validarlo abriendo un navegador contra https://DIRECCION_IP_SYNAPSE/.well-known/matrix/server

Element

Bé, para connectarnos al nostre servidor Synapse, podem usar qualsevol client com dijimos anteriorment, el més común quizá sea Element, anteriormente conocido como Riot. Pues Element lo podremos abrir directamente desde https://app.element.io o podem descargarnos un cliente en local, para nuestro Windows, Linux, Mac, Android o iOS.

Una vez abierto Element, deberem indicar que tenim la compte alojada en el nostre propi servidor, indiquem el nostre FQDN i ja podrem parlar amb nosaltres. però abans de loguearnos… ¿tendremos que tener una cuenta? ¿no? Bé. si tenim Synapse ja configurat contra el nostre LDAP podrem intentar entrar ja amb el nostre usuari del Directori Actiu, si no és així, necessitarem usar usuaris locals. Per poder crear usuaris locals haurem de permetre que els usuaris puguin registrar-se i per això si recordem, al fitxer de configuració establim ‘enable_registration': true’ i reiniciem el servei. Ara ja sí que podríem crear un compte d'usuari. Però clar, compte amb els registres oberts, és cert que a la configuració veuràs que podem requerir un secret compartit previ i així no es validen, posar un CAPTCHA… Normalment els registres els deixarem deshabilitats.

I res, si entrem ja Element ens dóna la benvinguda, ens permet enviar missatges a contactes, explorar sales públicas o crear chats grupales entre altres.

Element en sí no tiene ninguna complicación, los usuaris manejen aquest tipus d'eines diariamente, pero esta es open source, segura, cifrada y corre en el nostre datacenter, sin fugas de dades o con la màxima privacitat.

Configuración contra Directorio Activo

Lo más cómodo integrarà l'autenticació de Synapse amb el nostre domini d'Active Directory, per a això, primer instal·larem el connector LDAP i finalment en la configuració de Synapse indicamos los datos de nuestro LDAP. Instalamos los requisitos primer:

sudo apt-get install matrix-synapse-ldap3 -y

Editem el fitxer de configuració de Synapse (/etc/matrix-synapse/homeserver.yaml) y añadimos la següent configuració en la secció correspondiente:

password_providers:
    - module: "ldap_auth_provider. LdapAuthProvider"
      config:
        enabled: true
        uri: "ldap://DIRECCION_IP_DC:389"
        start_tls: false
        base: "ou=OU_2,ou=OU_1,dc=DOMINIO,dc=LOCAL"
        attributes:
           uid: "sAMAccountName"
           mail: "mail"
           name: "givenName"
        bind_dn: "cn=USUARIO_LDAP_SYNAPSE,ou=OU_2,ou=OU_1,dc=DOMINIO,dc=LOCAL"
        bind_password: "CONTRASENYA"
        #filter: "(objectClass=posixAccount)"

Donde bueno, podríamos añadir alguna linea adicional contra otro DC, así como que preferiblemente configurar LDAPS mejor por el 636 y con TLS y en la BaseDN tendremos la base de donde nos buscará los usuarios, así como si queremos poner algún filtro adicional

Y nada tras reiniciar el servicio de Synapse podremos ya intentar loguearnos con nuestros usuarios de dominio.

sudo systemctl restart matrix-synapse.service

Element-web

En el propio servidor de Synapse podremos instalar Element-web, que así podremos evitar hacer que los usuarios se tengan que ir a la web de Element para hablar o el tener un cliente instalado offline. Element-web nos proporcionará el mateix GUI pero ejecutándose en nuestro servidor (en Nginx), un client web, vagi.

Així que, creamos el directorio donde guardaremos element-web, nos lo descargamos, instalamos gnupg, las claves & las instalamos, descomprimimos element, creamos un enllaç simbólico i corregim els permisos; finalment crearem el nostre fitxador de configuració:

sudo mkdir -p /var/www/html/element
cd /var/www/html/element

sudo wget https://github.com/vector-im/element-web/releases/download/v1.7.34/element-v1.7.34.tar.gz

sudo apt install -y gnupg
sudo wget https://github.com/vector-im/element-web/releases/download/v1.7.34/element-v1.7.34.tar.gz.asc

sudo gpg --keyserver keyserver.ubuntu.com --search-keys re******@**ot.im
sudo gpg --verify element-v1.7.34.tar.gz.asc

sudo tar -xzvf element-v1.7.34.tar.gz

sudo ln -s element-v1.7.34 element
sudo chown www-data:www-data -R element

cd element
sudo cp config.sample.json config.json

Editamos el fichero de configuración (/var/www/html/element/element/config.json), modificamos la 'base_url’ con el FQDN completo de Synapse (matrix.midominio.eso); y 'server_name’ con el nombre del dominio (midominio.eso). Quedant:

{
    "default_server_config": {
        "m.homeserver": {
            "base_url": "https://matrix.midominio.eso",
            "server_name": "midominio.eso"
        },
        "m.identity_server": {
            "base_url": "https://matrix.midominio.eso"
        }
    },
...

Creamos el fichero de configuración para Nginx:

server {
       listen 80;
       server_name element.midominio.eso;
       return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name element.midominio.eso;

    ssl_certificate /etc/ssl/certs/wildcard_mi_dominio.cer;
    ssl_certificate_key /etc/ssl/certs/wildcard_mi_dominio.key;

    root /var/www/html/element/element;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Habilitamos el sitio y reiniciamos Nginx:

sudo ln -s /etc/nginx/sites-available/element /etc/nginx/sites-enabled/
sudo systemctl restart nginx.service

I provem amb un navegador a accedir a https://element.midomini.eso i voilà! ja podrem iniciar sessió amb els nostres usuaris directament a la web, i no t'expliqui si personalitzem la Inici…

Integración con Jitsi

Si tenim el nostre propietari servidor de videoconferències basat en Jitsi, podem integrar-lo amb Element-web i així quan vulguin fer una trucada o videotrucada, o grupal, usaràn els nostres recursos, tot queda a casa, assegurança, xifrat… només cal editar el fitxer de configuració d'element-web (/var/www/html/element/element/config.json) a la secció de Jitsi i posar el nostre FQDN:

},
"jitsi": {
    "preferredDomain": "jitsi.midomini.eso"
}

I quedaria súper guai!

Integración con Nextcloud

Vinga ja acabem… això el mateix, si tienes tu propio sistema de intercambio de ficheros o aún más un Hub de conexión a tus usuaris con Núvol següent podrás con una app integrar en la pròpia interfície de Nextcloud un apa

En Nextcloud, logueados con una cuenta con privilegios de administrador, vamos a las Apps > Integración > y buscamos 'Element for Nextcloud', posem en “Descargar y activar”.

Si vamos a la part de Configuración, en el menú lateral podremos ver un apartado nuevo llamado 'Element', deberemos configurar la URL del servidor Element Web.

I ara els usuaris tindran en la barra superior un icono addicional, donde directamente podrán parlar, interactuar amb el resto de companyos… ¡precioso!

Bo, que espero os haya resultat interessant, gràcies a todos los que dais Likes y Recomanacions en las xarxes socials, abrazos a tod@s!

Posts recomanats

Autor

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, no dubtis a contactar amb mi, us intentareu ajudar sempre que pugui, compartir és viure ;) . Gaudir dels documents!!!