Ehorus: OnPremise ES

De eHorus Wiki
Revisión del 06:28 20 may 2019 de Slerena (discusión | contribuciones) (Requisitos previos)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

Esta guía le ayudará a instalar su propia infraestructura de eHorus. Para familiarizarse con la aplicación y la arquitectura de eHorus consulte primero la Guía de Administración.

1 Arquitectura

A continuación se muestra un esquema general de la arquitectura y el flujo de datos de eHorus, así como los puertos en los que escuchan los diferentes servicios.


Ehorus arquitectura.png


  • eHorus Agent: Software que se instala en el equipo remoto y permite al acceso a éste.
  • eHorus Server: Gestiona las conexiones entre los equipos remotos (eHorus Agent) y los usuarios (eHorus Client).
  • eHorus Client: Aplicación JavaScript que se conecta al servidor de eHorus y permite interactuar con el equipo remoto.


Ehorus client.png


  • eHorus Portal: Aplicación web que permite gestionar equipos remotos, usuarios, grupos, y ejecutar eHorus Client.


Ehorus portal.png


  • eHorus Directory: Gestiona los datos de la aplicación y el control de acceso a los equipos remotos.
  • MySQL Server: Almacena físicamente los datos de la aplicación.

2 Requisitos previos

Idealmente, dispondrá de tres hosts para instalar el directorio, el portal y el servidor de eHorus con al menos 4GB de RAM. Si lo desea puede utilizar un host adicional para la base de datos del directorio.

Para entornos con menos de 100 agentes, es posible instalar todos los componentes en un único servidor siempre que se eviten conflictos entre los puertos de los distintos componentes. Se recomienda que tenga al menos 4GB de memoria RAM.

Ninguno de los componentes de eHorus hace un uso intensivo de la CPU.

Antes de comenzar la instalación asegúrese de haber obtenido los siguientes ficheros:

ehorus-directory-1.0.0.tgz
ehorus-portal-1.0.0.tgz
ehorus-server-1.0.0.tgz

Se utilizará como ejemplo la versión 1.0.0, si su versión es distinta ajuste los comandos que se muestran en esta guía según sea necesario. Por ejemplo, tar zxvf ehorus-directory-1.0.1.tgz en vez de tar zxvf ehorus-directory-1.0.0.tgz.

La instalación de los distintos componentes de eHorus se llevará a cabo sobre un sistema CentOS versión 7. Si utiliza otro sistema operativo puede que el resultado no sea el esperado.

Todos los comandos se ejecutarán con el usuario root.

También deberá haber recibido un número de identificación necesario para obtener su licencia de eHorus.

Además, deberá disponer de certificados X.509 válidos para cifrar las comunicaciones entre el directorio, el portal y el servidor.

En caso de duda contacte con su proveedor de licencia de eHorus.

3 Instalación de Node.js y NGINX

eHorus Directory y eHorus Portal necesitan el entorno Node.js para ejecutar se. En ésta guía utilizaremos utilizaremos el servidor web NGINX para acceder a dichas aplicaciones.

En los hosts del directorio y el portal, ejecute los siguientes comandos:

yum install -y epel-release
yum install -y gcc-c++ make nginx nodejs npm
npm install --global yarn
npm install --global pm2
Instalación de MariaDB

En el hosts del directorio, ejecute los siguientes comandos:

yum -y install mariadb-server mariadb
systemctl start mariadb
systemctl enable mariadb

A continuación cree la base de datos de eHorus:

echo "CREATE DATABASE ehorus;" | mysql -u root

Sustituya la cadena STRONG PASSWORD por una contraseña fuerte y cree el usuario ehorus:

echo "GRANT ALL PRIVILEGES ON *.* TO 'ehorus'@'localhost' \
IDENTIFIED BY 'STRONG PASSWORD' WITH GRANT OPTION;" | mysql -u root
echo "FLUSH PRIVILEGES;" | mysql -u root

