Solo per i visitatori del nostro blog: ricevi 3 mesi aggiuntivi gratuiti + 10% di sconto sul piano triennale YSBLOG10
Afferra l'affare

Come creare ElasticSearch su un server Linux con sicurezza abilitata

Per creare Elasticsearch su un server Linux, preparare il sistema operativo, aggiungere il repository dei pacchetti Elastic, installare Elasticsearch 8.x, ottimizzare i limiti del kernel, configurare elasticsearch.yml (a nodo singolo o cluster), aprire le porte 9200/9300, abilitare e avviare il servizio, proteggere con HTTPS/password e verificare tramite API REST. Facoltativamente, installare Kibana per dashboard e managemento.

Se desideri creare Elasticsearch su un server Linux per la ricerca, l'analisi o la registrazione, questa guida ti guiderà attraverso una configurazione pulita e orientata alla produzione.

Parleremo di Ubuntu/Debian e delle distribuzioni basate su RHEL, delle impostazioni di sicurezza predefinite in Elasticsearch 8, dell'ottimizzazione delle prestazioni, dell'utilizzo di base delle API e di suggerimenti pratici derivanti da anni di esperienza nell'hosting di carichi di lavoro reali.

Cosa costruirai e a chi è rivolta questa guida?

Questo tutorial aiuta i principianti e gli amministratori di sistema a installare e configurare Elasticsearch 8 su un server Linux. Imposterai un'istanza sicura a nodo singolo o pronta per il cluster, imparerai le basi dell'ottimizzazione del kernel e della JVM ed eseguirai le tue prime query di indice e ricerca. I passaggi sono in linea con le best practice di Elastic e le moderne impostazioni di sicurezza predefinite.

Prerequisiti e requisiti di sistema

  • Sistemi operativi supportati: Ubuntu 20.04/22.04/24.04, Debian 11/12, RHEL/CentOS/AlmaLinux/Rocky 8/9
  • CPU/RAM: Minimo 2 VCPU e 4 GB RAM (8 GB o più consigliati)
  • Memoria su disco: SSD consigliato; pianificare IOPS per carichi di lavoro ad alta indicizzazione
  • Reti: Aprire le porte TCP 9200 (HTTP) e 9300 (trasporto/cluster)
  • Accesso: Privilegi di root o sudo
  • Sincronizzazione dell'orologio: Abilita chrony o systemd-timesyncd per timestamp coerenti

Nota: Elasticsearch 8 include un JDK compatibile. Non è necessario installare Java separatamente.

Comprendere le impostazioni di sicurezza predefinite di Elasticsearch 8

Elasticsearch 8 abilita la sicurezza per impostazione predefinita. HTTPS è attivo e utilizzerai utenti integrati (come elastic) con password. Per gli sviluppatori, è possibile eseguire un singolo nodo con una configurazione minima. Per la produzione, configurare TLS, utenti/ruoli e limitare l'esposizione della rete.

Installa Elasticsearch su Ubuntu/Debian

Questi passaggi aggiungono il repository APT di Elastic e installano l'ultima versione 8.x.

sudo apt update && sudo apt install -y curl gnupg apt-transport-https

# Import Elastic GPG key
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic.gpg

# Add APT repository
echo "deb [signed-by=/usr/share/keyrings/elastic.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | \
  sudo tee /etc/apt/sources.list.d/elastic-8.x.list

sudo apt update
sudo apt install -y elasticsearch

L'installatore può stampare una password temporanea per l' elastic Posizioni dei file utente e certificato. Salvarli in modo sicuro.

Installa Elasticsearch su RHEL/CentOS/AlmaLinux/Rocky

sudo dnf install -y curl gnupg

# Create YUM repo
cat <<'EOF' | sudo tee /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-8.x]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

sudo dnf clean all
sudo dnf install -y elasticsearch

Ottimizzazione del kernel e del sistema operativo (obbligatoria)

Elasticsearch si basa su mappature della memoria virtuale e file aperti. Impostali prima del primo avvio.

# Virtual memory mappings
echo "vm.max_map_count=262144" | sudo tee /etc/sysctl.d/99-elasticsearch.conf
sudo sysctl --system

# File descriptors and processes for the elasticsearch user
echo -e "elasticsearch soft nofile 65536\nelasticsearch hard nofile 65536\nelasticsearch soft nproc 4096\nelasticsearch hard nproc 4096" | \
  sudo tee /etc/security/limits.d/90-elasticsearch.conf

# Optional: reduce swap aggressiveness
echo "vm.swappiness=1" | sudo tee /etc/sysctl.d/98-swappiness.conf
sudo sysctl --system

Per bloccare la memoria (aiutando a evitare lo swapping), abilitare il blocco della memoria e regolare i limiti di systemd.

# In elasticsearch.yml
# bootstrap.memory_lock: true

