Diferència entre revisions de la pàgina «ASIX/M08/UF3/PT21/3»

De Lordwektabyte Wiki
Salta a la navegació Salta a la cerca
m (Guillem ha mogut M08/UF3/PT21/3 a ASIX/M08/UF3/PT21/3 sense deixar una redirecció: Crear subnivell ASIX)
 
(Hi ha 21 revisions intermèdies del mateix usuari que no es mostren)
Línia 1: Línia 1:
{{titol|Ejjaberd. Configuració}}
+
{{titol|Configuració}}
 
==Firewall==
 
==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ó.
 
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ó.
Línia 7: Línia 7:
 
<source>firewall-cmd --add-port=5269/tcp --permanent</source>
 
<source>firewall-cmd --add-port=5269/tcp --permanent</source>
 
:*'''Port 5443'''
 
:*'''Port 5443'''
<source>firewall-cmd --add-port=5443/tcp --permanent</source>
+
<source>firewall-cmd --add-port=5280/tcp --permanent</source>
  
 
Una vegada oberts els ports, haurem de recarregar el firewall perquè aquestes noves normes tinguin efecte
 
Una vegada oberts els ports, haurem de recarregar el firewall perquè aquestes noves normes tinguin efecte
Línia 14: Línia 14:
 
==Ports i interfícies==
 
==Ports i interfícies==
 
Segons la [https://docs.ejabberd.im/admin/configuration/#port-number-ip-address-and-transport-protocol documentació pública d'aquest programa], podem buscar com cal configurar el servidor ejabberd segons les nostres necessitats.
 
Segons la [https://docs.ejabberd.im/admin/configuration/#port-number-ip-address-and-transport-protocol 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 <code>/opt/ejabberd</code>; de manera que allà trobarem l'arxiu de configuració, dins el subdirectori <code>conf</code>. 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 <code>ejabberd/conf/ejabberd.yml</code> amb un editor de text que ens vagi bé i buscar les línies següents:
+
Per defecte, el programa s'instal·larà sota <code>/usr/local/etc/ejabberd/</code>; 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 <code>/usr/local/etc/ejabberd/ejabberd.yml</code> amb un editor de text que ens vagi bé i buscar les línies següents:
 
:*'''Línia 49:''' editar
 
:*'''Línia 49:''' editar
 
<source>
 
<source>
Línia 31: Línia 31:
  
 
D'aquesta manera, fem que el servidor escolti en totes les interfícies IPv4 que tingui la màquina on està executant-se.
 
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 <code>ejabberd.yml</code>
 +
<source>
 +
- "/etc/letsencrypt/live/localhost/fullchain.pem"
 +
- "/etc/letsencrypt/live/localhost/privkey.pem"
 +
</source>
 +
 +
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 <code>/root</code> per conveniència.
 +
<source>
 +
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
 +
</source>
 +
 +
Si llistem amb la comanda <code>ls</code> els arxius que hi ha al directori on hem creat el certificat i la clau veurem
 +
<source>
 +
practica.ejabberd.crt
 +
practica.ejabberd.csr
 +
practica.ejabberd.key
 +
</source>
 +
 +
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 <code>cd /etc/pki/tls/
 +
</code> al subdirectori <code>certs</code> o bé <code>private</code> segons sigui un certificat o una clau privada, respectivament. Ho fem:
 +
<source>
 +
[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
 +
</source>
 +
 +
Aleshores modificarem les línies '''39''' i '''40''' de <code>/usr/local/etc/ejabberd/ejabberd.yml</code> per a concordar les rutes de la clau i el certificat segons correspongui:
 +
<source>
 +
  - "/etc/pki/tls/certs/practica.ejabberd.crt"
 +
  - "/etc/pki/tls/private/practica.ejabberd.key"
 +
</source>
 +
 +
Farem un restart del servei ejabberd:
 +
<source>
 +
[root@ejabberd tls]# /usr/local/sbin/ejabberdctl stop
 +
[root@ejabberd tls]# /usr/local/sbin/ejabberdctl start
 +
</source>
 +
 +
:*'''Problema: ''' si fem un <code>netstat</code> veurem que els ports d'ejjaberd no estan llistats perquè el servidor no ha arrencat. Als logs de <code>/usr/local/var/log/ejabberd/error.log</code> ens hi apareix el missatge
 +
<source>
 +
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
 +
</source>
 +
 +
:*'''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 <code>/etc/pki/tls/certs/make-dummy-cert</code> que em permet crear ràpidament un certificat PEM amb la comanda
 +
<source>
 +
make-dummy-cert practicam08.ejabberd.pem
 +
</source>
 +
 +
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í.
 +
<source>
 +
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
 +
</source>
  
 
==Usuari administrador==
 
==Usuari administrador==
Per a fer això farem servir la comanda <code>ejabberdctl</code> que es troba a <code>/opt/ejabberd-18.12/bin/</code>. Com que aquesta ruta no està al PATH de root, podem fer un ''symlink'' cap a <code>/bin</code> per a poder-lo utilitzar sense especificar la ruta sencera:
+
Editarem la línia '''103''' de l'arxiu de configuració i hi posarem
<source>ln -s /opt/ejabberd-18.12/bin/ejabberdctl /bin/ejabberdctl</source>
+
<source>- allow: local</source>
 +
que permetrà registrar usuaris als propis usuaris locals del sistema. Per defecte està en blanc i està restringit i dóna un error de <code>could_not_register</code> a l'executar la comanda.
 +
 
 +
També editarem la línia '''30''' per a definir un nom de host per a aquell node
 +
<source>
 +
  - "ejabberd"
 +
</source>
  
 
Crearem un usuari administrador des de la consola (o via SSH) a la màquina on s'executa el servei d'IM
 
Crearem un usuari administrador des de la consola (o via SSH) a la màquina on s'executa el servei d'IM
<source>ejabberdctl register admin ejabberd.boeck contrasenya</source>
+
<source>/usr/local/sbin/ejabberdctl register admin ejabberd contrasenya</source>
 +
 
 +
<source>[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
 +
</source>
 +
 
 +
Ara podem navegar a http://ejabberd:5280/admin (havent modificat prèviament l'arxiu <code>/etc/hosts</code> del client i accedir amb les credencials creades abans:
 +
{{imatge|M08UF3PT211.png||thumb|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 <code>register</code> d'<code>ejabberdctl</code>
 +
<source>
 +
[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
 +
</source>
 +
 
 +
Un cop donats d'alta, podrem provar d'iniciar sessió al servidor i intentar xatejar.

Revisió de 11:25, 15 abr 2020

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.