Layer 7 - Angriff
Layer 7 - Angriff
Wie es scheint leide ich aktuell stark unter einem Layer 7 Angriff, es kommen tausende Requests rein von vielen verschiedenen IPs was den Webserver überlastet und somit die Seiten offline sind, alles andere läuft.
Ich habe auch schon die Domain raus (eins meiner Projekte) nun da ich das noch nie hatte bin ich völlig überfordert was kann ich tun oder was sollte ich machen wenn es wieder läuft :/
Würde mod_evarsive was helfen, bin auch ratlos wie ich das sauber ins System integrieren kann ohne es zu brechen.
Danke im voraus.
Re: Layer 7 - Angriff
mal in das Access Log schauen was das für Requests sind. Wenn es von Bots kommt dann über Fail2Ban Badbots das Ganze blocken.
Wenn es da kein Muster gibt dann beispielsweise via ipset nur Zugriffe aus dem DACH Raum temporär zulassen, wenn das für deine Website reicht.
Ich habe mal mit KI mir ein Script erstellen lassen. Keine Garantie (!!!!), aber ich habe es schon auf Server erfolgreich getestet
1.
Code: Select all
apt install ipset jq3. Script ausführen. Das Script lässt in dieser Ausführung Zugriffe aus der EU, der Schweiz und von den Google Bots zu auf Port 80 und 443 zu. Die Länderliste kann natürlich angepasst werden.
Code: Select all
#!/bin/bash
set -euo pipefail
# Konfiguration
EU_SET="eu_ipv4"
GOOGLE_SET="google_ipv4"
TMPDIR="/tmp/ipset-eu"
MAXELEM=4000000
IPDENY_URL="https://www.ipdeny.com/ipblocks/data/countries" # per-country files
# Liste EU-Ländercodes (ISO2). Ergänze falls nötig.
EU_COUNTRIES=(at be bg hr cy cz ch dk ee fi fr de gr hu ie it lv lt lu mt nl pl pt ro sk si es se)
# Google crawler JSON (ersetze durch offiziellen Google-Link falls nötig)
GOOGLE_JSON_URL="https://developers.google.com/static/search/apis/ipranges/googlebot.json"
mkdir -p "$TMPDIR"
# create ipsets (ignore if exist)
ipset create $EU_SET nethash maxelem $MAXELEM 2>/dev/null || true
ipset create $GOOGLE_SET nethash maxelem 65536 2>/dev/null || true
# flush temporary files
> "$TMPDIR/eu.list"
> "$TMPDIR/google.list"
# Download per-country CIDR lists from ipdeny (one file per country)
for cc in "${EU_COUNTRIES[@]}"; do
url="$IPDENY_URL/${cc}.zone"
echo "Downloading $url"
if curl -fsS "$url" >> "$TMPDIR/eu.list"; then
echo "OK $cc"
else
echo "WARN: $cc konnte nicht geladen werden"
fi
done
# Populate ipset (replace existing entries atomically)
ipset -q flush $EU_SET
while read -r cidr; do
[[ -z "$cidr" ]] && continue
ipset -q add $EU_SET "$cidr"
done < "$TMPDIR/eu.list"
# Fetch Google crawler IP ranges (JSON contains prefixes; Struktur kann sich ändern)
if curl -fsS "$GOOGLE_JSON_URL" -o "$TMPDIR/google.json"; then
# Beispiel: JSON kann "prefixes" mit "ipv4Prefix" Feldern enthalten
jq -r '.prefixes[] | select(.ipv4Prefix) | .ipv4Prefix' "$TMPDIR/google.json" >> "$TMPDIR/google.list" || true
fi
ipset -q flush $GOOGLE_SET
while read -r cidr; do
[[ -z "$cidr" ]] && continue
ipset -q add $GOOGLE_SET "$cidr"
done < "$TMPDIR/google.list"
# iptables Regeln (vorhandene Regeln nicht duplizieren)
# Erlaube EU und Google zu 80/443
iptables -C INPUT -p tcp -m multiport --dports 80,443 -m set --match-set $EU_SET src -j ACCEPT 2>/dev/null || \
iptables -I INPUT -p tcp -m multiport --dports 80,443 -m set --match-set $EU_SET src -j ACCEPT
iptables -C INPUT -p tcp -m multiport --dports 80,443 -m set --match-set $GOOGLE_SET src -j ACCEPT 2>/dev/null || \
iptables -I INPUT -p tcp -m multiport --dports 80,443 -m set --match-set $GOOGLE_SET src -j ACCEPT
# Danach alle anderen Verbindungen zu 80/443 droppen (nur wenn nicht schon vorhanden)
iptables -C INPUT -p tcp -m multiport --dports 80,443 -j DROP 2>/dev/null || \
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j DROP
echo "Fertig. EU ipset: $EU_SET, Google ipset: $GOOGLE_SET"
Die Regeln sind wieder weg, wenn man den Server rebootet. Die Keyhelp Firewall Regel für HTTP muss dann natürlich wieder global geöffnet werden.
Florian Cheno
**************************************************************
Keyweb AG - Die Hosting Marke
Neuwerkstr. 45/46, 99084 Erfurt / Germany
http://www.keyweb.de - http://www.keyhelp.de
**************************************************************
Re: Layer 7 - Angriff
Ich habe die access.log beobachtet und es waren IPs aus allen Möglichen Ecken und sehr viele Aufrufe der Webseite (aktuell ist Ruhig wieder).
Leider verfolgt es keinem Muster. DACH Raum würde nicht reichen aber ganze EU + paar Ausnahmen wäre doch möglich, nehme ich an?
Re: Layer 7 - Angriff
Ja das ist klar, du musst in der Ziele gucken wo der Client vermerkt ist. Dort steht dann z.B AmazonBot, ClaudBot usw.omexlu wrote: ↑Wed 6. May 2026, 15:25 Hallo,
Ich habe die access.log beobachtet und es waren IPs aus allen Möglichen Ecken und sehr viele Aufrufe der Webseite (aktuell ist Ruhig wieder).
Leider verfolgt es keinem Muster. DACH Raum würde nicht reichen aber ganze EU + paar Ausnahmen wäre doch möglich, nehme ich an?
Florian Cheno
**************************************************************
Keyweb AG - Die Hosting Marke
Neuwerkstr. 45/46, 99084 Erfurt / Germany
http://www.keyweb.de - http://www.keyhelp.de
**************************************************************
Re: Layer 7 - Angriff
Wird auf kniffig mit dem Geo-Blocking um all die "guten" Dinge noch weiter Zugriff zu gewähren :/
Re: Layer 7 - Angriff
Schau auch mal wohin die requests gehen ... welche Domain bzw. User, vieleicht gibt es dort Sicherheitslücken in Anwendungen ...
und auch mal die UA Kennung checken und danach suchen z.b.
Code: Select all
tail -n 1000 /home/users/*/logs/*/access.log | grep "python-requests"
tail -n 1000 /home/users/*/logs/*/access.log | grep "python-http"
tail -n 1000 /home/users/*/logs/*/access.log | grep "axios"
tail -n 1000 /home/users/*/logs/*/access.log | grep " aiohttp"
tail -n 1000 /home/users/*/logs/*/access.log | grep "go-resty"
Code: Select all
netstat -Wnat | grep -E ':80|:443'
https://www.abuseipdb.com/
Re: Layer 7 - Angriff
Ausser (nur 4 Zeilen):
Code: Select all
tail -n 1000 /home/users/*/logs/*/access.log | grep "python-http"Ich weiss nicht wie ich das Problem ordentlich ohne Cloudflare lösen kann ohne die häfte der nützlichen Bots und legitimen Usern auszusperren :/
Re: Layer 7 - Angriff
danke für das kleine GeoIP Bash-Script.
Wie sieht es aber z.B. mit Lets Encrypt aus? Es sollte doch auf jedenfall "US" mit zugefügt werden wegen der Zertifikate, ansonsten kann es Probleme geben. Oder mach ich einen Denkfehler?
Andi
Re: Layer 7 - Angriff
Man sperrt sich so die Hälfe aus und wenn man USA erlaubt hat man die Angriffe zu 50% wieder.
Die Lösung ist für mich nicht optimal.
Schon jemand was con CrowdSec gehört oder ähnlichem?
Re: Layer 7 - Angriff
Ja, habe ich laufen. Tut seine Sache recht gut. Aber wenn der Angriff direkt auf dich gemünzt ist hilft es dir auch nicht weiter. Dann agiert es wie Fail2ban.
Re: Layer 7 - Angriff
Code: Select all
grep "python-requests" /home/users/*/logs/*/access.log
Code: Select all
grep "136.112.192.228" /home/users/*/logs/*/access.log
Das zeigt nur kurzfristig die aktuellen requests ... ist fürs grobe eingrenzen gedacht
Code: Select all
netstat -Wnat | grep -E ':80|:443'
Re: Layer 7 - Angriff
Und auf Fail2Ban Filter werden hier nicht viel bringen wenn es nach legit traffic aussieht aber 1000 IPs.
Soeine Kacke, aktuell ist es ruhig aber kein Plan wie ohne Cloudflare aber eignetlich möchte ich auf Cloudflare verzichten macht nur Stress.
Re: Layer 7 - Angriff
Natürlich ist das nur für den temporären Einsatz gedacht. Meistens legen sich solche Attacken nach einiger Zeit. So bleibt der Server aber wenigstens erreichbar.
Florian Cheno
**************************************************************
Keyweb AG - Die Hosting Marke
Neuwerkstr. 45/46, 99084 Erfurt / Germany
http://www.keyweb.de - http://www.keyhelp.de
**************************************************************
Re: Layer 7 - Angriff
Worauf greifen die IP Adressen denn zu ... welches "Ziel" bzw. was zeigt das log denn überhaupt an?
Picke einfach mal 3-4 dieser IP Adressen raus und suche danach in den User logs
Code: Select all
grep "xx.xx.xxx.xx" /home/users/*/logs/*/access.log