Configuració

De Lordwektabyte Wiki
Salta a la navegació Salta a la cerca

Firewall

Per a poder comunicar-nos amb el servidor de IM, haurem d'obrir 3 ports al firewall; 2 necessaris per a la comunicació entre clients-servidor i servidor-servidor (en casos de servidors federats) i un 3r que serà el que ens permetrà accedir a la pàgina web d'administració.

  • Port 5222
firewall-cmd --add-port=5222/tcp --permanent
  • Port 5269
firewall-cmd --add-port=5269/tcp --permanent
  • Port 5443
firewall-cmd --add-port=5280/tcp --permanent

Una vegada oberts els ports, haurem de recarregar el firewall perquè aquestes noves normes tinguin efecte

firewall-cmd --reload

Ports i interfícies

Segons la documentació pública d'aquest programa, podem buscar com cal configurar el servidor ejabberd segons les nostres necessitats. Per defecte, el programa s'instal·larà sota /usr/local/etc/ejabberd/; de manera que allà trobarem l'arxiu de configuració, dins el subdirectori. De la mateixa manera, des d'inici, aquest arxiu fa que el programa escolti només per IPv6; cosa que ens impedeix accedir-hi, de moment. Haurem de modificar l'arxiu /usr/local/etc/ejabberd/ejabberd.yml amb un editor de text que ens vagi bé i buscar les línies següents:

  • Línia 49: editar
ip: "0.0.0.0"
  • Línia 57: editar
ip: "0.0.0.0"
  • Línia 62: editar
ip: "0.0.0.0"

D'aquesta manera, fem que el servidor escolti en totes les interfícies IPv4 que tingui la màquina on està executant-se.

Certificats SSL

Per defecte, l'arxiu de configuració contempla que usarem certificats de Let's Encrypt i figuren rutes per a usar xifrat SSL a les línies 39 i 40 del ejabberd.yml

- "/etc/letsencrypt/live/localhost/fullchain.pem"
- "/etc/letsencrypt/live/localhost/privkey.pem"

L'opció que tenim més fàcil és crear certificats auto-signats i canviar aquestes rutes per les que corresponguin. Ho farem de la següent manera, des del directori /root per conveniència.

openssl genrsa -des3 -out practica.ejabberd.key 2048
openssl req -new -key practica.ejabberd.key -out practica.ejabberd.csr
openssl x509 -req -days 365 -in practica.ejabberd.csr -signkey practica.ejabberd.key -out practica.ejabberd.crt

Si llistem amb la comanda ls els arxius que hi ha al directori on hem creat el certificat i la clau veurem

practica.ejabberd.crt
practica.ejabberd.csr
practica.ejabberd.key

Ara és qüestió de posar l'arxiu .crt i .key a un lloc conegut que ejabberd pugui llegir. Normalment, i és un mètode estàndard, aquest tipus d'arxius es desen sota cd /etc/pki/tls/ al subdirectori certs o bé private segons sigui un certificat o una clau privada, respectivament. Ho fem:

[root@ejabberd tls]# mv /root/practica.ejabberd.crt /etc/pki/tls/certs/practica.ejabberd.crt
[root@ejabberd tls]# mv /root/practica.ejabberd.key /etc/pki/tls/private/practica.ejabberd.key

Aleshores modificarem les línies 39 i 40 de /usr/local/etc/ejabberd/ejabberd.yml per a concordar les rutes de la clau i el certificat segons correspongui:

  - "/etc/pki/tls/certs/practica.ejabberd.crt"
  - "/etc/pki/tls/private/practica.ejabberd.key"

Farem un restart del servei ejabberd:

[root@ejabberd tls]# /usr/local/sbin/ejabberdctl stop
[root@ejabberd tls]# /usr/local/sbin/ejabberdctl start
  • Problema: si fem un netstat veurem que els ports d'ejjaberd no estan llistats perquè el servidor no ha arrencat. Als logs de /usr/local/var/log/ejabberd/error.log ens hi apareix el missatge
