
Wstęp
Elasticsearch i Kibana to potężne narzędzia, które tworzą rdzeń tego co nazywa się ELK Stack (Elasticsearch, Logstash, Kibana). Elasticsearch to rozproszony silnik wyszukiwania i analityki, a Kibana to warstwa wizualizacji, która sprawia, że wszystkie twoje dane stają się ładne i użyteczne.

To co najbardziej lubię w stacku Elastic to możliwości APM (Application Performance Monitoring). Jest to absolutnie best-in-class narzędzie do monitorowania aplikacji – możesz śledzić metryki wydajności, błędy, logi i otrzymywać informacje w czasie rzeczywistym o tym, co dzieje się w twojej infrastrukturze. Oczywiście, żeby to osiągnąć potrzebujemy integracji Elastic APM w naszym stacku, ale o tym w przyszłych artykułach – najpierw musimy zacząć od podstaw.

W tym poradniku przeprowadzę cię przez instalację Elasticsearch i Kibany na twoim własnym VPS z odpowiednimi certyfikatami SSL, konfiguracją domeny (jak kibana.twojastrona.com
) i integracją CrowdSec dla bezpieczeństwa. To pierwszy artykuł z mojej serii o Elastic Stack, więc spodziewaj się więcej szczegółowych analiz konkretnych funkcji i przypadków użycia.
Bądźmy jednak realistami – to nie jest super produkcyjna konfiguracja do użytku korporacyjnego, ale do lokalnych testów, zbierania logów z mniejszych aplikacji czy nauki jest idealna – możemy w tym celu wynająć małą VM’kę na Hetzner zaczynając już od ~8 EUR/miesiąc.
Polecam mieć co najmniej 8GB RAM na twoim VPS i działa to na architekturach AMD64 i ARM64. Będę to robił na Ubuntu.
Będziemy opierać się na oficjalnych poradnikach z Elastic, ale daję ci „rozszerzony pakiet” ze wszystkimi dodatkami:
Konfiguracja VPS
Zanim zaczniemy, powinieneś wykonać podstawowe zabezpieczenie swojego VPS. Jeszcze nie napisałem kompleksowego artykułu o „hardeningu” serwera (zdecydowanie jest na mojej liście), ale powinieneś co najmniej skonfigurować swap, zabezpieczyć dostęp SSH, skonfigurować firewall i zastosować podstawowe praktyki bezpieczeństwa. Założę, że masz czysty serwer Ubuntu z dostępem root.
Instalacja Elasticsearch
Aktualizacje systemu
Najpierw – zaktualizujmy wszystko:
apt update
Dodawanie repozytorium Elastic
Teraz musimy dodać oficjalne repozytorium Elastic do naszego systemu. To zapewnia nam najnowsze stabilne wersje i aktualizacje bezpieczeństwa:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
apt install apt-transport-https -y
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/9.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-9.x.list
apt update
Instalacja Elasticsearch
Z skonfigurowanym repozytorium instalacja Elasticsearch jest prosta:
apt install elasticsearch -y
Wstępna konfiguracja
Teraz ważna część – konfiguracja Elasticsearch. Wyjaśnię dlaczego wprowadzamy te zmiany:
nano /etc/elasticsearch/elasticsearch.yml
Dodaj lub zmodyfikuj te ustawienia:
cluster.name: my-cluster
network.host: 0.0.0.0
http.port: 9200
transport.host: 0.0.0.0
Ważna uwaga: Używam 0.0.0.0
tymczasowo, żeby ułatwić konfigurację. Później zablokujemy to na 127.0.0.1
kiedy skonfigurujemy nasz reverse proxy z SSL i konfiguracją domeny. To jest znacznie bezpieczniejsze.
[Opcjonalnie] Konfiguracja przechowywania
Oto coś, co wiele poradników pomija – konfiguracja dedykowanego miejsca na dane Elasticsearch. Jeśli masz osobny dysk lub partycję na dane (co gorąco polecam), skonfiguruj to teraz:
nano /etc/elasticsearch/elasticsearch.yml
Dodaj te ścieżki:
path.data: /mnt/disk1/elasticsearch/data
path.logs: /mnt/disk1/elasticsearch/logs
Dlaczego osobne miejsce? Elasticsearch może generować dużo danych i logów. Posiadanie dedykowanego miejsca zapobiega zapełnieniu systemu i pozwala na lepszą wydajność oraz strategie backupów.
Uruchamianie Elasticsearch
Włączmy i uruchommy usługę:
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
I sprawdź czy działa:
sudo systemctl status elasticsearch.service

