13 Posts

Vorgänger: HowTo: Install ELK-Stack unter Debian 9

Das folgende HowTo zeigt wie ein Amazon OpenSearch Cluster installiert werden kann mithilfe von Docker Containern bzw. Docker-Compose.

OpenSearch ist ein auf dem ELK-Stack (Elasticsearch Version 7.10.2), der letzten „freien“ Version, aufbauender Ersatz welcher das Sammeln, Auswerten, Anreichern und Darstellen von Logs bzw. Logeinträgen ermöglicht.

 

1. Vorbereitung:

 

2. Update

apt-get update &&apt-get -y dist-upgrade
apt-get installapt-transport-https software-properties-common wget telnet net-tools psmisc curl ca-certificates curl gnupg lsb-release vim 

 

3. Vorbereitung Installation Docker und Docker-Compose

Installation von Docker für die Bereitstellung von Container und die Installation von Docker-Compose. Letzteres ist eine Verwaltung von Docker Container mithilfe von Konfigurations-Dateien (yml files).

Hinzufügen des Docker GPG Schlüssel für die Nutzung des Repository:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Ergänzen des Docker Repository in der lokalen Konfiguration:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Installation von Docker:

apt-get update && apt-get install docker-ce docker-ce-cli containerd.io

Installation von Docker-Compose:

curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Ausführrechte setzen, damit docker-compose ausgeführt werden kann:

chmod +x /usr/local/bin/docker-compose /usr/local/bin/docker-compose

Verlinkung von docker-compose, damit dieses systemweit genutzt werden kann, ohne den absoluten Pfad nutzen zu müssen:

ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

 

4. Installation & Konfiguration OpenSearch und OpenSearch-Dashboards

Der folgende Abschnitt beschreibt wie OpenSearch (Ersatz Elasticsearch) und OpenSearch Dashboards (Kibana Ersatz) installiert wird. Generell kann man OpenSearch per Tar-Archive (Empfohlen für Test- und Entwicklungssysteme) standalone betreiben oder mittels Docker Container. Allgemein sind die Docker Container zu empfehlen, da diese einfach erweiterbar (Skalierbarkeit), leichter zu updaten und komfortabler zu verwalten sind.

Erstellung von Unterordnern für den besseren Überblick

mkdir -p /opt/docker/opensearch/docker-compose && cd /opt/docker/opensearch/docker-compose

Beispiel docker-compose.yml Inhalt, zu finden unter Sample Docker Compose File

version: '3'
services:
  opensearch-node1:
    image: opensearchproject/opensearch:1.1.0
    container_name: opensearch-node1
    environment:
      - cluster.name=opensearch-cluster
      - node.name=opensearch-node1
      - discovery.seed_hosts=opensearch-node1,opensearch-node2
      - cluster.initial_master_nodes=opensearch-node1,opensearch-node2
      - bootstrap.memory_lock=true # along with the memlock settings below, disables swapping
      - "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" # minimum and maximum Java heap size, recommend setting both to 50% of system RAM
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536 # maximum number of open files for the OpenSearch user, set to at least 65536 on modern systems
        hard: 65536
    volumes:
      - opensearch-data1:/usr/share/opensearch/data
    ports:
      - 9200:9200
      - 9600:9600 # required for Performance Analyzer
    networks:
      - opensearch-net
  opensearch-node2:
    image: opensearchproject/opensearch:1.1.0
    container_name: opensearch-node2
    environment:
      - cluster.name=opensearch-cluster
      - node.name=opensearch-node2
      - discovery.seed_hosts=opensearch-node1,opensearch-node2
      - cluster.initial_master_nodes=opensearch-node1,opensearch-node2
      - bootstrap.memory_lock=true
      - "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - opensearch-data2:/usr/share/opensearch/data
    networks:
      - opensearch-net
  opensearch-dashboards:
    image: opensearchproject/opensearch-dashboards:1.1.0
    container_name: opensearch-dashboards
    ports:
      - 5601:5601
    expose:
      - "5601"
    environment:
      OPENSEARCH_HOSTS: '["https://opensearch-node1:9200","https://opensearch-node2:9200"]' # must be a string with no spaces when specified as an environment variable
    networks:
      - opensearch-net

volumes:
  opensearch-data1:
  opensearch-data2:

networks:
  opensearch-net:

 

Bevor der Container gestartet wird müssen noch Limits angehoben werden, da ansonsten Fehlermeldungen wie die folgende angezeigt werden:

opensearch-dashboards | {"type":"log","@timestamp":"2021-10-20T18:21:53Z","tags":["error","opensearch","data"],"pid":1,"message":"[ConnectionError]: getaddrinfo ENOTFOUND opensearch-node1 opensearch-node1:9200"}

Die Lösung: Ergänzen des Parameters „vm.max_map_count=262144“ in der „/etc/sysctl.conf“ und anschließendes neuladen der Parameter per „sysctl -p“.

Der Container kann wie folgt gestartet werden:

docker-compose up -d

Sofern man den Parameter „-d“ weglässt, startet der Container in der aktuellen Sitzung und man erhält alle Debug/Log Informationen

Die letzten Zeiles des Outputs (ohne „-d“ Parameter) sollten in etwa wie folgt aussehen:

opensearch-dashboards    | {"type":"log","@timestamp":"2021-11-11T19:53:57Z","tags":["info","savedobjects-service"],"pid":1,"message":"Starting saved objects migrations"}
opensearch-dashboards    | {"type":"log","@timestamp":"2021-11-11T19:53:57Z","tags":["info","savedobjects-service"],"pid":1,"message":"Creating index .kibana_1."}
opensearch-node1         | [2021-11-11T19:53:57,737][DEPRECATION][o.o.d.c.m.MetadataCreateIndexService] [opensearch-node1] index name [.kibana_1] starts with a dot '.', in the next major version, index names starting with a dot are reserved for hidden indices and system indices
opensearch-node1         | [2021-11-11T19:53:57,760][INFO ][o.o.c.m.MetadataCreateIndexService] [opensearch-node1] [.kibana_1] creating index, cause [api], templates [], shards [1]/[1]
opensearch-dashboards    | {"type":"log","@timestamp":"2021-11-11T19:53:57Z","tags":["info","savedobjects-service"],"pid":1,"message":"Pointing alias .kibana to .kibana_1."}
opensearch-dashboards    | {"type":"log","@timestamp":"2021-11-11T19:53:58Z","tags":["info","savedobjects-service"],"pid":1,"message":"Finished in 312ms."}
opensearch-dashboards    | {"type":"log","@timestamp":"2021-11-11T19:53:58Z","tags":["info","plugins-system"],"pid":1,"message":"Starting [45] plugins: [alertingDashboards,usageCollection,opensearchDashboardsUsageCollection,opensearchDashboardsLegacy,mapsLegacy,share,opensearchUiShared,legacyExport,embeddable,expressions,data,home,console,apmOss,management,indexPatternManagement,advancedSettings,savedObjects,securityDashboards,indexManagementDashboards,anomalyDetectionDashboards,dashboard,notebooksDashboards,visualizations,visTypeVega,visTypeTimeline,timeline,visTypeTable,visTypeMarkdown,tileMap,regionMap,inputControlVis,ganttChartDashboards,visualize,traceAnalyticsDashboards,reportsDashboards,queryWorkbenchDashboards,charts,visTypeVislib,visTypeTimeseries,visTypeTagcloud,visTypeMetric,discover,savedObjectsManagement,bfetch]"}
opensearch-node1         | [2021-11-11T19:53:58,080][INFO ][o.o.c.r.a.AllocationService] [opensearch-node1] Cluster health status changed from [YELLOW] to [GREEN] (reason: [shards started [[.kibana_1][0]]]).
opensearch-node1         | [2021-11-11T19:53:58,589][INFO ][o.o.c.m.MetadataIndexTemplateService] [opensearch-node1] adding template [tenant_template] for index patterns [.kibana_-*_*, .kibana_0*_*, .kibana_1*_*, .kibana_2*_*, .kibana_3*_*, .kibana_4*_*, .kibana_5*_*, .kibana_6*_*, .kibana_7*_*, .kibana_8*_*, .kibana_9*_*]
opensearch-dashboards    | {"type":"log","@timestamp":"2021-11-11T19:53:58Z","tags":["listening","info"],"pid":1,"message":"Server running at http://0:5601"}
opensearch-dashboards    | {"type":"log","@timestamp":"2021-11-11T19:53:59Z","tags":["info","http","server","OpenSearchDashboards"],"pid":1,"message":"http server running at http://0:5601"}

Nun werden drei Container gestartet: OpenSearch-Node1 sowie OpenSearch-Node2 (jeweils „Elasticsearch“) sowie OpenSearch-Dashboard (Kibana). Sinnvoll wäre eine Verteilung der Container auf verschiedene virtuelle Maschinen (VMs) oder direkt auf mehrere Hardware Nodes. Zu beachten ist, dass zusätzlich Port 9300 freigegeben wird.

Nachdem alle Container korrekt gestartet sind, kann man mittels der IP/DNS Adresse und dem Protokoll https per Port 9200 auf das Opensearch Backend zugreifen:

Ebenso muss nun Opensearch-Dashboard erreichbar sein via „http://%ip%:5601“. Einloggen kann man sich mit den Default-Logindaten „admin“ und gleichnamigen Passwort:

5. Installation & Konfiguration Logstash

Erstellung von Unterordnern für den besseren Überblick

mkdir -p /opt/docker/logstash/docker-compose && cd /opt/docker/logstash/docker-compose

Logstah docker-compose.yml:

version: '3'
services:
  logstash-node01:
    image: opensearchproject/logstash-oss-with-opensearch-output-plugin:7.13.2
    container_name: logstash
    volumes:
#      - opensearch-logstash1
      - /opt/logstash/data/config/pipeline:/usr/share/logstash/pipeline
      - /opt/logstash/data/config/patterns:/usr/share/logstash/patterns
    ports:
        - "5044:5044"
        - "514:514"
        - "10514:10514"
    networks:

        - opensearch-net
#volumes:
#  opensearch-logstash1:

networks:
  opensearch-net:

In der Sektion „ports“ müssen alle Ports hinterlegt werden, welche auch für Inputs genutzt werden.

Datei: /opt/logstash/data/config/pipeline/logstash-opensearch.conf

input {
  beats {
    port => 5044
  }
}