Por último, configure una contraseña para el usuario root de MariaDB (consulte la documentación de MariaDB en caso de duda):

mysql_secure_installation

4 Instalación del directorio de eHorus

Ejecute los siguientes comandos:

mkdir -p /etc/ehorus /var/log/{ehorus-directory,ehorus-directory-clean-db}

Descomprima el fichero ehorus_server_1.0.0.tgz:

tar zxvf ehorus-directory-1.0.0.tgz

Instale las depencias del directorio:

yum groupinstall -y 'Development Tools'
yum install -y npm
mv package /opt/ehorus_directory
cd /opt/ehorus_directory
yarn install

Cree la base de datos del directorio (necesitará la contraseña que utilizó al crear el usuario ehorus en la base de datos):

cd /opt/ehorus_directory
cat db/schema/1-tables.sql | mysql -u ehorus -p ehorus
cat db/schema/2-rows.sql | mysql -u ehorus -p ehorus

Genere dos cadenas aleatorias para la configuración del directorio. Por ejemplo, utilizando el siguiente comando:

cat /dev/urandom | tr -c -d A-Za-z | fold -w 16 | head -1
cat /dev/urandom | tr -c -d A-Za-z | fold -w 16 | head -1

Cree el fichero /etc/ehorus/ehorus-directory.pm2.json con el siguiente contenido, sustituyendo cada instancia de la cadena 1234567890 por una cadena aleatoria distinta generada en el paso anterior. El valor de JWT_SECRET será necesario más adelante para instalar el portal. Sustituya [email protected] por una dirección de correo electrónico válida que Ártica Soluciones Tecnológicas asociará con su licencia de eHorus:

{
  "apps": [
    {
      "name": "ehorus-directory",
      "script": "server.js",
      "cwd": "/opt/ehorus_directory",
      "env": {
        "NODE_ENV": "development",
        "PORT": 3000,
        "JWT_SECRET": "1234567890",
        "EKID_SECRET": "1234567890",
        "DB_CONF_PATH": "/etc/ehorus/ehorus-directory.db-config.json"
      },
      "env_production" : {
         "NODE_ENV": "production"
      },
      "error_file": "/var/log/ehorus-directory/stderr.log",
      "out_file": "/var/log/ehorus-directory/stdout.log",
      "merge_logs": true,
      "min_uptime": "20s",
      "max_restarts": 20,
      "max_memory_restart": "200M",
      "autorestart": true,
      "restart_delay": 0
    },
    {
      "name": "ehorus-directory-clean-db",
      "script": "clean-db.js",
      "cwd": "/opt/ehorus_directory/tools",
      "env": {
        "DB_CONF_PATH": "/etc/ehorus/ehorus-directory.db-config.json"
      },
      "args": "-i",
      "error_file": "/var/log/ehorus-directory-clean-db/stderr.log",
      "out_file": "/var/log/ehorus-directory-clean-db/stdout.log",
      "merge_logs": true,
      "min_uptime": "20s",
      "max_restarts": 20,
      "max_memory_restart": "100M",
      "autorestart": true,
      "restart_delay": 1
    }
  ]
}

Cree el fichero /etc/ehorus/ehorus-directory.db-config.json con el siguiente contenido. Sustituya la cadena STRONG PASSWORD por la contraseña que utilizó al crear el usuario ehorus en la base de datos:

{
  "host": "127.0.0.1",
  "user": "ehorus",
  "password": "STRONG PASSWORD",
  "port": 3306,
  "database": "ehorus",
  "debug": false
}

Cree el fichero /etc/ehorus/ehorus-directory.smtp-config.json con el siguiente contenido. Introduzca los parámetros correctos para su servidor SMTP (consulte la documentación de Nodemailer para más información):

{
  "debug": false,
  "logger": false,
  "host": "127.0.0.1",
  "port": 465,
  "auth": {
    "user": "USERNAME",
    "pass": "PASSWORD"
  }
}

Para instalar el servicio, ejecute el siguiente comando:

