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
-
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.
-
Anlegen der Datei
credentials.py
: Erstellen Sie eine Datei namenscredentials.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
unddein_space
durch Ihre spezifischen Anmeldedaten und den Kibana-Space-Namen. -
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.
-
Benutzeraufforderungen: Während der Ausführung werden Sie aufgefordert:
- Elasticsearch-Benutzernamen einzugeben
- Elasticsearch-Passwort einzugeben
- Kibana-Space-Namen anzugeben
-
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.
-
Ü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
-
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.
- Aktualisieren Sie die Datei
-
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
-
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
-
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.
-
Abnormale IPs blockieren:
- Erkannte IPs werden mithilfe von
iptables
blockiert, um eingehenden Datenverkehr von diesen Adressen zu unterbinden.
- Erkannte IPs werden mithilfe von
-
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.
- Überprüfen Sie die Datei
-
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.
- Stellen Sie sicher, dass das Skript mit Root-Rechten ausgeführt wird (z. B. über