# Create systemd override to allow memlock
sudo systemctl edit elasticsearch
# Then add:
# [Service]
# LimitMEMLOCK=infinity

sudo systemctl daemon-reload

Configura elasticsearch.yml

Modificare il file di configurazione principale per impostare l'identità del nodo, il binding di rete e la modalità cluster.

sudo nano /etc/elasticsearch/elasticsearch.yml

Per un singolo nodo sicuro (sviluppo/test):

cluster.name: my-es-cluster
node.name: node-1
network.host: 0.0.0.0            # or a private IP; avoid exposing to the internet
discovery.type: single-node
xpack.security.enabled: true     # On by default in 8.x

Per un cluster multi-nodo pronto per la produzione (esempio):

cluster.name: prod-es
node.name: es-1
network.host: 10.0.1.10

discovery.seed_hosts: ["10.0.1.10", "10.0.1.11", "10.0.1.12"]
cluster.initial_master_nodes: ["es-1", "es-2", "es-3"]

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.http.ssl.enabled: true

Per TLS, utilizzare lo strumento di certificazione integrato o la PKI. Elasticsearch 8 genera certificati di servizio durante l'installazione; è possibile rigenerarli con elasticsearch-certutil strumento.

Avviare, abilitare e verificare il servizio

sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
sudo systemctl status elasticsearch
# Logs
sudo journalctl -u elasticsearch -f

Se necessario, ottenere o reimpostare la password del superutente integrata:

# If shown at install, use that. Otherwise:
sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic

Verifica tramite HTTPS (il certificato può essere autofirmato):

curl -u elastic https://localhost:9200 -k
# Expect cluster info JSON

Aprire le porte del firewall (se necessario)

Per lo sviluppo a nodo singolo, potrebbe essere necessario solo 9200. Per i cluster, aprire 9300 solo su reti private.

# UFW (Ubuntu)
sudo ufw allow 9200/tcp
sudo ufw allow 9300/tcp
sudo ufw reload

# firewalld (RHEL-based)
sudo firewall-cmd --permanent --add-port=9200/tcp
sudo firewall-cmd --permanent --add-port=9300/tcp
sudo firewall-cmd --reload

Utilizzare l'API REST per convalidare la funzionalità. Sostituire la password di conseguenza.

# Create an index with 1 shard and 1 replica (adjust for your cluster)
curl -k -u elastic:YOUR_PASSWORD -X PUT "https://localhost:9200/blog?pretty" \
  -H 'Content-Type: application/json' \
  -d '{ "settings": { "number_of_shards": 1, "number_of_replicas": 1 } }'

# Index a document (auto-generate ID)
curl -k -u elastic:YOUR_PASSWORD -X POST "https://localhost:9200/blog/_doc?pretty" \
  -H 'Content-Type: application/json' \
  -d '{ "title": "Hello Elasticsearch", "tags": ["linux","search"], "published": true }'

# Search
curl -k -u elastic:YOUR_PASSWORD "https://localhost:9200/blog/_search?q=title:hello&pretty"

Facoltativo: installa Kibana

Kibana fornisce una GUI per managemento, dashboard e strumenti di sviluppo.

# Ubuntu/Debian
sudo apt install -y kibana

# RHEL-based
sudo dnf install -y kibana

Associa Kibana a un'interfaccia sicura e registralo con Elasticsearch 8:

# /etc/kibana/kibana.yml
server.host: "0.0.0.0"        # or private IP
elasticsearch.hosts: ["https://localhost:9200"]

# Enrollment (generates a token from ES)
sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
sudo /usr/share/kibana/bin/kibana-setup --enrollment-token <TOKEN>

sudo systemctl enable --now kibana

Elementi essenziali per l'ottimizzazione delle prestazioni

  • Dimensione heap: Imposta circa il 50% di RAM (max ~31 GB) per un'efficienza OOPs compressa.
  • Memoria su disco: Preferire NVMe/SSD. Evitare l'archiviazione remota o in rete per i dati più importanti.
  • Frammenti: Non sovrasuddividere. Inizia con 1-2 shard primari per indice; regola in base al volume di dati e allo SLA.
  • Aggiornamenti e repliche: Ridurre il numero di repliche per aumentare la velocità di acquisizione; aumentarlo per aumentare la disponibilità.
  • Pipeline di acquisizione: Utilizzare i nodi di ingestione Elasticsearch o Logstash per un'analisi approfondita.

Imposta heap tramite l'override di jvm.options.d:

echo "-Xms4g" | sudo tee /etc/elasticsearch/jvm.options.d/heap.options
echo "-Xmx4g" | sudo tee -a /etc/elasticsearch/jvm.options.d/heap.options
sudo systemctl restart elasticsearch