pm2 start --env production /etc/ehorus/ehorus-directory.pm2.json
pm2 startup
pm2 save

Copie el certificado del host y el fichero de clave pública en /etc/ehorus/ehorus_directory.crt y /etc/ehorus/ehorus_directory.key respectivamente.

Para configurar NGINX cree el fichero /etc/nginx/conf.d/ehorus_directory.conf con el contenido que se muestra a continuación. Sustituya la cadena FQDN por el nombre de dominio completo del host. Consulte la documentación de NGINX se desea personalizar la configuración:

upstream ehorus_directory {
    server 127.0.0.1:3000;
}

server {
    listen       443 ssl;
    server_name  FQDN;

    # Add Strict-Transport-Security to prevent man in the middle attacks
    add_header Strict-Transport-Security "max-age=31536000";

    ssl_certificate /etc/ehorus/ehorus_directory.crt;
    ssl_certificate_key /etc/ehorus/ehorus_directory.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;

    location / {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://ehorus_directory;
        proxy_redirect off;
    }
}

Por último, reinicie NGINX:

service nginx restart

5 Instalación del portal de eHorus

Ejecute los siguientes comandos:

mkdir -p /etc/ehorus /var/log/ehorus-portal

Descomprima el fichero ehorus_server_1.0.0.tgz:

tar zxvf ehorus-portal-1.0.0.tgz

Instale las dependencias del portal:

mv package /opt/ehorus_portal
cd /opt/ehorus_portal
yarn install
yarn run build

Genere una contraseña aleatoria para el usuario ehorus-api que vamos a crear a continuación:

cat /dev/urandom | tr -c -d A-Za-z | fold -w 48 | head -1

Cree el usuario ehorus-api en la aplicación, que utilizarán el portal y el servidor para hacer peticiones al directorio. Sustituya la cadena FQDN por el nombre de dominio completo del directorio y STRONG PASSWORD por la contraseña generada en el paso anterior:

LOGIN_TOKEN=$(curl -s --data "username=admin&password=admin" 'https://FQDN/login' | python -c 'import sys, json; print json.load(sys.stdin)["token"]')
curl -s -H "Authorization: JWT $LOGIN_TOKEN" --data "name=ehorus-api&password=STRONG PASSWORD&fullname=ehorus-api&[email protected]" 'https://FQDN/api/users'

En el host del directorio (éste es el único comando que deberá ejecutar fuera del host del portal) ejecute el siguiente comando. Necesitará la contraseña que utilizó al crear el usuario ehorus en la base de datos:

echo 'UPDATE users SET level="admin" WHERE user="ehorus-api"' | mysql -u ehorus -p ehorus

De vuelta al host del portal, genere un JSON Web Token para hacer peticiones desde el portal al directorio. Sustituya la cadena FQDN por el nombre de dominio completo del directorio y STRONG PASSWORD por la contraseña generada anteriormente para el usuario ehorus-api:

LOGIN_TOKEN=$(curl -s --data "username=ehorus-api&password=STRONG PASSWORD" 'https://FQDN/login' | python -c 'import sys, json; print json.load(sys.stdin)["token"]')
curl -s -H "Authorization: JWT $LOGIN_TOKEN" 'https://FQDN/api/token?audience=/users&expires=36000d' | python -c 'import sys, json; print json.load(sys.stdin)["token"]'

Cree el fichero /etc/ehorus/ehorus-portal.pm2.json con el siguiente contenido, sustituyendo __API_SECRET__ por el JSON Web Token generado en el paso anterior, __JWT_SECRET__ por el valor de JWT_SECRET utilizado en la instalación del directorio y __DIRECTORIO__ por el dominio completo del directorio de eHorus:

