In der Firewall: gemeldete Angreifer blocken

Die Attack-Intelligence-Liste direkt auf Routern und Border-Firewalls blocken - ohne fail2ban: iptables, nftables, ufw, pf (BSD) und Windows Firewall, alle 5 Minuten synchronisiert.

So funktioniert das Firewall-Blocken

Auf der Firewall selbst wird kein fail2ban benötigt. Die Blockliste ist ein Text-Export - eine IP pro Zeile, nur soft- und hard-gelistete Angreifer:

https://reports.provider.tools/api/v1/abuse/export                (alle Dienste)
https://reports.provider.tools/api/v1/abuse/export?service=ssh    (einzelner Dienst)

Diese Liste holen Sie in einem Intervall ab (alle 5 Minuten, wie unser eigener Sync) und laden sie in Ihr Firewall-Regelwerk. Ausgetragene IPs stehen einfach nicht mehr in der Liste - das Set wird bei jedem Lauf neu aufgebaut.

Zuerst Whitelisten: eigene IPs (Büro, VPN, Monitoring) immer ausschließen, damit Sie sich nie selbst aussperren.

iptables + ipset (Linux)

Als /usr/local/sbin/pt-block-sync.sh speichern, dann chmod +x:

#!/usr/bin/env bash
set -e
IPLIST=$(mktemp)
curl -fsS https://reports.provider.tools/api/v1/abuse/export -o "$IPLIST"

ipset destroy provider-tools-block 2>/dev/null || true
ipset create provider-tools-block hash:ip hashsize 4096 maxelem 65536

while read -r ip; do
  [ -n "$ip" ] && ipset add provider-tools-block "$ip" 2>/dev/null || true
done < "$IPLIST"

# Chain anlegen (einmalig) und Regel erzwingen
iptables -N PROVIDER_TOOLS_BLOCK 2>/dev/null || true
iptables -C INPUT -j PROVIDER_TOOLS_BLOCK 2>/dev/null || iptables -I INPUT -j PROVIDER_TOOLS_BLOCK
iptables -F PROVIDER_TOOLS_BLOCK

# Eigene IPs NIE blocken - hier Ihre Whitelist pflegen:
# iptables -A PROVIDER_TOOLS_BLOCK -s 203.0.113.0/24 -j RETURN

iptables -A PROVIDER_TOOLS_BLOCK -m set --match-set provider-tools-block src -j DROP

rm -f "$IPLIST"

Cron (alle 5 Minuten, passend zum Netzwerk-Sync):

*/5 * * * * root /usr/local/sbin/pt-block-sync.sh

nftables (Linux)

Als /usr/local/sbin/pt-block-sync-nft.sh speichern, dann chmod +x:

#!/usr/bin/env bash
set -e
nft flush set inet filter provider_tools_block 2>/dev/null ||   nft add set inet filter provider_tools_block '{ type ipv4_addr; flags interval; }'
nft add chain inet filter provider_tools_block '{ type filter hook input priority -1; }' 2>/dev/null || true
nft flush chain inet filter provider_tools_block

# Eigene IPs NIE blocken - hier Ihre Whitelist pflegen:
# nft add rule inet filter provider_tools_block ip saddr 203.0.113.0/24 accept

curl -fsS https://reports.provider.tools/api/v1/abuse/export | while read -r ip; do
  [ -n "$ip" ] && nft add element inet filter provider_tools_block "{ $ip }" 2>/dev/null || true
done
nft add rule inet filter provider_tools_block ip saddr @provider_tools_block drop

Cron (alle 5 Minuten):

*/5 * * * * root /usr/local/sbin/pt-block-sync-nft.sh

ufw (Ubuntu/Debian)

ufw kennt keine Sets - der sauberste Weg ist das ipset + iptables-Script aus dem Abschnitt oben: ufw nutzt unter der Haube iptables, und ein Sprung in PROVIDER_TOOLS_BLOCK funktioniert neben ufw ohne Konflikte.

Alternativ jede IP direkt mit ufw blocken (langsamer bei großen Listen, für kleine Listen geeignet):

#!/usr/bin/env bash
set -e
# Vorherige Einträge entfernen
ufw status numbered | awk '/provider-tools/ {print $1}' | sed 's/[//;s/]//' | sort -rn | while read -r n; do
  yes | ufw delete "$n" >/dev/null 2>&1 || true
done
curl -fsS https://reports.provider.tools/api/v1/abuse/export | while read -r ip; do
  [ -n "$ip" ] && ufw deny from "$ip" comment 'provider-tools' >/dev/null 2>&1 || true
done

pf (FreeBSD / OpenBSD / macOS)

In /etc/pf.conf eine Tabelle definieren und die Liste hineinladen:

table <provider_tools> persist

block drop in quick from <provider_tools> to any

Sync-Script (z.B. /usr/local/sbin/pt-block-sync-pf.sh):

#!/bin/sh
set -e
TMP=$(mktemp)
curl -fsS https://reports.provider.tools/api/v1/abuse/export -o "$TMP"

# Eigene IPs NIE blocken - hier Ihre Whitelist pflegen (vor dem Reload löschen):
# sed -i '' '/^203.0.113./d' "$TMP"

pfctl -t provider_tools -T replace -f "$TMP"
rm -f "$TMP"

Cron (alle 5 Minuten):

*/5 * * * * root /usr/local/sbin/pt-block-sync-pf.sh

Windows Firewall

PowerShell-Script, als geplante Aufgabe alle 5 Minuten ausführen. Blockt die aktuelle Liste über eine einzige dynamische Firewall-Regel:

# pt-block-sync.ps1
$ErrorActionPreference = 'SilentlyContinue'
$ips = (Invoke-WebRequest -Uri 'https://reports.provider.tools/api/v1/abuse/export' -UseBasicParsing).Content -split '\n' | Where-Object { $_ -match '^\d+\.\d+\.\d+\.\d+$' }

Remove-NetFirewallRule -DisplayName 'provider-tools-block'

if ($ips.Count -gt 0) {
    New-NetFirewallRule -DisplayName 'provider-tools-block' -Direction Inbound -Action Block -RemoteAddress $ips -Profile Any
}

Geplante Aufgabe:

schtasks /Create /TN "provider-tools-block" /TR "powershell -ExecutionPolicy Bypass -File C:scriptspt-block-sync.ps1" /SC MINUTE /MO 5 /RU SYSTEM

Eigene IPs in eine zweite Allow-Regel aufnehmen, die VOR dieser Regel verarbeitet wird - Windows verarbeitet Allow-Regeln standardmäßig zuerst.