Creacion carpeta script

oglog-script
Dawrys Pilar 2024-12-03 10:17:18 +01:00
parent 3b4fba319e
commit dae74aa2f6
3 changed files with 436 additions and 0 deletions

View File

@ -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`).

96
script/mkcerts.sh 100755
View File

@ -0,0 +1,96 @@
#!/bin/bash
rm -rf CA
mkdir CA
cd CA
cat >openssl.cnf <<EOF
[ca]
default_ca = CA_default
[CA_default]
dir = $PWD
EOF
cat >>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 ..

209
script/script.sh 100755
View File

@ -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 <<EOF
$IP_MAQUINA oglog-os.mytld
$IP_MAQUINA oglog-osdb.mytld
$IP_MAQUINA oglog-jb.mytld
$IP_MAQUINA oglog-jrem.mytld
$IP_MAQUINA oglog-prom.mytld
$IP_MAQUINA oglog-graf.mytld
EOF
# Instalar dependencias iniciales
apt-get update
apt-get -y install ca-certificates gnupg2 lsb-release systemd-journal-remote
# Ejecutar el script mkcerts.sh
bash ./mkcerts.sh
# Configuración de certificados SSL en el sistema
cp CA/certs/ca.crt.pem /etc/ssl/certs/
ln -s /etc/ssl/certs/ca.crt.pem /etc/ssl/certs/"$(openssl x509 -in /etc/ssl/certs/ca.crt.pem -hash -noout).0"
# Configurar repositorios y llaves para OpenSearch
curl -o- https://artifacts.opensearch.org/publickeys/opensearch.pgp | gpg --dearmor --batch --yes -o /usr/share/keyrings/opensearch-keyring
echo "deb [signed-by=/usr/share/keyrings/opensearch-keyring] https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/apt stable main" > /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 <<EOF
discovery.type: single-node
compatibility.override_main_response_version: true
plugins.security.ssl.http.clientauth_mode: REQUIRE
plugins.security.ssl_cert_reload_enabled: true
EOF
# Configurar OpenSearch Dashboards
cp -a /etc/opensearch-dashboards/opensearch_dashboards.yml /etc/opensearch-dashboards/opensearch_dashboards.yml.dist
cat >/etc/opensearch-dashboards/opensearch_dashboards.yml <<EOF
server.host: 0.0.0.0
opensearch.hosts: ["https://oglog-os.mytld:9200"]
opensearch.username: "admin"
opensearch.password: "$OPENSEARCH_INITIAL_ADMIN_PASSWORD"
server.ssl.enabled: true
server.ssl.certificate: /etc/opensearch-dashboards/oglog-osdb.mytld.crt.pem
server.ssl.key: /etc/opensearch-dashboards/oglog-osdb.mytld.key.pem
opensearch.ssl.certificate: /etc/opensearch-dashboards/oglog-osdb.mytld.crt.pem
opensearch.ssl.key: /etc/opensearch-dashboards/oglog-osdb.mytld.key.pem
opensearch.ssl.verificationMode: full
opensearch.ssl.certificateAuthorities: [ "/etc/ssl/certs/ca.crt.pem" ]
opensearch.ssl.alwaysPresentCertificate: true
EOF
# Habilitar servicios de OpenSearch
systemctl enable --now opensearch.service opensearch-dashboards.service
# Configurar systemd-journal-remote
cp CA/certs/oglog-jrem.mytld.crt.pem /etc/systemd/
cp CA/private/oglog-jrem.mytld.key.nopass.pem /etc/systemd/oglog-jrem.mytld.key.pem
chown systemd-journal-remote:systemd-journal-remote /etc/systemd/oglog-jrem.mytld.crt.pem /etc/systemd/oglog-jrem.mytld.key.pem
install --owner systemd-journal-remote --group systemd-journal-remote --mode 0750 --directory /var/log/journal/remote/
sed -i -e '/ServerKeyFile/ s%.*%ServerKeyFile=/etc/systemd/oglog-jrem.mytld.key.pem%' /etc/systemd/journal-remote.conf
sed -i -e '/ServerCertificateFile/s%.*%ServerCertificateFile=/etc/systemd/oglog-jrem.mytld.crt.pem%' /etc/systemd/journal-remote.conf
systemctl enable --now systemd-journal-remote.service
# Configurar Prometheus
apt-get install -y prometheus
cp CA/certs/oglog-prom.mytld.crt.pem /etc/prometheus/
cp CA/private/oglog-prom.mytld.key.nopass.pem /etc/prometheus/oglog-prom.mytld.key.pem
chown prometheus:prometheus /etc/prometheus/oglog-prom.mytld.crt.pem /etc/prometheus/oglog-prom.mytld.key.pem
cat >>/etc/prometheus/prometheus.yml <<EOF
- job_name: ogserver
static_configs:
- targets: ['ogserver.mytld:9100']
- job_name: ogagent
static_configs:
- targets: ['ogagent.mytld:9100']
EOF
cat >/etc/prometheus/web-config.yml <<EOF
tls_server_config:
cert_file: /etc/prometheus/oglog-prom.mytld.crt.pem
key_file: /etc/prometheus/oglog-prom.mytld.key.pem
EOF
sed -i -e '/^ARGS/s%"$%--web.config.file=/etc/prometheus/web-config.yml"%' /etc/default/prometheus
systemctl restart prometheus
# Configurar Journalbeat
wget https://artifacts.elastic.co/downloads/beats/journalbeat/journalbeat-oss-7.12.1-amd64.deb -P /tmp/
dpkg -i /tmp/journalbeat-oss-7.12.1-amd64.deb
cp CA/certs/oglog-jb.mytld.crt.pem /etc/journalbeat/
cp CA/private/oglog-jb.mytld.key.nopass.pem /etc/journalbeat/oglog-jb.mytld.key.pem
cat >/etc/journalbeat/journalbeat.yml <<EOF
journalbeat.inputs:
- paths:
- "/var/log/journal"
- "/var/log/journal/remote"
seek: cursor
setup.template.settings:
index.number_of_shards: 1
output.elasticsearch:
hosts: ["oglog-os.mytld:9200"]
username: "admin"
password: "$OPENSEARCH_INITIAL_ADMIN_PASSWORD"
protocol: "https"
ssl.enabled: true
ssl.verification_mode: full
ssl.certificate: "/etc/journalbeat/oglog-jb.mytld.crt.pem"
ssl.key: "/etc/journalbeat/oglog-jb.mytld.key.pem"
processors:
- add_docker_metadata: ~
seccomp.enabled: false
EOF
systemctl enable --now journalbeat
# Configurar Grafana
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor >/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 <<EOF
[server]
protocol = https
cert_file = /etc/grafana/oglog-graf.mytld.crt.pem
cert_key = /etc/grafana/oglog-graf.mytld.key.pem
[analytics]
reporting_enabled = false
check_for_updates = false
check_for_plugin_updates = false
# Añadido para configurar Prometheus como fuente de datos
[database]
enabled = true
type = sqlite3
path = /var/lib/grafana/grafana.db
[auth]
disable_login_form = false
[datasources]
[datasources.prometheus]
name = Prometheus
type = prometheus
access = proxy
url = https://oglog-prom.mytld:9090
isDefault = true
# Descargar y configurar dashboard
[dashboardProviders]
[dashboardProviders.default]
enabled = true
folder = /etc/grafana/dashboards
type = file
options = {}
dashboard = /etc/grafana/dashboards/405.json
EOF
# Crear directorio y descargar el dashboard
mkdir -p /etc/grafana/dashboards
wget -O /etc/grafana/dashboards/405.json https://grafana.com/api/dashboards/405/revisions/8/download
systemctl enable --now grafana-server