Inhaltsverzeichnis
Einleitung
Ich möchte gerne mein Microsoft Advanced Threat Analytics (ATA) ablösen. Dieser Service sollte bisher Angriffsmuster erkennen, indem er die Eventlogs der Domain Controller ausliest und bewertet. Da das Produkt ab Januar 2026 nicht mehr supportet wird, möchte ich es ersetzen. Zudem fehlt mit im ATA die Option, auch die anderen Systeme auszulesen und zu bewerten.
So kam mir die Idee, ein eigenes SIEM-System aufzubauen. Um Kosten zu sparen, setze ich auf die freie Variante von Elastic SIEM. In diesem Beitrag möchte ich zeigen, wie ich Elastic, Kibana und nginx auf einem Ubuntu Server 22.04 installiere. Dafür gibt es im Netz viele Anleitungen, aber bei meinen Versuchen hat keine funktioniert! Also habe ich eine eigene für euch geschrieben.
Vorarbeiten
Ich habe mir eine virtuelle Maschine auf meinem Hyper-V-Server erstellt. Folgende Konfiguration habe ich für den Anfang gewählt:
- Generation 2 mit Secure Boot
- 6x vCPU
- 2GB-8GB dynamischen RAM
- 70GB VHDX
Den Ubuntu-Server habe ich in mein AD aufgenommen und mein Tier-Management darauf eingerichtet. Ich habe den Server als Tier-0 eingestuft, damit er möglichst lange in Angriffsszenarien verschont bleibt.
Folgende Seiten habe ich verwendet, um meine Anleitungsschritte zu finden. Keine von denen hat bei mir funktioniert! Ich musste die Befehle und Aktionen selber zusammenstellen:
- https://www.elastic.co/guide/en/elasticsearch/reference/current/deb.html
- https://www.elastic.co/guide/en/elastic-stack/8.15/install-stack-demo-secure.html
- https://www.nathanhunstad.com/blog/2023/05/how-to-configure-kibana-behind-an-nginx-proxy/
- https://discuss.elastic.co/t/setting-https-for-kibana-with-nginx-and-a-fqdn/205010
- https://medium.com/@mando_elnino/sysmon-for-log-collection-and-analysis-in-elastic-siem-c49568afb869
Installation
Setup von elasticsearch
Ich melde mich an meinem neuen System als T0-Admin an und hole mir sudo-Berechtigungen:
Zuerst installiere ich den PGP-Key von Elastic. Das ist notwendig, damit ich im nächsten Schritt das Repository registrieren kann. Den Response vom wget habe ich vorher natürlich überprüft 😉
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
Das Repository von Elastic muss registriert werden:
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
Das Repository ist nun aktiv:
sudo apt-get update
Nun kann das Paket elasticsearch installiert werden. Dabei wird das superuser-Passwort ausgegeben. Dieses speichere ich mir weg.
sudo apt-get install elasticsearch
Wie im letzten Bild sichtbar muss der Service noch auf automatischen Start konfiguriert werden. Dann kann der Service gestartet werden.
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
systemctl status elasticsearch.service
Ein erster Verbindungsversuch kann mit curl gestartet werden. Da muss das Passwort vom Setup eingetragen werden:
sudo curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:YOURPASSWORD https://localhost:9200
Konfiguration eines Webserver-Zertifikates
Für eine korrekte Absicherung importiere ich ein Webserver-Zertifikat. Dafür erstelle ich ein eigenes Verzeichnis und kopiere den öffentlichen und den privaten Schlüssel mit nano in die beiden Dateien:
sudo mkdir -p /etc/ssl/cert
sudo nano /etc/ssl/cert/siem.crt
sudo nano /etc/ssl/cert/siem.key
Das Zertifikat erzeuge ich auf meinem Adminserver mit meinem CertificateRequestTool:
Jetzt kopiere ich den PublicKey in die Datei /etc/ssl/cert/siem.crt:
Und dann kopiere ich den PrivateKey in die Datei /etc/ssl/cert/siem.key
Setup von kibana
Nun installiere ich noch das Paket kibana:
sudo apt-get install kibana
Kibana wird mit einem Enrollment-Token mit elasticsearch verbunden. Dieser muss erzeugt und registriert werden:
sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
sudo /usr/share/kibana/bin/kibana-setup
Jetzt passe ich die kibana-Konfiguration an. Dafür editiere ich die yml-Datei mit nano:
sudo nano /etc/kibana/kibana.yml
Hier sind mehrere Eingaben erforderlich:
server.port: 5601
server.host: "192.168.100.32"
server.publicBaseUrl: "https://siem.ws.its"
server.name: "siem.ws.its"
server.ssl.enabled: true
server.ssl.certificate: /etc/ssl/cert/siem.crt
server.ssl.key: /etc/ssl/cert/siem.key
Jetzt konfiguriere ich Kibana für den automatischen Start und starte den Service:
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable kibana.service
sudo systemctl start kibana.service
sudo systemctl status kibana
Setup eines nginx Reverse Proxy
Der Webservice läuft nun unter TCP-Port 5601. Eigentlich möchte ich aber die Webseite mit TCP-Port 443 ansprechen. Leider wird Kibana vom Betriebssystem davon abgehalten, diesen Port zu benutzen. Ich habe hier verschiedene Versuche gestartet. Aber alle waren fehlerhaft oder problematisch. Also habe ich beschlossen, einen nginx als ReverseProxy davor zu schalten. Dieser muss zuerst installiert werden:
sudo apt install nginx
sudo systemctl status nginx
Nun fehlt noch das Configfile für den nginx. Das erstelle ich wieder mit nano:
sudo nano /etc/nginx/conf.d/elastic.conf
Folgende Zeilen sind hier notwendig. Der nginx-Webserver darf das gleiche Zertifikat verwenden, das ich auch schon Kibana konfiguriert habe. Der Redirect ist in Zeile 7 zu sehen:
server {
listen siem.ws.its:443 ssl;
server_name siem.ws.its;
ssl_certificate /etc/ssl/cert/siem.crt;
ssl_certificate_key /etc/ssl/cert/siem.key;
location / {
proxy_pass https://192.168.100.32:5601;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Connection "Keep-Alive";
proxy_set_header Proxy-Connection "Keep-Alive";
}
}
Nginx muss einmal durchgestartet werden, damit er die Konfiguration verarbeitet:
sudo systemctl daemon-reload
sudo systemctl restart nginx.service
sudo systemctl status nginx.service
Jetzt kann ich die Webseite von meinem AdminBrowser aus erreichen und mich als Admin mit dem generierten Passwort aus dem ElasticSearch-Setup anmelden 🙂
Nächste Schritte
Nun ist die Ersteinrichtung im Elastic im Browser vorzunehmen. Diese Schritte dokumentiere ich in einem anderen Beitrag.
Alle Befehle habe ich hier auch noch einmal als Textdatei zusammen gestellt: Befehle.zip
Stay tuned!