From dae74aa2f62de1e927dc7236dc4ada5af0ef863a Mon Sep 17 00:00:00 2001 From: Dawris Date: Tue, 3 Dec 2024 10:17:18 +0100 Subject: [PATCH] Creacion carpeta script --- script/Documentación script OgLog.md | 131 +++++++++++++++++ script/mkcerts.sh | 96 ++++++++++++ script/script.sh | 209 +++++++++++++++++++++++++++ 3 files changed, 436 insertions(+) create mode 100755 script/Documentación script OgLog.md create mode 100755 script/mkcerts.sh create mode 100755 script/script.sh diff --git a/script/Documentación script OgLog.md b/script/Documentación script OgLog.md new file mode 100755 index 0000000..385d9b4 --- /dev/null +++ b/script/Documentación script OgLog.md @@ -0,0 +1,131 @@ +# Documentación script OgLog + +Este script automatiza la configuración de un entorno basado en OpenSearch, OpenSearch Dashboards, Prometheus, Grafana, y otras herramientas. Incluye la instalación, configuración de certificados SSL y ajuste de servicios para garantizar seguridad y funcionamiento adecuado. + +--- + +## Requisitos Previos + +1. **Variables de Entorno**: +- `IP_MAQUINA`: Dirección IP del servidor donde se ejecutará el script. +- `OPENSEARCH_INITIAL_ADMIN_PASSWORD`: Contraseña inicial del administrador para OpenSearch. + + La contraseña debe: + + - Tener al menos 12 caracteres. + - Incluir una mayúscula, un número y un carácter especial. +1. **Script para Generar Certificados**: + + Este script depende de otro llamado `mkcerts.sh` que genera certificados SSL necesarios. Alternativamente, puedes usar certificados propios. Es importante que la carpeta `CA` se encuentre en la misma ruta desde la cual se ejecuta este script. Los certificados deben colocarse en las siguientes subcarpetas dentro de `CA`: + + - **`CA/certs/`**: para los archivos de certificados (`.crt.pem`). + - **`CA/private/`**: para los archivos de llaves privadas (`.key.nopass.pem`). + +--- + +## Funcionalidad del Script + +### 1. **Validación Inicial** + +- Verifica la presencia de variables de entorno esenciales. +- Valida que la contraseña cumple con los requisitos mínimos de seguridad. + +### 2. **Actualización del Archivo `/etc/hosts`** + +El script agrega entradas al archivo `/etc/hosts` para permitir la resolución de los siguientes nombres de dominio en el entorno: + +- **`oglog-os.mytld`** +- **`oglog-osdb.mytld`** +- **`oglog-jb.mytld`** +- **`oglog-jrem.mytld`** +- **`oglog-prom.mytld`** +- **`oglog-graf.mytld`** + +Cada uno de estos dominios estará asociado a la IP especificada en la variable de entorno `IP_MAQUINA`. + +### 3. **Instalación de Dependencias** + +Instala herramientas esenciales como `ca-certificates`, `gnupg2`, `lsb-release`, y `systemd-journal-remote`. + +### 4. **Ejecución de `mkcerts.sh`** + +Este script genera los certificados SSL requeridos. Si decides usar certificados diferentes, deben colocarse en las ubicaciones mencionadas en la sección de requisitos previos. + +### 5. **Configuración de Certificados** + +- Copia y enlaza los certificados generados en las ubicaciones correspondientes. +- Establece los certificados SSL para cada herramienta (OpenSearch, OpenSearch Dashboards, Prometheus, etc.). + +### 6. **Instalación y Configuración de OpenSearch** + +- Agrega repositorios y claves para OpenSearch y OpenSearch Dashboards. +- Configura OpenSearch (`/etc/opensearch/opensearch.yml`) con certificados SSL, IP del servidor y otras opciones de seguridad. + +### 7. **Instalación y Configuración de Prometheus** + +- Copia los certificados necesarios a `/etc/prometheus/`. +- Configura Prometheus para usar TLS y añade trabajos para monitorización. + +### 8. **Instalación y Configuración de Journalbeat** + +- Descarga e instala Journalbeat. +- Configura el acceso a ElasticSearch con certificados y credenciales. + +### 9. **Instalación y Configuración de Grafana** + +- Instala Grafana y configura el acceso HTTPS. +- Establece Prometheus como fuente de datos predeterminada. +- Descarga y configura un dashboard prediseñado. + +### 10. **Acceso a las Herramientas Configuradas** + +Una vez que el script haya finalizado, podrás acceder a las herramientas configuradas mediante los siguientes enlaces: + +1. **OpenSearch**: + - URL: `https://oglog-os.mytld:9200` + - Credenciales: + - Usuario: `admin` + - Contraseña: La definida en la variable `OPENSEARCH_INITIAL_ADMIN_PASSWORD`. +2. **OpenSearch Dashboards**: + - URL: `https://oglog-osdb.mytld:5601` +3. **Prometheus**: + - URL: `https://oglog-prom.mytld:9090` +4. **Grafana**: + - URL: `https://oglog-graf.mytld:3000` + - Credenciales iniciales por defecto: + - Usuario: `admin` + - Contraseña: `admin` (es recomendable cambiarla tras el primer inicio de sesión). + +--- + +## Ubicaciones de Certificados por Servicio + +1. **OpenSearch**: + - Certificado raíz: `/etc/opensearch/ca.crt.pem`. + - Certificado del servicio: `/etc/opensearch/oglog-os.mytld.crt.pem`. + - Llave privada: `/etc/opensearch/oglog-os.mytld.key.pem`. +2. **OpenSearch Dashboards**: + - Certificado del servicio: `/etc/opensearch-dashboards/oglog-osdb.mytld.crt.pem`. + - Llave privada: `/etc/opensearch-dashboards/oglog-osdb.mytld.key.pem`. +3. **Prometheus**: + - Certificado del servicio: `/etc/prometheus/oglog-prom.mytld.crt.pem`. + - Llave privada: `/etc/prometheus/oglog-prom.mytld.key.pem`. +4. **Journalbeat**: + - Certificado del servicio: `/etc/journalbeat/oglog-jb.mytld.crt.pem`. + - Llave privada: `/etc/journalbeat/oglog-jb.mytld.key.pem`. +5. **Grafana**: + - Certificado del servicio: `/etc/grafana/oglog-graf.mytld.crt.pem`. + - Llave privada: `/etc/grafana/oglog-graf.mytld.key.pem`. + +--- + +## Servicios Configurados + +Los siguientes servicios se habilitan y se inician automáticamente: + +- OpenSearch (`opensearch.service`). +- OpenSearch Dashboards (`opensearch-dashboards.service`). +- Prometheus. +- Journalbeat. +- Grafana (`grafana-server`). +- Systemd Journal Remote (`systemd-journal-remote.service`). \ No newline at end of file diff --git a/script/mkcerts.sh b/script/mkcerts.sh new file mode 100755 index 0000000..9de5ead --- /dev/null +++ b/script/mkcerts.sh @@ -0,0 +1,96 @@ +#!/bin/bash + +rm -rf CA +mkdir CA +cd CA + +cat >openssl.cnf <>openssl.cnf <<'EOF' +certs = $dir/certs +new_certs_dir = $dir/newcerts +database = $dir/index.txt +serial = $dir/serial +default_md = sha256 +policy = policy_loose +copy_extensions = copy + +private_key = $dir/private/ca.key.pem +certificate = $dir/certs/ca.crt.pem + +[policy_loose] +countryName = optional +stateOrProvinceName = optional +localityName = optional +organizationName = optional +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +[req] +default_bits = 2048 +distinguished_name = req_distinguished_name +default_md = sha256 + +[req_distinguished_name] +countryName = Country Name (2 letter code) +EOF + +mkdir certs csr newcerts private; chmod 0700 private; touch index.txt; echo 1000 >serial + +function gen_cert() { + ITEM="$1" + PRIVKEY_PASS="$2" + CA_PASS_FILE="$3" + + FILE_PRIVKEY_PASS="./$ITEM-pass" + KEY_FILE="private/$ITEM.key.pem" + KEY_NOPASS_FILE="private/$ITEM.key.nopass.pem" + SUBJ="/C=ES/ST=Madrid/L=Madrid/CN=$ITEM" + ADDEXT="subjectAltName=DNS:$ITEM" + CSR="csr/$ITEM.csr.pem" + CERT_FILE="certs/$ITEM.crt.pem" + + touch "$FILE_PRIVKEY_PASS" + chmod 0600 "$FILE_PRIVKEY_PASS" + echo "$PRIVKEY_PASS" >"$FILE_PRIVKEY_PASS" + + openssl genrsa -aes256 -out "$KEY_FILE" -passout file:"$FILE_PRIVKEY_PASS" 2048 + openssl rsa -in "$KEY_FILE" -passin file:"$FILE_PRIVKEY_PASS" -out "$KEY_NOPASS_FILE" >/dev/null 2>&1 + openssl req -config openssl.cnf -key "$KEY_FILE" -passin file:"$FILE_PRIVKEY_PASS" -new -sha256 -subj "$SUBJ" -addext "$ADDEXT" -out "$CSR" + openssl ca -config openssl.cnf -batch -passin file:"$CA_PASS_FILE" -days 375 -notext -md sha256 -in "$CSR" -out "$CERT_FILE" >/dev/null 2>&1 +} + + +## gen CA +CA_PASS=CorrectHorseBatteryStapleCA +CA_PASS_FILE=./ca-pass +touch "$CA_PASS_FILE" +chmod 0600 "$CA_PASS_FILE" +echo "$CA_PASS" >"$CA_PASS_FILE" +openssl genrsa -aes256 -out private/ca.key.pem -passout file:"$CA_PASS_FILE" 4096 +#openssl rsa -in private/ca.key.pem -passin file:"$CA_PASS_FILE" -out private/ca.key.nopass.pem >/dev/null 2>&1 +openssl req -config openssl.cnf -key private/ca.key.pem -passin file:"$CA_PASS_FILE" -new -x509 -days 7300 -sha256 -subj '/C=ES/ST=Madrid/L=Madrid/CN=ca.mytld' -out certs/ca.crt.pem + + +## todos estos en oglog +gen_cert oglog-os.mytld CorrectHorseBatteryStapleOglogOS "$CA_PASS_FILE" +gen_cert oglog-osdb.mytld CorrectHorseBatteryStapleOglogOS "$CA_PASS_FILE" +gen_cert oglog-jrem.mytld CorrectHorseBatteryStapleOglogJRem "$CA_PASS_FILE" +gen_cert oglog-jb.mytld CorrectHorseBatteryStapleOglogJB "$CA_PASS_FILE" +gen_cert oglog-prom.mytld CorrectHorseBatteryStapleOglogProm "$CA_PASS_FILE" +gen_cert oglog-graf.mytld CorrectHorseBatteryStapleOglogGraf "$CA_PASS_FILE" + +## esto podria ser ogcore, ogboot... +gen_cert ogserver.mytld CorrectHorseBatteryStapleOgserver "$CA_PASS_FILE" + +## filebeat del agente +gen_cert ogagent-fb.mytld CorrectHorseBatteryStapleOgagentFB "$CA_PASS_FILE" + +cd .. diff --git a/script/script.sh b/script/script.sh new file mode 100755 index 0000000..914120b --- /dev/null +++ b/script/script.sh @@ -0,0 +1,209 @@ + +#!/bin/bash + +# Comprobar que las variables de entorno están definidas +if [[ -z "$IP_MAQUINA" || -z "$OPENSEARCH_INITIAL_ADMIN_PASSWORD" ]]; then + echo "ERROR: Las variables de entorno IP_MAQUINA y OPENSEARCH_INITIAL_ADMIN_PASSWORD deben estar definidas." + exit 1 +fi + +# Validar la contraseña cumple con los requisitos +if [[ ${#OPENSEARCH_INITIAL_ADMIN_PASSWORD} -lt 12 || ! "$OPENSEARCH_INITIAL_ADMIN_PASSWORD" =~ [A-Z] || ! "$OPENSEARCH_INITIAL_ADMIN_PASSWORD" =~ [0-9] || ! "$OPENSEARCH_INITIAL_ADMIN_PASSWORD" =~ [^a-zA-Z0-9] ]]; then + echo "ERROR: La contraseña OPENSEARCH_INITIAL_ADMIN_PASSWORD no cumple con los requisitos:" + echo "- Mínimo 12 caracteres." + echo "- Al menos una mayúscula, un número y un carácter especial." + exit 1 +fi + +# Actualizar /etc/hosts con los nombres de dominio +cat >>/etc/hosts < /etc/apt/sources.list.d/opensearch-2.x.list +echo "deb [signed-by=/usr/share/keyrings/opensearch-keyring] https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/2.x/apt stable main" > /etc/apt/sources.list.d/opensearch-dashboards-2.x.list +apt-get update +apt-get install -y opensearch opensearch-dashboards + +# Configurar OpenSearch con los certificados y la IP +cp CA/certs/ca.crt.pem /etc/opensearch/ +cp CA/certs/oglog-os.mytld.crt.pem /etc/opensearch/ +cp CA/private/oglog-os.mytld.key.nopass.pem /etc/opensearch/oglog-os.mytld.key.pem +chown opensearch:opensearch /etc/opensearch/{ca.crt.pem,oglog-os.mytld.crt.pem,oglog-os.mytld.key.pem} + +cp CA/certs/oglog-osdb.mytld.crt.pem /etc/opensearch-dashboards/ +cp CA/private/oglog-osdb.mytld.key.nopass.pem /etc/opensearch-dashboards/oglog-osdb.mytld.key.pem +chown opensearch-dashboards:opensearch-dashboards /etc/opensearch-dashboards/oglog-osdb.mytld.crt.pem /etc/opensearch-dashboards/oglog-osdb.key.pem + +sed -i -e '/^plugins.security.ssl.http.pemcert_filepath:/ s/: .*/: oglog-os.mytld.crt.pem/' /etc/opensearch/opensearch.yml +sed -i -e '/^plugins.security.ssl.http.pemkey_filepath:/ s/: .*/: oglog-os.mytld.key.pem/' /etc/opensearch/opensearch.yml +sed -i -e '/^plugins.security.ssl.http.pemtrustedcas_filepath:/s/: .*/: ca.crt.pem/' /etc/opensearch/opensearch.yml +sed -i -e '/^#network.host/ s/.*/network.host: '"$IP_MAQUINA"'/' /etc/opensearch/opensearch.yml + +cat >>/etc/opensearch/opensearch.yml </etc/opensearch-dashboards/opensearch_dashboards.yml <>/etc/prometheus/prometheus.yml </etc/prometheus/web-config.yml </etc/journalbeat/journalbeat.yml </etc/apt/keyrings/grafana.gpg +echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" >/etc/apt/sources.list.d/grafana.list +apt-get update +apt-get install --yes grafana + +cp CA/certs/oglog-graf.mytld.crt.pem /etc/grafana/ +cp CA/private/oglog-graf.mytld.key.nopass.pem /etc/grafana/oglog-graf.mytld.key.pem +chown grafana:grafana /etc/grafana/oglog-graf.mytld.crt.pem /etc/grafana/oglog-graf.mytld.key.pem + +cp -a /etc/grafana/grafana.ini /etc/grafana/grafana.ini.dist +cat >/etc/grafana/grafana.ini <