Archive for  Februar 2019

Home / Februar 2019
1 Post

Einleitung:

Zur privaten Weiterbildung habe ich mir den ELK Stack angesehen.

Was ist ELK und wofür steht es?

Im Grunde genommen ist es nicht ein Produkt sondern eine Sammlung aus mehreren Open-Source Produkten. Grob zusammengefasst:

Elasticsearch = Datenbank (NoSQL, Ansprechbar per RESTful)

Logstash = Ermöglicht Sammeln, Filtern und Anpassen von Datenströmen

Kibana = Visualisierung der gespeicherten/gesammelten Daten

1. Voraussetzungen

  • Debian 9
  • RAM: >= 8GB (läuft auch mit weniger, ggf. Anpassungen notwendig bei kleinen VMs
  •  

Hinweis für VMs mit wenig RAM:

/etc/elasticsearch/jvm.options

Anpassen der Java Memory Werte notwendig, da der Dienst sonst nicht startet

2. Update

apt-get update && apt-get -y dist-upgrade
apt-get install apt-transport-https software-properties-common wget telnet net-tools psmisc curl vim nginx

3. Vorbereitung

Um die ELK Komponenten zu installieren, sollte man das Anbieter eigene Repository nutzen. Alternativ kann man dieses auch manuell über die entsprechenden Downloads installieren. Insbesondere die automatischen Updates sprechen aber für den Paketmanager.

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
apt-get update

Da Elasticsearch auf Java zurückgreift, muss dieses natürlich ebenso installiert werden.

apt-get install -y openjdk-8-jdk

Verifizierung der Java Version:

root@petyr:~/.vim/syntax# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-2~deb9u1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

Laut diversen Foreneinträgen kann man auch Oracle Java nutzen, ich persönlich bevorzuge die „freie“ Variante. Ebenso müssen hierbei keine weiteren Repositories ergänzt werden.

 

4. Installation & Konfiguration Elasticsearch

Installation von Elasticsearch mittels Paketmanager:

apt-get install elasticsearch

Nach Abschluss der Installation sollte man den Listener beschränken auf localhost

/etc/elasticsearch/elasticsearch.yml
network.host: localhost

Aktivierung Autostart + Starten des Dienstes:

systemctl restart elasticsearch
systemctl enable elasticsearch

Funktionstest mittels curl Aufruf:

root@petyr:~/.vim/syntax# curl -X GET http://localhost:9200
{
  "name" : "V0PJlmj",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "OtdhYFIdQGiFakmd1c1arw",
  "version" : {
    "number" : "6.6.0",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "a9861f4",
    "build_date" : "2019-01-24T11:27:09.439740Z",
    "build_snapshot" : false,
    "lucene_version" : "7.6.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

5. Installation & Konfiguration Kibana

Installation von Elasticsearch mittels Paketmanager:

apt-get install kibana

Nach Abschluss der Installation sollte man den Listener beschränken auf localhost. Weitere Anpassungen wie bspw. ein Wunschname (server.name Parameter) sind möglich.

/etc/kibana/kibana.yml
server.host: "localhost"

Aktivierung Autostart + Starten des Dienstes:

systemctl restart kibana
systemctl enable kibana

Da wir Kibana auf den localhost beschränkt haben muss ein Webserver (nginx) als reverse Proxy eingerichtet werden. Dieser ermöglicht zum einen eine Authentifizierung einzelner Benutzer als auch mehr Möglichkeiten für die Zukunft (SSO, …). Die Installation erfolgte bereits im Schritt „Vorbereitung“.

 

Nun muss nur noch ein Benutzer erstellt werden:

echo "admin:$(openssl passwd -apr1 %Wunschpasswort%)" | sudo tee -a /etc/nginx/htpasswd.kibana
rm -f /etc/nginx/sites-enabled/default
vim /etc/nginx/sites-available/kibana

Inhalt der kibana-Datei:

server {
    listen 80 default_server;
    server_name _;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 default_server ssl http2;

    server_name _;

    ssl_certificate /etc/ssl/certs/localhost.crt;
    ssl_certificate_key /etc/ssl/private/localhost.key;
    ssl_session_cache shared:SSL:10m;

    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/htpasswd.kibana;

    location / {
        proxy_pass http://localhost:5601;
        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;
    }
}

Damit der Webserver auch korrekt startet muss noch ein passendes Zertifikat erstellt werden:

mkdir /root/localhost_cert
cd /root/localhost_cert
vim localhost.conf

Inhalt Zertifikats-Template (localhost.conf)

[req]
default_bits       = 2048
default_keyfile    = %NAME%.key
distinguished_name = req_distinguished_name
req_extensions     = req_ext
x509_extensions    = v3_ca

[req_distinguished_name]
countryName                 = Country Name (2 letter code)
countryName_default         = %LÄNDER-KÜRZEL%
stateOrProvinceName         = State or Province Name (full name)
stateOrProvinceName_default = %B-LAND%
localityName                = Locality Name (eg, city)
localityName_default        = %ORT%
organizationName            = Organization Name (eg, company)
organizationName_default    = %ORGANISATION%
organizationalUnitName      = organizationalunit
organizationalUnitName_default = %ABTEILUNG%
commonName                  = Common Name (e.g. server FQDN or YOUR name)
commonName_default          = %WEBADRESSE%
commonName_max              = 64

[req_ext]
subjectAltName = @alt_names

[v3_ca]
subjectAltName = @alt_names

[alt_names]
DNS.1   = localhost
DNS.2   = 127.0.0.1

Erstellung des eigentlichen Zertifikats samt Key:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout localhost.key -out localhost.crt -config localhost.conf

Kopieren der Dateien an die richtige Stelle, aktivieren der Konfiguration und starten des Webservers:

cp localhost.crt /etc/ssl/certs/localhost.crt
cp localhost.key /etc/ssl/private/localhost.key
ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/kibana
systemctl enable nginx
systemctl restart nginx

6. Installation & Konfiguration Logstash

Installation von Logstashmittels Paketmanager:

apt-get install logstash

Aktivierung Autostart + Starten des Dienstes:

systemctl restart logstash
systemctl enable logstash

Jetzt kann man mittels eines Browser auf Kibana zugreifen:

 

 

VIM Template 

mkdir ~/.vim/syntax
cd ~/.vim/syntax
wget https://www.vim.org/scripts/download_script.php?src_id=22309 -O logstash.vim.zip
unzip logstash.vim.zip
wget http://www.vim.org/scripts/download_script.php?src_id=19394 -O nginx.vim