Dem kann ich mich nur voll und ganz anschließen. Dank des Skripts ist es nun wirklich ruhiger auf meinem Mailserver geworden. Wäre wirklich klasse, wenn das mit in der Doko mit aufgenommen werden würde. Dient ja schließlich auch dem Schutz des Mailservers. Dank des Skripts und die Erweiterung von Crowdsec bin ich ja nun auch aktiver Melder von bösen IPs an die AbuseIPdb geworden.
Falls jemand auch Crowdsec am laufen hat und die bösen IPs an AbuseIPDB melden möchte, kann das relativ einfach bewerkstelligen.
Im Config Verzeichnis die Datei im Unterordnet notifications html.yaml Datei bearbeiten
crowdsec/config/notifications/http.yaml
und folgendes eintragen:
---
type: http
name: http_report_abuseipdb
log_level: debug
url: https://api.abuseipdb.com/api/v2/report
method: POST
headers:
Content-Type: application/json
Key: <API Key von AbuseIPdb>
format: |
{
{{range . -}}
{{$alert := . -}}
{{range .Decisions -}}
"ip": "{{ $alert.Source.IP }}",
"categories": [
{{ if contains $alert.Scenario "crowdsecurity/test alert" }} "1" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/andreasbrett/paperless-ngx-bf" }} "5" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/apache_log4j2_cve-2021-44228" }} "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/appsec-vpatch" }} "21" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/CVE-2017-9841" }} "21" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/CVE-2019-18935" }} "20" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/CVE-2021-4034" }} "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/CVE-2022-26134" }} "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/CVE-2022-35914" }} "21" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/CVE-2022-37042" }} "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/CVE-2022-40684" }} "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/CVE-2022-41082" }} "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/CVE-2022-41697" }} "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/CVE-2022-42889" }} "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/CVE-2022-44877" }} "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/CVE-2022-46169" }} "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/CVE-2023-22515" }} "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/CVE-2023-22518" }} "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/CVE-2023-23397" }} "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/CVE-2023-49103" }} "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/CVE-2023-4911" }} "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/CVE-2024-3875" }} "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/f5-big-ip-cve-2020-5902" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/fortinet-cve-2018-13379" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/grafana-cve-2021-43798" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/http-admin-interface-probing" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/http-bad-user-agent" }} "21", "19" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/http-bf-wordpress_bf" }} "21", "18" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/http-crawl-non_statics" }} "21", "19" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/http-cve-2021-41773" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/http-cve-2021-42013" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/http-cve-probing" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/http-generic-bf" }} "21", "18" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/http-open-proxy" }} "21" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/http-path-traversal-probing" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/http-probing" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/http-sensitive-files" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/http-sqli-probing" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/http-wordpress_user-enum" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/http-wordpress_wpconfig" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/http-wordpress-scan" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/http-xss-probing" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/iptables-scan-multi_ports" }} "14" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/jira_cve-2021-26086" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/mariadb-bf" }} "21", "18" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/netgear_rce" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/nextcloud-bf" }} "21", "18" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/nginx-req-limit-exceeded" }} "21", "6" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/pfsense-gui-bf" }} "21", "18" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/pulse-secure-sslvpn-cve-2019-11510" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/spring4shell_cve-2022-22965" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/ssh-bf" }} "22", "18" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/ssh-slow-bf" }} "22", "18" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/thinkphp-cve-2018-20062" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/vmware-cve-2022-22954" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/vmware-vcenter-vmsa-2021-0027" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/windows-bf" }} "21", "18" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/windows-CVE-2022-30190-msdt" }} "21", "15" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/wireguard-auth" }} "21", "18" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/http-sensitive-files" }} "21", "18" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/postfix-non-smtp-command" }} "21", "18" {{end}}
{{ if contains $alert.Scenario "crowdsecurity/postfix-spam" }} "21", "18" {{end}}
{{ if contains $alert.Scenario "firewallservices/pf-scan-multi_ports" }} "21", "14" {{end}}
{{ if contains $alert.Scenario "firix/authentik-bf" }} "21", "18" {{end}}
],
"comment": "This IP was detected by CrowdSec triggering {{ $alert.Scenario }}"
{{end -}}
{{end -}}
}
Die Scenarios kann man an eurer Konfigurationen anpassen, entsprechend entfernen oder hinzufügen. Die Nummer hinter der Zeile [...] }} "21", "15" {{end}}
entsprechen der .
In dem Fall für 21 ist Web App Attack und 15 für Hacking
Damit das ganze auch aufgerufen wird, muss noch das Plugin aktiviert werden. Das wird in der Konfig Datei config/profiles.yaml
erledigt, dort muss man dann nur noch den Namen der der Notification aktivieren. In diesem fall müsst ihr nur - http_report_abuseipdb
eintragen zum Aktivieren der Notifikation.
Eine vollständige Konfiguration sieht dann als Beispiel so aus:
---
name: default_ip_remediation
# debug: true
filters:
- Alert.Remediation == true && Alert.GetScope() == "Ip"
decisions:
- type: ban
duration: 14h
duration_expr: Sprintf('%dh', (GetDecisionsCount(Alert.GetValue()) + 1) * 14)
notifications:
# - slack_default # Set the webhook in /etc/crowdsec/notifications/slack.yaml before enabling this.
# - splunk_default # Set the splunk url and token in /etc/crowdsec/notifications/splunk.yaml before enabling th>
- http_telegram
- http_report_abuseipdb
# Set the required http parameters in /etc/crowdsec/notifications/http.yaml before enabling thi>
# - email_default # Set the required email parameters in /etc/crowdsec/notifications/email.yaml before enablin>
on_success: break
---
name: default_range_remediation
# debug: true
filters:
- Alert.Remediation == true && Alert.GetScope() == "Range"
decisions:
- type: ban
duration: 14h
duration_expr: Sprintf('%dh', (GetDecisionsCount(Alert.GetValue()) + 1) * 14)
notifications:
# - slack_default # Set the webhook in /etc/crowdsec/notifications/slack.yaml before enabling this.
# - splunk_default # Set the splunk url and token in /etc/crowdsec/notifications/splunk.yaml before enabling th>
- http_telegram # Set the required http parameters in /etc/crowdsec/notifications/http.yaml before enabling thi>
# - email_default # Set the required email parameters in /etc/crowdsec/notifications/email.yaml before enablin>
on_success: break
Nur noch den Crowdsec neustarten und abwarten bis der erste gemeldet wird.
Das sieht dann bei AbuseIPDB Reports so aus:
Ich finde das ganz Praktisch und hilft die Datenbank Aktuell zu halten.
Ohne das Skript von @DocFraggle wäre ich gar nicht auf AbuseIPDB aufmerksam geworden. Danke!