output {
  opensearch {
    hosts => ["https://opensearch-node1:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    ssl => true
    ssl_certificate_verification => false
    user => "admin"
    password => "admin"
  }
}

Die Konfigurationen können und sollten bei umfangreicheren Einstellungen in verschiedene „*.conf“ Dateien ausgelagert werden. Ebenso ist ein sinniges Index-Namensschema zu empfehlen, da Elasticsearch per Default auf 1.000 Indices begrenzt ist. In der o.g. Datei sind auch keine Filter hinterlegt.

 

Weitere Hinweise zur Installation von Logstash folgen…

TODOs:

  • Zertifikate selbst generieren
  • Adminzugang für Logstash austauschen
  • Passwort admin für GUI ändern

Vorgänger v2.4: HowTo: OpenVPN Server unter Windows Server 2016 und Client Anbindung

Das folgende HowTo zeigt wie ein OpenVPN Server 2.5 auf einem Windows Server installiert wird samt der Erstellung von Zertifizierungsstelle (CA).

 

1. Vorbereitung:

  • fertig installierter Windows 2012/2016/2019 Server
  • Download Community OpenVPN NSIS Package (https://openvpn.net/community-downloads/)

2. Installation OpenVPN Server:

Die Installation kann durchgeführt werden wie in der Vorgängerversion beschrieben. Wichtig ist, dass die EasyRSA Tools ausgewählt werden zur Installation!

 

3. Schlüsselpaare erstellen

In den folgenden Schritten werden folgende Keys bzw. Zertifikate erstellt:

  1. Einmalig: Certificate Authority (CA)  – build-ca.bat
  2. Einmalig: Diffie-Hellman Key – build-dh.bat
  3. Einmalig: Server Certificate – build-key-server.bat
  4. Pro Client ein Client Certificate – build-key.bat

Hinweis: Seit der Version 2.5 werden neue Tools ausgeliefert und die Erstellung der Zertifikate hat sich verändert!

Hierbei sollte man in den Easy-RSA Pfad wechseln in welchen OpenVPN installiert wurde ( C:\Program Files\OpenVPN\easy-rsa ). In diesem Ordner wird die vorhandene Datei vars.bat.example dupliziert oder nur umbenannt in „vars.com.example.vpn“ und folgende Zeilen werden verändert bzw. hinzugefügt.

set_var EASYRSA_PKI		"$PWD/pki.de.name.vpn"
set_var EASYRSA_TEMP_DIR	"C:/tmp_easyrsa"

set_var EASYRSA_REQ_COUNTRY	"DE"
set_var EASYRSA_REQ_PROVINCE	"RLP"
set_var EASYRSA_REQ_CITY	"Koblenz"
set_var EASYRSA_REQ_ORG	"NAME"
set_var EASYRSA_REQ_EMAIL	"info@name.de"
set_var EASYRSA_REQ_OU		"EDV"

set_var EASYRSA_KEY_SIZE	2048
set_var EASYRSA_CA_EXPIRE	3650
set_var EASYRSA_CERT_EXPIRE	1825

Die Gültigkeit der CA beträgt etwas über 2 Jahre was auch grundsätzlich gut und sicherer ist. Im oberen Beispiel wurde die Gültigkeit auf 10 Jahre gesetzt, da dies vom Kunden so gewünscht ist.

Der Pfad EASYRSA_TEMP_DIR sollte unbedingt gesetzt werden da man ansonsten eine Fehlermeldung „Extra arguments given.“ erhält.

Näheres siehe hier.

 

Die EasyRSA Umgebung wird in einer CMS Sitzung (als Administrator starten) mittels „EsyRSA-Start.bat“ aufgerufen

Nun folgt die Erstellung der Zertifizierungsstelle (CA), Erstellung des Server-/Client Zertifikatrequests als auch die anschließende Erstellung der Zertifikate anhand der Requests. Da die Details bereits im Vorgänger Beitrag erklärt wurden folgen lediglich die Befehle ohne nähere Erklärung.

> ./easyrsa --vars=./vars.com.example.vpn init-pki # Initialisierung PKI
> ./easyrsa --vars=./vars.com.example.vpn build-ca # Erstellung Zertifizierungsstelle
> ./easyrsa --vars=./vars.com.example.vpn gen-req server nopass # Generierung Server Request
> ./easyrsa --vars=./vars.com.example.vpn gen-req client1 # Generierung Client Request, pro Client einmal wiederholen
>./easyrsa --vars=./vars.com.example.vpn gen-dh # Diffie-Hellmann generieren
> ./easyrsa --vars=./vars.com.example.vpn sign-req server server # Erstellung Server Zertifikat
> ./easyrsa --vars=./vars.com.example.vpn sign-req client client1 # Erstellung Client Zertifikat

4. Konfiguration OpenVPN Server:

Für den Server werden nun unter „C:\Program Files\OpenVPN“ noch weitere Ordner erstellt:

  • ca.crt
  • dh.pem
  • private/server.key
  • issued/server.crt

Mittels einer administrativen Powershell kann ein bzw. mehrere Netzwerkadapter erstellt werden. Erstmals wurde mit OpenVPN 2.5 das „tapctl“ Tool vorgestellt.

Mittels „.\tapctl.exe create“ wurde ein Netzwerkadapter erstellt. Näheres ist in der Dokumentation zu finden

Der Adapter (LAN-Verbindung X“ kann in der Systemsteuerung umbenannt werden:

 

 

OpenVPN Server Konfig „C:\Program Files\OpenVPN\config-auto\vpn_server_client.ovpn“

##########################
# VPN Server for clients
##########################

# Lokale IP auf welche der Socket/Port gebunden wird
local 1.2.3.4

#Listener des OpenVPN Servers
port 1194

#Protokoll des Servers
proto udp
dev tun
# Zuweisung auf separaten Adapter
dev-node "tap-vpn-server"

##########################
# Zertifikate
##########################

dh "C:\\Program Files\\OpenVPN\\keys\\dh2048.pem"
ca "C:\\Program Files\\OpenVPN\\keys\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\keys\\vpn_name.crt"
key "C:\\Program Files\\OpenVPN\\keys\\vpn_name.key"

##########################
# Server-Setup
##########################

# DHCP Subnetz
server 10.0.100.0 255.255.255.0
ifconfig-pool-persist "C:\\Program Files\\OpenVPN\\ipp.txt"

#Ermöglichen von Anfragen von einem Client zum anderen, bei Bedarf die Zeile entfernen
client-to-client

##########################
# Client-Settings (inkl Special Dir)Files
##########################

client-config-dir "C:\\Program Files\\OpenVPN\\ccd"
push "route 192.168.1.0 255.255.255.0"
#push "dhcp-option DNS 192.168.1.10"

##########################
# Defaults
##########################

keepalive 10 120
persist-key
persist-tun

##########################
# Logging
##########################

status "C:\\Program Files\\OpenVPN\\log\\vpn_server_client_status.log"
log "C:\\Program Files\\OpenVPN\\log\\vpn_server_client.log"
log-append "C:\\Program Files\\OpenVPN\\log\\vpn_server_client.log"
verb 3

Hinweis: Die Pfadangaben müssen entweder per „\\“ erfolgen oder mit einem normalen „/“.

Der OpenVPN Server kann mittels „C:\Program Files\OpenVPN\bin\openvpn-gui.exe“ starten, gerade während der Einrichtung sollte man diese Option nutzen. So startet man die GUI und sieht die Fehlermeldungen direkt. Alle Konfigurationen unter „C:\Program Files\OpenVPN\config-auto“ werden vom Dienst „OpenVPNServiceInteractive“ automatisch geladen. Der normale „config“ Ordner ist für Client-Konfigurationen gedacht.

Später kann man den OpenVPNService nutzen. Dieser ist per Default vorhanden aber auf „Manuell“ gestellt, damit der Dienst automatisch verfügbar ist habe ich die Einstellung auf „Automatisch“ angepasst.

Die Clienteinrichtung kann ab Punkt 5. hier eingesehen werden.

Vorwort:

Anknüpfen an das alte manuelle HowTo für Kopano  unter Debian 9 gibt es nun eine Update in Form von Debian 10 und einer Installation mittels Paketmanager.

Voraussetzungen:

Installiertes und lauffähiges Debian 10

Es ist nicht notwendig weitere externe Repositories zu ergänzen, da Kopano bereits im Debian Repo mit enthalten ist. Dank der Pakete kommen die meisten (nicht alle) Abhängigkeiten automatisch mit und man muss nicht mehr manuell auf eine gewisse Reihenfolge achten.

Die Installation:

Sicherheitshalber Updates installieren, sofern vorhanden

root@mail:~# apt-get update & apt-get dist-upgrade -V

Installation Kopano Pakete als Basis. Alle notwendigen Abhängigkeiten werden installiert. Man kann auch statt dem Nginx alternativ Apache oder Lighthttpd verwenden.

root@mail2:~# apt-get install kopano-core kopano-webapp-nginx

Während der Installation muss man ein Kennwort für den MySQL Server angeben sowie bestätigen:

Im nächsten Schritt wird ein erster Admin-User erstellt. Dank CLI Tools sehr einfach:

root@mail2:~# kopano-admin -c thuerter -p %passwort% -e tim@mail2.huerter.me -f "Tim Huerter" -a1
User created.

Update: Bei einem zweiten Test zwischenzeitlich muss man eine neue SSH Sitzung eröffnen bzw. die Umgebung neuladen, da der Befehl „kopano-admin“ ansonsten mit „command not found“ fehlschlägt.

 

Die Webseite kann nun per https:%servername% aufgerufen werden. Jedoch wird es einen Fehler beim Login geben in Form von „Unknown MAPI Error: MAPI_E_NOT_FOUND“

 

Der genannte Fehler resultiert aus einem fehlenden Datenstore für den User.

Prüfen ob ein User einen Store hat:

root@mail2:~# kopano-cli --list-orphans
Stores without users:
Store guid                       Username             Last login       Store size       Store type
--------------------------------------------------------------------------------------------------------
Users without stores (1):
User             Full Name            Homeserver
----------------------------------------------------------
thuerter        Tim Huerter           Unknown

Erstellen eines globalen Stores:

root@mail2:~# kopano-cli --create-store

Erstellen eines User-Stores:

root@mail2:~# kopano-cli --create-store -u thuerter

Erneute Store-Prüfung:

root@mail2:~# kopano-cli --list-orphans
Stores without users:
Store guid                       Username             Last login       Store size       Store type
--------------------------------------------------------------------------------------------------------
Users without stores (0):
User             Full Name            Homeserver
----------------------------------------------------------

 

Update: Die „default“ nginx Konfiguration sollte deaktiviert werden per „rm -f /etc/nginx/sites-enabled/default“, der Nginx sollte per „systemctl restart nginx“ neugestartet werden.

Nun kann man sich unter https://server-name und dem zuvor erstellten User einloggen.

Hinweis: Eine automatisch Weiterleitung von http auf https existiert nicht!

Nun ist Kopano grundinstalliert jedoch nicht nicht nutzbaz, da man weder Mails versenden noch empfangen kann. Hierfür wird ein MTA benötigt.

Installation MTA (Mailserver) in Form von Postfix inklusive MySQL Anbindung

root@mail2:~# apt-get install postfix postfix-mysql

Meine /etc/postfix/main.cf habe ich um folgende Parameter erweitert:

#Kopano Custom
virtual_alias_maps = hash:/etc/postfix/virtual # Aliase/Weiterleitungen für Postfächer
virtual_mailbox_maps = mysql:/etc/postfix/mysql-users.cf # Auslesen vorhandener Postfächer
virtual_transport = lmtp:127.0.0.1:2003 # Weiterleiten der Mail an Dagent für die Zustellung an das Postfach
virtual_mailbox_domains = mail2.huerter.me # Berechtigte Empfangs-Domains

smtpd_recipient_restrictions = permit_mynetworks,
reject_non_fqdn_recipient,
reject_non_fqdn_hostname,
reject_invalid_hostname,
reject_non_fqdn_recipient,
reject_non_fqdn_sender,
reject_unauth_pipelining,
reject_unverified_recipient

 

Inhalt „/etc/postfix/virtual“ für Weiterleitungen:

#ALIAS  E-MAIL
kontakt@mail2.huerter.me      tim@mail2.huerter.me

Damit Postfix sich auch verbinden zum Auslesenn der Benutzer, erstellen wir noch die passende MySQL-Berechtigung:

root@mail2:/etc/postfix# mysql -u root

Der Login ohne Passwort ist möglich, da die UNIX Socket Authentisierung genutzt wird.

MariaDB [(none)]> GRANT ALL PRIVILEGES ON kopanoserver.* TO 'kopano'@'localhost' IDENTIFIED BY '%mein-passwort%' WITH GRANT OPTION;
MariaDB [(none)]> flush privileges;

Inhalt „/etc/postfix/mysql-users.cf“ für die Prüfung, ob der Empfänger überhaupt existiert:

user = kopano
password = %mein-passwort%
hosts = 127.0.0.1
dbname = kopanoserver
query = SELECT value FROM objectproperty where propname = 'emailaddress' and value = '%s';

 

 

Umwandeln der Map Dateien in ein lesbares Format für Postfix sowie Neustart des Dienstes

root@mail2:/etc/postfix# chmod 600 /etc/postfix/mysql-users.cf
root@mail2:/etc/postfix# postmap /etc/postfix/mysql-users.cf
root@mail2:/etc/postfix# postmap /etc/postfix/virtual

Optional können noch WebApps installiert werden

root@mail:~# apt-get install kopano-webapp-contactfax kopano-webapp-gmaps kopano-webapp-pimfolder kopano-webapp-quickitems kopano-webapp-titlecounter kopano-webapp-webappmanual kopano-webapp-zdeveloper kopano-webapp-files

 

Update/Zwischenstand: Z-Push und andere Anpassungen fehlen wohl in den bereitgestellten Paketen für nginx statt apache2… Mittels apache2 fehlt lediglich die Anbindung per IMAP/POP3 welche einige Schwierigkeiten bereithält…

 

 

 

Einleitung

Ursprünglich war geplant eine einmalig gekaufte Office 2013 Business Version unter einem Windows Terminalserver mit mehreren Usern zu betreiben. Die Installation von Office als auch die Aktivierung verlief ohne Probleme. Beim ersten Start von einem Office Programm (Word, Excel, Outlook, …)

Diese Kopie von Microsoft Office 2013 kann auf einem Computer mit Terminal Services verwendet werden. Um Office 2013 auf einem Terminaldienste-Computer verwenden, müssen Sie eine Volume License Edition von Office verwenden.

oder

This copy of Microsoft Office 2013 cannot be used on a computer running Terminal Services. To use Office 2013 on a computer running Terminal Services, you must use a Volume License edition of Office.

Nun kann man entweder eine Volumenlizenz erwerben oder aber man nutzt Office 365. Laut einem ISP welcher ebenfalls Office 365 Abos vermittelt habe ich die Aussage erhalten es würde mit einer „Office 365 Business“ Lizenz funktionieren. Aufgrund anderer Blogs stößt man öfter auf „Office 365 ProPlus“ als Abo.

 

Hierbei handelt es sich um ein reines Office Abo ohne Exchange Funktionalität. Kostentechnisch bietet es sich an, dieses Abo mit einem „Office 365 Business Essentials“ Abo zu kombinieren, da die Kosten hier etwas geringer sind als bei einem Office 365 E3 Plan. Der E3 Plan hat aus meiner Sicht einzig den Vorteil, dass er 100GB Postfachgröße statt 50GB beinhaltet.

Ob die folgenden Schritte technisch auch mit einer Office 365 Business Lizenz machbar sind ist möglich. Ich wurde jedoch explizit von einem direkten Microsoft Cloud Partner darauf hingewiesen, dass dies ein Lizenzverstoß wäre.

Zusammenfassung als Ausgangsbasis:

Office 365 Business Essentials Abo + Office 365 ProPlus Abo pro User besitzen

Windows Server 2016 mit Terminalserver Rollen

 

Lösung:

Eine reguläre Installation von Office ist nicht direkt notwendig. Hierzu nutzt man das Office Bereitstellungstools mit einigen Anpassungen

  1. Herstellen einer (RDP) Verbindung mit einem Administrator User
  2. Download Bereitstellungstool
  3. Erstellen einer eigenen „myconfiguration.xml“
  4. Öffnen einer CMD mit administrativen Rechten
    1. Download von Office per „setup.exe /download myconfiguration.xml“
    2. Installation von Office per „setup.exe /configure myconfiguration.xml“
  5. Office Anwendung bspw. Word starten und mit dem berechtigten (lizenzierten!) Office 365 Benutzer einloggen

 

Hinweis zu Schritt 4.1:

Den Fortschritt kann man nicht konkret prüfen jedoch wird im selben Ordner in welchem sich die „setup.exe“ befindet ein neuer Ordner namens „Office“ erstellt. Nach dem Download war dieser Ordner circa 2GB groß.

 

Hinweis zu Schritt 3:

Empfehlen würde ich als Editor Notepad++ um ein versehentliches formatieren zu verhindern.
Meine Konfiguration sieht wie folgt aus:

 

Die Konfiguration kann man sich entweder per Dokumentation von Microsoft selbst mühevoll zusammenbauen oder man nutzt einen Config Generator welcher von Microsoft bereitgestellt wird. Besonders wichtig ist die Zeile „SharedComputerLicensing“ welche den Wert „1“ beinhaltet. Ansonsten wird Office nicht starten und die in der Einleitung genannte Fehlermeldung liefern.

 

Hinweis zu Windows Server 2019:

Laut MS Cloud Partner ist das oben beschriebene Vorgehen nicht möglich bei Windows 2019 Servern. Entweder bleibt hier der Erwerb von Volumen-Lizenzen oder einew Migration in die Azure Umgebung. Letzteres dürfte verhältnismäßig teuer werden.

 

 

Da öfter mal Zertifikate in den Arten umgewandelt werden müssen, kommt es öfter mal vor, dass Zertifikate von PFX (Windows) in cert/key Dateien umgewandelt werden müssen.

Export Zertifikate (cer) aus pfx:

openssl pkcs12 -in cert.pfx -clcerts -nokeys -out cert.crt

Export Key aus pfx:

openssl pkcs12 -in cert.pfx -nocerts -out cert_crypted.key

openssl rsa -in cert_crypted.key -out cert.key

Der erste Befehl exportiert den Schlüssel passwortgeschützt (passphrase), der zweite entfernt das Kennwort. Gerade in Verbindung mit einem webserver (Apache/Nginx) sollte das Kennwort entfernt werden.

Umwandlung cert/key zu pfx [HowTo: cert to pfx]

 

 

 

Vorwort:

Mir selbst ist schon öfters die teils sehr schlechte Qualität einer RDP Sitzung aufgefallen. Ein Bekannter hatte mich gebeten, einmal zu prüfen ob man nicht was „Tuning“ betreiben kann. Hierzu muss man wissen, dass RDP selbst standardmäßig immer TCP Port 3389 nutzt. TCP ist aufgrund seiner Struktur verglichen mit UDP langsam.

 

Im Weg durch das „Neuland“ habe ich verschiedene Ansätze gefunden und zwei konkrete habe ich erfolgreich getestet

  1. Einrichtung RDS Gateway Server welcher die Datenübermittlung per UDP erledigt
  2. Anpassung der FPS für die RDP Sitzung (auch für Windows Clients interessant)

Beide Varianten sind so gesehen Windows Boardmittel und benötigen keine Programme von Drittanbietern. Gerade von letzteren dürften diverse Tools vorhanden sein, bspw. für Citrix Sitzungen.

 

Installation & Einrichtung RDS Gateway Server

Info: Um den RDS Gateway Server nutzen zu können, sollte man nach Möglichkeit ein öffentliches Zertifikat besitzen.

Das folgende Tutorial zeigt Schritt für Schritt die Installation und Konfiguration.

 

Öffnen des Server Managers

Allgemeine Info Seite, „Weiter“

Und nochmal „Weiter“

Auswahl des Zielservers, bei einem System nun nicht so schwer…

 

 

Auswahl der „Remotedesktopdienste“ Rolle:

Bestätigung der Installation von benötigten Abhängigkeiten in Form von „Features“.

 

Nach erfolgter Installation können wir nun mit der Konfiguration beginnen:

Erstellen einer neuen Richtlinie innerhalb der „Verbindungsautorisierungsrichtlinien“.

Erstellen einer RD CAP / RD RAP Richlinie.

 

Festlegen eines Namens für die CAP Richtlinie:

Auswahl von Autorisierung-Art und Auswahl der erlaubten Gruppen/Computer

 

Auswahl und Import des Zertifikats.

Sofern die Zertifikate als c(e)rt. vorliegen, so muss man diese in eine PFX Datei umwandeln Konvertieren von crt zu pfx

Alternativ kann man auch mit Windows Tools ein selbst signiertes Zertifikat erstellen.

 

Damit der zusätzliche Gateway Dienst genutzt wird, müssen noch die Firewall Regeln aktiviert werden. Erstellt wurden diese bereits:

Abschließend für diesen Punkt kann man die Einstellungen Testen, in dem man eine neue RDP Verbindung öffnet.

Über die Verbindungseigenschaften sollte nun innerhalb des Popups der Zusatz „and UDP is enabled“ erkennbar sein.

Beobachtung: Bei meiner Windows 10 VM (Client!) ist UDP wohl schon von Haus aus aktiviert…

 

 

Anpassung FPS

Hinweis: Ich würde in jedem Falle vorher ein Backup der Registry Einstellungen durchführen per Rechtsklick und „Export“:

 

Quelle: https://support.microsoft.com/de-de/help/2885213/frame-rate-is-limited-to-30-fps-in-windows-8-and-windows-server-2012-r

Mittels „regedit“ bzw. Registry kann man unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations den Schlüssel „DWMFRAMEINTERVAL“ mit dem Dezimal-Wert „15“ erstellen. nach einem Reboot greift die Änderung.

 

 

Fazit: Die Verbindungsqualität ist erheblich besser. Bei einem Musikvideo mit 720p von Youtube kann man es relativ ruckelfrei sehen. Dies spiegelt sich aber auch in der genutzten Bandbreite wieder, die Auslastung ist hier zwischen 3-10 MB/s.

 

Bei größeren Umgebung mit vielen Nutzern dürfte die Bandbreite zum Problem werden … für die Admin-VM aber sicherlich von Vorteil 😉

 

Meine Teststellung wird jedoch zusätzlich durch ein (Open)VPN geleitet und der Zielcomputer steht im Internet. Ein Test im LAN steht noch aus…

Zertifikate waren noch nie unwichtig und auch durch diverse Änderungen (DSGVO, …) nimmt das Verschlüsseln immer mehr zu. Diverse (REST-) APIs, Publishings, Netscaler usw. funktionieren ohne SSL nicht.

Kurzer Überblick der Filetypen:

  • .csr => Certifcate Request, dieser muss an den Provider welcher das SSL Zertifikat ausstellt übermittelt werden
  • .key => Ist der private Schlüssel und wird zur Verschlüsselung der Daten genutzt. Dieser sollte gut gesichert aufbewahrt und nicht mit Dritten geteilt werden
  • .crt => Enthält das reine Zertifikat
  • .pem => Enthält den privaten Schlüssel (.key) als auch das eigentliche Zertifikat (.crt)
  • .pfx => Ist ein spezielles Format für Windows Serrver. Diese Datei enthält alle Dateitypen (Zertifikate, ggf. Zwischenzertifikat, privater Schlüssel).

Da Windows Server auch im Jahr 2019 noch keine gängigen Typen importieren können, muss man die Datein zusammenfügen in einer PFX Datei.

 

Zur Umwandlung habe ich eine Debian Maschine als Hilfe genutzt:

Das „Export Password“ dient als Absicherung der neuen Datei, damit diese nicht unberechtigt genutzt werden kann.

Nun kann das PFX File normal auf dem Windows Server importiert werden.

Hinweis: Je nach openssl Version passiert es, dass die Umwandlung ohne Fehler festhängt. Hierbei könnte es helfen „-passout pass:%mein_pw%“ dem Befehl anzuhängen.

Im folgenden Artikel beschreibe ich die Peer-to-Peer (P2P) Anbindung zwischen einer PfSense als OpenVPN Server und einem Windows 2016 Server OpenVPN Client mittels eines Shares Secrets.

 

Als Vorbreitung sollte OpenVPN installiert werden. Man kann aus dem anderen HowTo OpenVPN installieren – [HOWTO OpenVPN] . Hierbei reicht die Durchführung der Schritte 1 bis 2.

 

Nachdem Login in der PfSense wird unter dem Punkt „VPN“ der Unterpunkt „OpenVPN“ ausgewählt. Anschließend wird ein neues Server Profil erstellt:

Für das neue Profil müssen diverse Einstellungen definiert werden.

 

Die Verschlüsselung kann frei gewählt werden, muss aber auf Client und Serverseite gleich sein. Ebenso muss der „Local port“ mit dem Zielport aus der Clientconfig übereinstimmen.

Das „Ipv4 Tunnel Network“ ist lediglich ein virtuelles Transfernetzwerk. Dieses darf sich nicht mit anderen vorhandenen Netzen schneiden.

Weiterhin wichtig ist das Setzen der IPv4 Remote networks, da ansonsten die Rück-Routen fehlen und keine Kommunikation stattfinden kann.

Das Shared Secret wird nach dem Speichern automatisch erstellt, wenn man anschließend wieder in die Konfiguration wechselt von dem neu erstellten OpenVPN Profil, so muss das Shared Secret auf dem Client ebenso in einer Datei (C:\Program Files\OpenVPN\pre_shared_key\site1.key) hinterlegt werden.

Client Config:

##########################
# VPN %Ziel%
##########################

dev tun

#Optional sofern separater Adapter genutzt wird
#dev-node "tap-vpn-name"

script-security 3
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
proto udp4
cipher AES-256-CBC
auth SHA256

#Lokale IP des Clients
local %local-ip%
lport 0

# Remote IP oder DynDNS Name
remote %remote-ip% 1199

# virtuelle-Ip Client gefolgt von IP des Gateways/OpenVPN Servers (virtuelle IP)
ifconfig 10.0.4.2 10.0.4.1

# Rück-Route, kann mehrfach gesetzt werden
route 192.168.178.0 255.255.255.0
secret "C:\\Program Files\\OpenVPN\\pre_shared_key\\site1.key"
comp-lzo adaptive
resolv-retry infinite

##########################
# Logging
##########################

status "C:\\Programme\\OpenVPN\\log\\site1.log"
log "C:\\Programme\\OpenVPN\\log\\site1.log"
log-append "C:\\Programme\\OpenVPN\\log\\site1.log"
verb 3

Bei dem Verbindungsaufbau sollte dann anschließend folgendes erkennbar sein in der PfSense unter „Status“ > „OpenVPN“

Die Verbindung sollte „up“ sein und Traffic muss erkennbar sein.

 

Hinweis: In jedem Falle prüfen, dass die entsprechenden Ports (VPN Port + diverse Ports welche man freigeben möchte, bspw. RDP 3389/TCP, …) auf beiden Seiten in den Firewall freigegeben sind.

Update: OpenVPN 2.5 HowTo

Für einen Kunden war die Anforderung ein (Windows) System mittels eines VPNs abzusichern, das Ganze möglichst einfach und dennoch ohne Sicherheitsverlust.

Daher habe ich mich für den Einsatz von OpenVPN entschieden, da dieses OpenSource ist und eine große Bekanntheit hat.

 

1. Vorbereitung:

  • fertig installierter Windows 2016 Server
  • Download Community OpenVPN NSIS Package (https://openvpn.net/community-downloads/)

2. Installation OpenVPN Server:

Nachdem wir in der Vorbereitung die EXE Datei heruntergeladen haben, können wir diese installieren:

Übliche Willkommensmaske:

Bestätigen der Nutzungsbedingungen:

Auswahl der zu installierenden Komponenten. Hier sollte man noch den Punkt „EasyRSA 2“ auswählen.

Im nächsten Schritt wird der Installationordner ausgewählt:

Während der Installation muss man noch explizit die Installation eines virtuellen Netzwerkadapters freigeben.

Hinweis: Ohne entsprechende Berechtigung kann der Installer den Adapter nicht korrekt erstellen und eine VPN Verbindung ist nicht möglich!

Abschluss der Installation:

Nun haben wir OpenVPN installiert jedoch existieren noch keine Custom Keys oder Einstellungen welche die VPN Verbindung erst ausmachen.

 

3. Schlüsselpaare erstellen

In den folgenden Schritten werden folgende Keys bzw. Zertifikate erstellt:

  1. Einmalig: Certificate Authority (CA)  – build-ca.bat
  2. Einmalig: Diffie-Hellman Key – build-dh.bat
  3. Einmalig: Server Certificate – build-key-server.bat
  4. Pro Client ein Client Certificate – build-key.bat

Hinweis: Die Zertifikate bzw. Keys sind per Default 10 Jahre gültig. In dieser Zeit ist spätestens das Betriebssystem EOL, aus diesem Grunde vollkommen ausreichend.

Hierbei sollte man in den Easy-RSA Pfad wechseln in welchen OpenVPN installiert wurde ( C:\Program Files\OpenVPN\easy-rsa ). In diesem Ordner wird die vorhandene Datei vars.bat.example dupliziert oder nur umbenannt in „vars.bat“ und folgende Zeilen werden verändert bzw. hinzugefügt.

set KEY_COUNTRY=DE
set KEY_PROVINCE=RLP
set KEY_CITY=KOBLENZ
set KEY_ORG=MeineFirma AG
set KEY_EMAIL=kontakt@firma.tld
set KEY_CN=vpn.firma.tld
set KEY_NAME="Firmenname OpenVPN Key"
set KEY_OU="Abteilung"
set PKCS11_MODULE_PATH=platzhalter
set PKCS11_PIN=123456
set KEY_SIZE=2048

Die Werte sollten gesetzt werden, da es sonst zu Hinweis- als auch Fehlermeldungen kommen kann.

Ich habe bei der Schlüssellänge 2048 gewählt, da hier Sicherheit und Performance in einem guten Verhältnis stehen. Sofern man eine potente Hardware hat oder nur eine Verbindung aufbaut, kann man sich für 4096 entscheiden. Desto größer die Schlüssellänge desto länger dauert auch das Erstellen der jeweiligen Dateien!

Im Anschluss wird die „Arbeitsumgebung“ geladen:

Hinweis: Die Umgebung muss bei jeder neuen CMD Sitzung neu ausgeführt werden, da die Variablen sonst nicht gesetzt sind!

Um sicher zu gehen, dass alles sauber erstellt wird, lasse ich noch den Clean Job laufe. Dieser Schritt sollte bei einer Neuerstellung von einem Keypair oder bei einem Fehler in jedem Falle wiederholt werden!

Hinweis: Hierbei werden alle zuvor erstellten Keypairs gelöscht!

Erstellung Certificate Authority:

Erstellung Diffie-Hellman Key

Erstellung Server Certificate

In diesem Schritt muss man insbesondere das Signieren als auch das Erstellen des Zertifikates mit „y“ bestätigen:

Erstellung Client Certificate

Bei der Generierung des Client Certificates sollte man pro Client einen eigenen Namen wählen. Sollte man ein Zertifikat für mehrere Clients verwenden wollen, in den Default Settings würden sich die Clients immer gegenseitig aus der Sitzung werfen! Besser ist ein Zertifikat pro Client oder wenn es sein muss, wird der Parameter „duplicate-cn“ in der OpenVPN Konfig hinterlegt.

 

Überblick der Zertifikate:

Für den Client werden die folgenden Zertifikate benötigt:

  • ca.crt
  • client_%name%.crt
  • client_%name%.key

Die Server Files werden im folgenden Schritt beschrieben.

Alle anderen Dateien sollten unter keinen Umständen weitergegeben werden, da ansonsten die Sicherheit erheblich gefährdet ist.

4. Konfiguration OpenVPN Server:

Für den Server werden nun unter „C:\Program Files\OpenVPN“ noch weitere Ordner erstellt:

  • ccd
  • keys

Bei mir sieht es anschließend wie folgt aus:

Der Ordner „pre_shared_key“ ist zu ignorieren, dieser ist für ein Peer-to-Peer VPN (HowTo – LINK) erstellt worden.

Nun kopieren wir die zuvor erstellten Key und Zertifikate in den Ordner „keys“:

 

Optional:

Auf dem Kundensystem sollen zwei OpenVPN Instanzen laufen. Eine als Peer-to-Peer zu einem anderen OpenVPN Server und eine weitere als reiner OpenVPN Server für „normale“ Clients wie Windows 10, Android, iOS, …. Hierfür habe ich einen weiteren Tap Adapter erstellt, man kann nur eine Instanz pro Adapter betreiben.

Starten einer CMD mit Administratoren Berechtigung und anschließendes erstellen eines weiteren Adapters per OpenVPN „addtap.bat“.

Danach sollte der neue Adapter verfügbar sein und im Netzwerk Center bzw. per CMD sichtbar sein. Ich habe den Adapter umbenannt per „Umbennen“ in „tap-vpn-server“:

Man kann die Adapter auch per OpenVPN  Binary prüfen und schauen, ob diese verfügbar sind:

 

OpenVPN Server Konfig „C:\Program Files\OpenVPN\config\vpn_server_client.ovpn“

##########################
# VPN Server for clients
##########################

# Lokale IP auf welche der Socket/Port gebunden wird
local 1.2.3.4

#Listener des OpenVPN Servers
port 1194

#Protokoll des Servers
proto udp
dev tun
# Zuweisung auf separaten Adapter
dev-node "tap-vpn-server"

##########################
# Zertifikate
##########################

dh "C:\\Program Files\\OpenVPN\\keys\\dh2048.pem"
ca "C:\\Program Files\\OpenVPN\\keys\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\keys\\vpn_name.crt"
key "C:\\Program Files\\OpenVPN\\keys\\vpn_name.key"

##########################
# Server-Setup
##########################

# DHCP Subnetz
server 10.0.100.0 255.255.255.0
ifconfig-pool-persist "C:\\Program Files\\OpenVPN\\ipp.txt"

#Ermöglichen von Anfragen von einem Client zum anderen, bei Bedarf die Zeile entfernen
client-to-client

##########################
# Client-Settings (inkl Special Dir)Files
##########################

client-config-dir "C:\\Program Files\\OpenVPN\\ccd"
push "route 192.168.1.0 255.255.255.0"
#push "dhcp-option DNS 192.168.1.10"

##########################
# Defaults
##########################

keepalive 10 120
comp-lzo
persist-key
persist-tun

##########################
# Logging
##########################

status "C:\\Program Files\\OpenVPN\\log\\vpn_server_client_status.log"
log "C:\\Program Files\\OpenVPN\\log\\vpn_server_client.log"
log-append "C:\\Program Files\\OpenVPN\\log\\vpn_server_client.log"
verb 3

Der OpenVPN Server kann mittels „C:\Program Files\OpenVPN\bin\openvpn-gui.exe“ starten, gerade während der Einrichtung sollte man diese Option nutzen. So startet man die GUI und sieht die Fehlermeldungen direkt.

Später kann man den OpenVPNService nutzen. Dieser ist per Default vorhanden aber auf „Manuell“ gestellt, damit der Dienst automatisch verfügbar ist habe ich die Einstellung auf „Automatisch“ angepasst.

 

Tipp zum Prüfen ob der Socket existiert:

netstat -a | findstr 1194

So sollte die Ausgabe sein:

Ebenso sollte der Windows Firewall noch ein Eintrag bei den eingehenden Regel ergänzt werden für den gewählten Port (UDP/1194).

5. Installation Client

Für die Client-Installation unter Windows 10 kann man Schritt 2. unter Windows 10 wiederholen (die EasyRSA Tools müssen hier nicht mitinstalliert werden)

C:\Program Files\OpenVPN\config\vpn_client1.ovpn:

##########################
# VPN Client config
##########################

client
dev tun

proto udp
remote vpn.server.tld 1194
resolv-retry infinite
nobind
persist-key
persist-tun

ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\client_1.crt"
key "C:\\Program Files\\OpenVPN\\config\\client_1.key"
ns-cert-type server

comp-lzo
verb 3

 

So sollte es bei dem Verbindungsaufbau aussehen:

Hinweis: OpenVPN muss als Administrator oder mit einem User der die entsprechenden Berechtigungen (eines Netzwerkoperatoren) hat ausgeführt werden. Ansonsten schlägt der Verbindungsaufbau fehl.

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