{
  "apps": [
    {
      "name": "ehorus-portal",
      "script": "server",
      "cwd": "/opt/ehorus_portal",
      "env": {
        "NODE_ENV": "development",
        "PORT": 3001,
        "API": "https://__DIRECTORIO__",
        "API_SECRET": "__API_SECRET__",
        "JWT_SECRET": "__JWT_SECRET__",
        "MAIL_CONF_PATH": "/etc/ehorus/ehorus-portal.smtp-config.json",
      },
      "env_production" : {
         "NODE_ENV": "production"
      },
      "error_file": "/var/log/ehorus-portal/stderr.log",
      "out_file": "/var/log/ehorus-portal/stdout.log",
      "merge_logs": true,
      "min_uptime": "20s",
      "max_restarts": 20,
      "max_memory_restart": "200M",
      "autorestart": true,
      "restart_delay": 0
    }
  ]
}

Cree el fichero /etc/ehorus/ehorus-portal.smtp-config.json con el siguiente contenido. Si desea recibir correos de eHorus introduzca los parámetros correctos en la sección smtp para su servidor SMTP (consulte la documentación de Nodemailer para más información):

{
  "from": "eHorus <[email protected]>",
  "smtp": {
    "debug": false,
    "logger": false,
    "host": "127.0.0.1",
    "port": 465,
    "auth": {
      "user": "USERNAME",
      "pass": "PASSWORD"
    }
  }
}

Para instalar el servicio, ejecute el siguiente comando:

pm2 start --env production /etc/ehorus/ehorus-portal.pm2.json
pm2 startup
pm2 save

Copie el certificado del host y el fichero de clave pública en /etc/ehorus/ehorus_portal.crt y /etc/ehorus/ehorus_portal.key respectivamente.

Para configurar NGINX cree el fichero /etc/nginx/conf.d/ehorus_portal.conf con el contenido que se muestra a continuación. Sustituya la cadena FQDN por el nombre de dominio completo. Consulte la documentación de NGINX se desea personalizar la configuración:

upstream ehorus_portal {
    server 127.0.0.1:3001;
}

server {
    listen      80;
    server_name FQDN;

    return      301 https://$server_name$request_uri;
}

server {
    listen      443 ssl;
    server_name FQDN;

    # Add Strict-Transport-Security to prevent man in the middle attacks
    add_header Strict-Transport-Security "max-age=31536000";

    ssl_certificate /etc/ehorus/ehorus_portal.crt;
    ssl_certificate_key /etc/ehorus/ehorus_portal.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;

    location / {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://ehorus_portal;
        proxy_redirect off;
    }
}

Por último, reinicie NGINX:

service nginx restart

6 Instalación del servidor de eHorus

Descomprima el fichero ehorus_server-1.0.0.tgz:

tar zxvf  ehorus-server-1.0.0.tgz

Ejecute el instalador:

cd ehorus_server-0.1.0
./ehorus_server_installer --install

A continuación deberá obtener una licencia válida. Para ello, diríjase a licensing.artica.es, introduzca el número de identificación que ha recibido de Ártica en el campo Auth Key, y en el campo Request Key (from ehorus) el dominio completo del directorio de eHorus. Este valor deberá coincidir con el dominio que figure en el certificado X509 que instale en el directorio (e.g. directory.ehorus.com). Por último, haga click en el botón Generate y guarde en un lugar seguro la licencia que aparecerá en License Key.


Ehorus key.png


Genere un JSON Web Token para hacer peticiones desde el servidor al directorio. Sustituya la cadena FQDN por el nombre de dominio completo del directorio y STRONG PASSWORD por la contraseña generada durante la instalación del portal para el usuario ehorus-api:

LOGIN_TOKEN=$(curl -s --data "username=ehorus-api&password=STRONG PASSWORD" 'https://FQDN/login' | python -c 'import sys, json; print json.load(sys.stdin)["token"]')
curl -s -H "Authorization: JWT $LOGIN_TOKEN" 'https://FQDN/api/token?audience=/stats&expires=36000d' | python -c 'import sys, json; print json.load(sys.stdin)["token"]'