2018-12-13 20:12:13.997 [error] <0.350.0>@ejabberd_pkix:add_file:250 Failed to read PEM file /etc/pki/tls/private/practica.ejabberd.key: at line 1: encrypted certificate
2018-12-13 20:12:13.997 [critical] <0.350.0>@ejabberd_pkix:stop_ejabberd:356 ejabberd initialization was aborted due to invalid certificates configuration
2018-12-13 20:12:41.360 [error] <0.350.0>@ejabberd_pkix:add_file:250 Failed to read PEM file /etc/pki/tls/private/practica.ejabberd.key: at line 1: encrypted certificate
2018-12-13 20:12:41.360 [critical] <0.350.0>@ejabberd_pkix:stop_ejabberd:356 ejabberd initialization was aborted due to invalid certificates configuration
  • Solució: els certificats que espera ejabber són del tipus PEM, i nosaltres no els hem creat així. Per a simplificar, puc utilitzar l'script /etc/pki/tls/certs/make-dummy-cert que em permet crear ràpidament un certificat PEM amb la comanda
make-dummy-cert practicam08.ejabberd.pem

Una vegada creat, editarem l'arxiu de configuració d'ejabberd en conseqüència: haurem d'esborrar una de les 2 línies ja que el certificat creat ja conté la clau privada i el certificat junt; de manera que només fa falta dir-li un arxiu a ejabberd per a utilitzar.

Després de modificar la configuració, tornarem a engegar el servei de IM i mirarem si ha engegat bé. Ara sí.

root@ejabberd certs]# /usr/local/sbin/ejabberdctl start

[root@ejabberd certs]# /usr/local/sbin/ejabberdctl status
The node ejabberd@localhost is started with status: started
ejabberd 18.12.24 is running in that node

Usuari administrador

Editarem la línia 103 de l'arxiu de configuració i hi posarem

- allow: local

que permetrà registrar usuaris als propis usuaris locals del sistema. Per defecte està en blanc i està restringit i dóna un error de could_not_register a l'executar la comanda.

També editarem la línia 30 per a definir un nom de host per a aquell node

  - "ejabberd"

Crearem un usuari administrador des de la consola (o via SSH) a la màquina on s'executa el servei d'IM

/usr/local/sbin/ejabberdctl register admin ejabberd contrasenya
[root@ejabberd ~]# /usr/local/sbin/ejabberdctl register admin ejabberd contrasenya
WARNING: It is not recommended to run ejabberd as root
User admin@ejabberd successfully registered

Ara podem navegar a http://ejabberd:5280/admin (havent modificat prèviament l'arxiu /etc/hosts del client i accedir amb les credencials creades abans:

Pàgina principal de la interfície web


Virtual Hosts

Una sola instància d'ejabberd pot gestionar més d'un "domini" XMPP utilitzant Virtual Hosts; com un servidor web Apache o Nginx. En el nostre cas, només hem configurat un sol domini (@ejabberd). De manera que els nostres usuaris tindran un login del tipus usuari@ejabberd amb la seva contrasenya per a poder utilitzar el servei.

Registre d'usuaris

De la mateixa manera que hem afegit l'usuari administrador de la web GUI, afegirem 2 usuaris més que seran els clients que faran login des del Fedora amfitrió i un altre Fedora Virtual.Per a registrar-los ho farem amb la comanda register d'ejabberdctl

[root@ejabberd ~]# /usr/local/sbin/ejabberdctl register gsola96 ejabberd passwordguillem
User gsola96@ejabberd successfully registered

[root@ejabberd ~]# /usr/local/sbin/ejabberdctl register jugalo ejabberd passwordjulian
User jugalo@ejabberd successfully registered

Un cop donats d'alta, podrem provar d'iniciar sessió al servidor i intentar xatejar.