*** Wartungsfenster jeden ersten Mittwoch vormittag im Monat ***

Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.

DDOG: IP-Blocking-Skript mit Elasticsearch und Firewall

Überblick

DDOG = DDOs Guardian

Dieses Skript erkennt automatisch abnormale IP-Adressen basierend auf Metricbeat-Daten aus Elasticsearch und blockiert sie mithilfe der Firewall des Systems (über iptables). Es hilft dabei, potenzielle Angriffe oder schädliches Verhalten zu verhindern, indem Metricbeat-Protokolle auf ungewöhnliches Verhalten überwacht werden.

Hauptfunktionen

  • Abfragen von Elasticsearch nach IPs mit ungewöhnlicher Aktivität.
  • Blockieren erkannter IPs mit iptables.
  • Konfigurierbare Parameter für Schwellenwerte, Elasticsearch-Anmeldedaten und Space-Namen.

Voraussetzungen

  • Python 3
  • Elasticsearch mit Metricbeat-Protokollen
  • Firewall-System (z. B. iptables)

Verwendete Technologien

  • Python für die Skripterstellung.
  • Elasticsearch für die Protokollüberwachung.
  • Metricbeat zur Sammlung von Metriken und Protokollen.
  • iptables zum Blockieren von IPs.
  • Ubuntu und Red Hat Unterstützung für die Bereitstellung.

Installation

Allgemeine Schritte

  1. System vorbereiten: Verwenden Sie das bereitgestellte Ansible-Playbook, um alle erforderlichen Schritte automatisch auszuführen.

    • Stellen Sie sicher, dass Ansible installiert ist. Wenn nicht, folgen Sie den Anleitungen zur Installation von Ansible für Ihr Betriebssystem.
    • Übertragen Sie die Ansible-Skripte und das main.py-Skript auf Ihren Ansible-Control-Node.
  2. Anlegen der Datei credentials.py: Erstellen Sie eine Datei namens credentials.py im Verzeichnis /src/ mit folgendem Inhalt:

    elastic_api = "https://elastic.it.tuwien.ac.at"
    elastic_user = "dein_username"
    elastic_password = "dein_passwort"
    space_name = "dein_space"

    Ersetzen Sie dein_username, dein_passwort und dein_space durch Ihre spezifischen Anmeldedaten und den Kibana-Space-Namen.

  3. Ansible-Playbook ausführen: Wenn Sie das Skript nur lokal auf dem Server installieren möchten, benötigen Sie keine Inventardatei. Sie können das Playbook direkt mit dem folgenden Befehl ausführen:

    ansible-playbook -i localhost, -c local ddog_ansible_redhat.yaml

    Dieser Befehl weist Ansible an, den lokalen Verbindungsmodus zu verwenden und die Installation auf dem aktuellen Server durchzuführen.

  4. Benutzeraufforderungen: Während der Ausführung werden Sie aufgefordert:

    • Elasticsearch-Benutzernamen einzugeben
    • Elasticsearch-Passwort einzugeben
    • Kibana-Space-Namen anzugeben
  5. Installation auf dem Server (optional): Wenn das Skript lokal auf dem Server, der es ausführt, installiert werden soll, verwenden Sie ebenfalls das bereitgestellte Ansible-Playbook.

    • Passen Sie die Inventardatei so an, dass nur der Server aufgeführt ist. Ein Beispiel für eine Inventardatei zur lokalen Installation:
[local]
127.0.0.1 ansible_connection=local
  • Führen Sie das Ansible-Playbook wie folgt aus:
ansible-playbook -i <INVENTORY_DATEI> ddog_ansible_redhat.yml

Ersetzen Sie <INVENTORY_DATEI> durch den Pfad zur oben genannten Inventardatei.

  1. Überprüfen Sie die Installation:
    • Das Skript wird als Cron-Job eingerichtet und jede Minute ausgeführt.
    • Überprüfen Sie die Logdatei unter /var/log/ddog.log, um sicherzustellen, dass keine Fehler auftreten.

Verwendung

  1. Konfiguration überprüfen:

    • Aktualisieren Sie die Datei credentials.py mit Ihren Elasticsearch-Anmeldedaten und dem entsprechenden Kibana-Space.
    • Die Datei wird automatisch vom Ansible-Skript generiert.
  2. Protokolle überwachen: Öffnen Sie die Datei /var/log/block_ips.log, um die Ergebnisse der Skriptausführung zu überwachen:

    tail -f /var/log/block_ips.log
  3. Manuelle Ausführung (optional): Wenn Sie das Skript manuell ausführen möchten, können Sie dies tun:

    python3 /usr/local/bin/main.py

Funktionsweise

  1. Abfrage von Elasticsearch:

    • Das Skript fragt Elasticsearch nach Metricbeat-Protokollen der letzten Minute ab.
    • Es identifiziert IPs mit Protokollzählen, die einen voreingestellten Schwellenwert (standardmäßig: 50) überschreiten.
  2. Abnormale IPs blockieren:

    • Erkannte IPs werden mithilfe von iptables blockiert, um eingehenden Datenverkehr von diesen Adressen zu unterbinden.
  3. Automatisierung:

    • Ein Cron-Job stellt sicher, dass das Skript automatisch jede Minute ausgeführt wird, um kontinuierlich schädliche IPs zu überwachen und zu blockieren.

Sicherheitsaspekte

  • Stellen Sie sicher, dass credentials.py nur von autorisierten Benutzern zugänglich ist, indem Sie entsprechende Berechtigungen setzen (chmod 600).
  • Verwenden Sie starke Elasticsearch-Anmeldedaten und teilen Sie diese nicht.

Fehlerbehebung

  • Elasticsearch-Abfrage schlägt fehl:

    • Überprüfen Sie die Datei credentials.py auf die richtigen Elasticsearch-URL und Anmeldedaten.
    • Vergewissern Sie sich, dass Elasticsearch läuft und erreichbar ist.
  • iptables-Befehl schlägt fehl:

    • Stellen Sie sicher, dass das Skript mit Root-Rechten ausgeführt wird (z. B. über sudo oder als Cron-Job).
    • Überprüfen Sie die Firewall-Regeln des Systems auf Konflikte.