A continuación edite el fichero de configuración /etc/ehorus/ehorus_server.conf y modifique los siguientes parámetros:

  • license: Borre el carácter de comentario (#) e introduzca la licencia que obtuvo en el paso anterior (no la escriba entre comillas). Por ejemplo:
license 1234567890
  • ssl_cert: Path absoluto al certificado X.509 del servidor. Por ejemplo:
ssl_cert /etc/ehorus/ehorus_cert.pem
  • ssl_key: Path absoluto al fichero de clave del certificado X.509 del servidor. Por ejemplo:
ssl_cert /etc/ehorus/ehorus_key.pem
  • eh_auth_token: JSON Web Token generado en el paso anterior. Por ejemplo:
eh_auth_token 1234567890

Levante de forma manual el servidor de eHorus para comprobar que la configuración es correcta:

ehorus_server -f /etc/ehorus/ehorus_server.conf

Pare el servidor de eHorus y levántelo como un servicio:

service ehorus_server start

Entre en el portal de eHorus (https://<FQDN del portal>/) con el usuario admin (contraseña admin), y haga click en Servers:


Ehorus portal servers.png


Introduzca la siguiente información:

  • Name: Nombre del servidor. Es meramente descriptivo.
  • Address: En blanco. No es necesaria en instalaciones on-premise.
  • Domain: Dominio completo del servidor de eHorus.


Ehorus portal servers 2.png


7 Consideraciones adicionales

  • Se recomienda cambiar la contraseña del usuario admin en el portal desde la sección Users.
  • Se recomienda el uso de cortafuegos en todos los hosts. Si ha seguido esta guía, necesitará acceder a los puertos 443 del portal y el directorio y 443 y 8080 del servidor de eHorus.

8 Primeros pasos

Una vez instalada la infraestructura puede comenzar a instalar los agentes de eHorus en los equipos que quiera administrar de forma remota. Para ello consulte de nuevo la Guía de Administración.

9 Anexos

9.1 Personalización del portal

IMPORTANTE: Guarde una copia de seguridad de sus personalizaciones, ya que se pueden perder si actualiza el software. Correos electrónicos

Las plantillas de los correos electrónicos que envía el portal de eHorus se encuentran en el directorio ehorus_portal/server/mailer/templates. Para cada correo electrónico existe una versión en texto plano en el subdirectorio text, y otra en HTML en el subdirectorio html.

Las plantillas se cargan en memoria, por lo que será necesario reiniciar el portal con el comando que se muestra a continuación si se modifican:

pm2 restart ehorus-portal

Las plantillas soportan macros, escritas entre llaves dobles (e.g. {{email}}), que el portal de eHorus sustituirá por el valor adecuado antes de enviar un correo electrónico.

9.1.1 Pantalla de bienvenida

  • HTML: /opt/ehorus_portal/server/mailer/templates/html/welcome.html
  • Texto plano: /opt/ehorus_portal/server/mailer/templates/text/welcome.txt

Macros soportadas:

  • {{host}}: Dominio completo del portal de eHorus.
  • {{email}}: Dirección a la que se envía el correo electrónico.
  • {{user}}: Nombre del usuario al que se le envía el correo electrónico.
  • {{name}}: Nombre completo del usuario al que se le envía el correo electrónico.

9.1.2 Reinicio de contraseña

  • HTML: /opt/ehorus_portal/server/mailer/templates/html/password-reset.html
  • Texto plano: /opt/ehorus_portal/server/mailer/templates/text/password-reset.txt

Macros soportadas:

  • {{host}}: Dominio completo del portal de eHorus.
  • {{email}}: Dirección a la que se envía el correo electrónico.
  • {{user}}: Nombre del usuario al que se le envía el correo electrónico.
  • {{name}}: Nombre completo del usuario al que se le envía el correo electrónico.
  • {{token}}: El JSON Web Token utilizado para autorizar la operación de cambio de contraseña.

9.1.3 Cambio de contraseña

  • HTML: /opt/ehorus_portal/server/mailer/templates/html/password-changed.html
  • Texto plano: /opt/ehorus_portal/server/mailer/templates/text/password-changed.txt

Macros soportadas:

  • {{host}}: El dominio completo del portal de eHorus.
  • {{email}}: Dirección a la que se envía el correo electrónico.
  • {{user}}: Nombre del usuario al que se le envía el correo electrónico.
  • {{name}}: Nombre completo del usuario al que se le envía el correo electrónico.

9.1.4 Cambio de correo electrónico

  • HTML: /opt/ehorus_portal/server/mailer/templates/html/email-changed.html
  • Texto plano: /opt/ehorus_portal/server/mailer/templates/text/email-changed.txt

Macros soportadas:

  • {{host}}: El dominio completo del portal de eHorus.
  • {{oldEmail}}: Anterior dirección de correo electrónico.
  • {{email}}: Nueva dirección de correo electrónico.
  • {{user}}: Nombre del usuario al que se le envía el correo electrónico.
  • {{name}}: Nombre completo del usuario al que se le envía el correo electrónico.

9.1.5 Assets

Si se realizan cambios en los ficheros que se muestran en este apartado ejecute el siguiente comando para que se copien al directorio /opt/ehorus_portal/build:

cd /opt/ehorus
npm run build

9.1.6 Logotipo

Para cambiar el logotipo del portal de eHorus remplace los siguientes ficheros ehorus_portal/assets/images/logo.png y ehorus_portal/assets/images/logo-grey.png.

9.1.7 CSS

9.1.7.1 Portal

Los ficheros CSS del portal de eHorus están en el directorio /opt/ehorus_portal/assets/css.

Para los estilos generales utiliza Bulma y para los iconos Font Awesome. Las fuentes se encuentran en el directorio /opt/ehorus_portal/assets/fonts.

También se pueden sobrescribir estilos utilizando un fichero CSS personalizado y modificando el fichero /opt/ehorus_portal/assets/index.html para incluirlo.

9.1.7.2 Cliente

Los ficheros CSS del cliente de eHorus están en el directorio /opt/ehorus_portal/assets/client/css.

Para los estilos generales utiliza Bootstrap y para los iconos xterm.js. Las fuentes se encuentran en el directorio /opt/ehorus_portal/assets/client/fonts.

También se pueden sobrescribir estilos utilizando un fichero CSS personalizado y modificando el fichero /opt/ehorus_portal/assets/index.html para incluirlo.

9.1.8 URL

9.1.8.1 Alta de usuarios

La URL para dar de alta a un usuario que se muestra en la pantalla de inicio se puede cambiar colocando en la variable de entorno URL_CREATE_ACCOUNT la URL deseada antes de ejecutar el comando npm run build. Por ejemplo:

cd /opt/ehorus_portal
CREATE_ACCOUNT="https://localhost.localdomain/sign-up" npm run build


Ehorus portal login.png


9.2 Generación de certificados

Si desea generar su propio certificados X.509, genere primero el certificado de la CA:

mkdir /etc/pki/CA/newcerts
mkdir /etc/pki/CA/private
touch /etc/pki/CA/index.txt
echo "01" >> /etc/pki/CA/serial
openssl genrsa -out /etc/pki/CA/private/cakey.pem
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out  /etc/pki/CA/cacert.pem

A continuación instale el certificado de la CA como un certificado raíz de confianza:

yum install -y ca-certificates
update-ca-trust force-enable
cp /etc/pki/CA/cacert.pem /etc/pki/ca-trust/source/anchors/
update-ca-trust extract

Por último, genere y firme el certificado para eHorus:

openssl genrsa -out ehorus.key
openssl req -new -key ehorus.key -out ehorus.req -days 36000
cat ehorus.req ehorus.key  > ehorus.pem
openssl ca -out ehorus.crt -in ehorus.pem

Para evitar que el portal de eHorus se muestre como una página insegura, consulte la documentación de su navegador para añadir el certificado de la recién creada CA (e.g., https://wiki.mozilla.org/CA/AddRootToFirefox).