Lista di controllo per il rafforzamento della sicurezza

  • Non esporre mai 9200/9300 alla rete Internet pubblica. Utilizza reti private, VPN o proxy inversi con TLS.
  • Utilizza password complesse o SSO (SAML/OIDC). Crea ruoli con ambito limitato per le app.
  • Ruotare i certificati, disabilitare i cifrari deboli e associarli a TLS 1.2+.
  • Abilitare la registrazione degli audit per esigenze di conformità.
  • Eseguire regolarmente il backup con snapshot (compatibili con S3 o NFS).
# Create a repository for snapshots (example: S3)
PUT _snapshot/my_s3_repo
{
  "type": "s3",
  "settings": {
    "bucket": "my-es-backups",
    "region": "us-east-1"
  }
}

# Trigger a snapshot
PUT _snapshot/my_s3_repo/snap-001?wait_for_completion=true

Aggiornamenti e riavvii continui

  • Istantanea prima degli aggiornamenti.
  • Controlla la compatibilità dei plugin e gli avvisi di deprecazione in _cluster/settings e registri.
  • Nei cluster, eseguire riavvii progressivi: arrestare un nodo, eseguire l'aggiornamento, avviare, attendere il verde, ripetere.
  • Mantenere le versioni secondarie allineate tra i nodi per evitare incompatibilità.

Risoluzione dei problemi comuni

  • Il servizio non si avvia: Vedi journalctl -u elasticsearch -e per errori di autorizzazione o di blocco della memoria.
  • max virtual memory areas vm.max_map_count: Riapplicare sysctl e riavviare se necessario.
  • Grappolo rosso/giallo: Ispezione /_cluster/health e /_cat/shards; risolvere problemi di allocazione o limiti di archiviazione.
  • Errori di autorizzazione: Reimposta il elastic password utente e verifica certificati.
  • Utilizzo elevato dell'heap: Aumentare l'heap con cautela, ridurre il numero di frammenti o ottimizzare query/mapping.

Suggerimento per un hosting conveniente (dalle trincee)

Elasticsearch prospera su un'elevata velocità CPU, RAMe SSD, ma i costi possono aumentare. Se inizi in piccolo o stai migrando da ambienti condivisi, YouStableI server VPS e cloud con SSD di offrono un rapporto prezzo/prestazioni bilanciato per Elasticsearch. Richiedi al supporto immagini ottimizzate con i limiti del kernel e le impostazioni predefinite della JVM preconfigurate per ridurre il time-to-value.

Riepilogo delle migliori pratiche

  • Installa Elasticsearch 8 dai repository ufficiali per ottenere impostazioni di sicurezza predefinite e aggiornamenti.
  • Applica limiti al kernel (vm.max_map_count, nofile, nproc) e abilita il blocco della memoria.
  • Collegati agli IP privati ​​e proteggi le porte con un firewall o gruppi di sicurezza.
  • Heap di dimensioni corrette (≈50%) RAM), evitate l'oversharding e utilizzate gli SSD.
  • Automatizzare gli snapshot e testare i ripristini regolarmente.

Domande Frequenti

Devo installare Java per eseguire Elasticsearch 8 su Linux?

Di solito no. Elasticsearch 8 include un JDK compatibile di default. Installa una versione Java personalizzata solo se hai esigenze specifiche e assicurati che le versioni corrispondano alla matrice di compatibilità di Elastic.

Quali porte devono essere aperte per Elasticsearch?

Porta 9200 (API HTTPS/HTTP) e 9300 (trasporto per clustering). Mantenere la porta 9300 privata. Evitare di esporre la porta 9200 alla rete Internet pubblica; limitare l'accesso tramite regole firewall, VPN o un proxy inverso autenticato.

Assegnare circa il 50% delle risorse disponibili RAM all'heap Java (fino a ~31 GB). Utilizzare storage SSD o NVMe e garantire IOPS adeguati. Iniziare con 2 vCPU/ 4 GB RAM minimo; 8–16 GB RAM è comodo per carichi di lavoro moderati.

Come faccio a reimpostare la password utente elastica?

Esegui: sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elasticConservare le password in un archivio sicuro e aggiornare tutte le applicazioni che eseguono l'autenticazione nel cluster.

Come posso eseguire il backup e il ripristino dei dati Elasticsearch?

Utilizza snapshot e ripristino. Registra un repository (S3, GCS, Azure o file system condiviso), quindi attiva gli snapshot. Per ripristinare, crea una richiesta di ripristino dell'indice dal repository degli snapshot. Testa sempre prima i ripristini su ambienti non di produzione.

Condividere tramite:

Sanjeet Chauhan

Sanjeet Chauhan è un blogger ed esperto SEO, impegnato ad aiutare i siti web a crescere organicamente. Condivide strategie pratiche, consigli pratici e spunti per aumentare il traffico, migliorare il posizionamento e massimizzare la presenza online.

Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

Scorrere fino a Top