Konfiguracja Elasticsearch
Konfiguracja uwierzytelniania
Elasticsearch ma domyślnie włączone funkcje bezpieczeństwa. Musimy ustawić hasło dla superużytkownika elastic
:
/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
Zapisz to hasło! To twój root dostęp do Elasticsearch i będziesz go potrzebować do konfiguracji Kibana.
Testowanie instalacji
Sprawdźmy czy wszystko działa:
curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:<twoje-hasło> https://localhost:9200
Powinieneś zobaczyć odpowiedź JSON z informacjami o klastrze.

Instalacja Kibana
Z działającym Elasticsearch zainstalujmy Kibana:
apt install kibana -y
Konfiguracja Kibana
Teraz musimy skonfigurować Kibana do pracy z naszą instancją Elasticsearch:
nano /etc/kibana/kibana.yml
Skonfiguruj te ustawienia:
server.port: 5601
server.host: 0.0.0.0
Znowu, 0.0.0.0
to tymczasowe – zabezpieczymy to później z naszą konfiguracją reverse proxy.
Uruchamianie Kibana
Włącz i uruchom usługę Kibana:
sudo systemctl daemon-reload
sudo systemctl enable kibana.service
sudo systemctl start kibana.service
I sprawdź czy działa:
sudo systemctl status kibana.service

Konfiguracja Kibana
Łączenie z Elasticsearch
Kibana musi się połączyć z Elasticsearch. Wygenerujemy token rejestracji:
/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
Wstępna konfiguracja
Teraz przejdź do http://ip-twojego-serwera:5601
w przeglądarce. Zostaniesz poproszony o wprowadzenie tokena rejestracji, który właśnie wygenerowaliśmy. Po tym zaloguj się użytkownikiem elastic
i hasłem, które ustawiliśmy wcześniej.

Klucze szyfrowania
Kibana potrzebuje kluczy szyfrowania do różnych funkcji jak monitorowanie uptime. Bez nich będziesz widział błędy w logach:
/usr/share/kibana/bin/kibana-encryption-keys generate
Skopiuj wygenerowane ustawienia (wyglądają jak xpack.encryptedSavedObjects.encryptionKey: ...
) i dodaj je do konfiguracji Kibana:
nano /etc/kibana/kibana.yml
Wklej wygenerowane klucze, potem zrestartuj Kibana:
sudo systemctl restart kibana.service
Konfiguracja domeny i SSL
Teraz przechodzimy do fajnej części – konfiguracji odpowiednich domen i certyfikatów SSL. Będę używał domen jak elasticsearch.twojastrona.com
i kibana.twojastrona.com
.
Najpierw musisz dodać rekordy A/AAAA do swojego DNS wskazujące na IP twojego serwera. Sposób zależy od twojego dostawcy DNS, ale koncepcja jest wszędzie taka sama.

Tymczasowy certyfikat SSL
Potrzebujemy tymczasowego certyfikatu do konfiguracji nginx. Nie martw się, później zastąpimy to odpowiednim certyfikatem Let’s Encrypt:
openssl req -x509 -nodes -days 3 -newkey rsa:2048 \
-keyout /etc/ssl/private/temporary-cert-for-nginx.key \
-out /etc/ssl/certs/temporary-cert-for-nginx.crt \
-subj "/CN=kibana.twojastrona.com"
Instalacja Certbot
Certbot to oficjalne narzędzie Let’s Encrypt do uzyskiwania certyfikatów SSL:
apt install snapd
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
Instalacja Nginx
Użyjemy Nginx jako reverse proxy. To daje nam terminację SSL, lepsze bezpieczeństwo i możliwość używania własnych domen:
apt install nginx -y
Konfiguracja reverse proxy dla Kibana
Stwórz konfigurację Nginx dla Kibana:
nano /etc/nginx/sites-available/kibana
server {
listen 443 ssl http2;
server_name kibana.twojastrona.com; # Zmień na swoją domenę
# Certyfikat SSL (certbot zastąpi to automatycznie)
ssl_certificate /etc/ssl/certs/temporary-cert-for-nginx.crt;
ssl_certificate_key /etc/ssl/private/temporary-cert-for-nginx.key;
# Podstawowe ustawienia SSL
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# Logowanie dla CrowdSec
access_log /var/log/nginx/kibana-access.log;
error_log /var/log/nginx/kibana-error.log;
location / {
proxy_pass http://127.0.0.1:5601;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_cache_bypass $http_upgrade;
}
}
Włącz konfigurację:
ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/kibana
nginx -t
Konfiguracja reverse proxy dla Elasticsearch
Stwórz konfigurację Nginx dla Elasticsearch:
nano /etc/nginx/sites-available/elasticsearch
server {
listen 443 ssl http2;
server_name elasticsearch.twojastrona.com; # Zmień na swoją domenę
# Podstawowe ustawienia SSL
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# Certyfikat SSL (certbot zastąpi to automatycznie)
ssl_certificate /etc/ssl/certs/temporary-cert-for-nginx.crt;
ssl_certificate_key /etc/ssl/private/temporary-cert-for-nginx.key;
# Logowanie dla CrowdSec
access_log /var/log/nginx/elasticsearch-access.log;
error_log /var/log/nginx/elasticsearch-error.log;
# Nagłówki bezpieczeństwa
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
location / {
proxy_pass https://127.0.0.1:9200;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection "";
# SSL off bo łączymy się z ES przez HTTPS z self-signed certem
proxy_ssl_verify off;
proxy_ssl_session_reuse on;
# Timeouty dla długich zapytań
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
# Ustawienia buforów
proxy_buffering on;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
}
# Endpoint health check
location /_health {
proxy_pass https://127.0.0.1:9200/_cluster/health;
proxy_ssl_verify off;
proxy_ssl_session_reuse on;
access_log off;
}
}
Włącz też tę konfigurację:
ln -s /etc/nginx/sites-available/elasticsearch /etc/nginx/sites-enabled/elasticsearch
nginx -t
Restart Nginx
systemctl restart nginx
Generowanie certyfikatów SSL

Teraz magia – zdobądźmy odpowiednie certyfikaty SSL z Let’s Encrypt:
certbot --nginx
Certbot automatycznie wykryje twoje konfiguracje Nginx i zaproponuje ich zabezpieczenie. Wybierz obie domeny i postępuj zgodnie z instrukcjami.
systemctl restart nginx
Testowanie
Przejdź do https://kibana.twojastrona.com
– powinieneś zobaczyć Kibana z odpowiednim certyfikatem SSL!
Zabezpieczanie instalacji
Teraz gdy mamy działający reverse proxy, zablokujmy dostęp tylko do localhost.
Ograniczanie dostępu do Elasticsearch
Zmień ustawienia sieciowe:
nano /etc/elasticsearch/elasticsearch.yml
network.host: 127.0.0.1
http.host: 127.0.0.1
I zrestartuj elasticsearch
systemctl restart elasticsearch
Ograniczanie dostępu do Kibana
Zaktualizuj te ustawienia:
nano /etc/kibana/kibana.yml
server.host: 127.0.0.1
server.publicBaseUrl: "https://kibana.twojastrona.com"
elasticsearch.hosts: ["https://127.0.0.1:9200"]
I zrestartuj kibanę:
systemctl restart kibana
Sprawdź, że Kibana jest nadal dostępna przez twoją domenę.
Integracja CrowdSec

Już szczegółowo opisałem instalację CrowdSec w moich poprzednich artykułach:
Ważne: Przejdź bezpośrednio do sekcji „Bonus” i zacznij od kroku 4 w artykule.

Po skonfigurowaniu CrowdSec upewnij się, że dodałeś nasze logi Elasticsearch i Kibana do konfiguracji akwizycji:
nano /etc/crowdsec/acquis.yaml
Dodaj te pliki logów:
filenames:
- /var/log/nginx/kibana-access.log
- /var/log/nginx/kibana-error.log
- /var/log/nginx/elasticsearch-access.log
- /var/log/nginx/elasticsearch-error.log
labels:
type: nginx
Podsumowanie

Gratulacje! Masz teraz w pełni funkcjonalną konfigurację Elasticsearch i Kibana z odpowiednimi certyfikatami SSL, konfiguracją domeny i środkami bezpieczeństwa. Ta konfiguracja daje ci:
- Elasticsearch dostępny pod
https://elasticsearch.twojastrona.com
- Kibana dostępną pod
https://kibana.twojastrona.com
- Certyfikaty SSL automatycznie odnawiane przez Let’s Encrypt
- Bezpieczeństwo poprzez integrację CrowdSec
- Odpowiednią kontrolę dostępu z usługami przypisanymi do localhost
Pamiętaj o utrzymywaniu systemu w aktualnym stanie, monitorowaniu zużycia zasobów (szczególnie RAM i miejsce na dysku) i regularnym backupowaniu danych Elasticsearch. Warto też zrobić backup plików konfiguracyjnych, które utworzyliśmy.
Miłego monitorowania!