Abwehr von Brute Force Attacken

Da der IdP weltweit erreichbar ist, ist es einem Angreifer prinzipiell möglich Usernamen/Passwörter beliebig lange durchzuprobieren.

Solche Angriffe können z.B. mithilfe des Tools 'fail2ban' abgewehrt werden.

Dazu muss das IdP-Logformat etwas angepasst werden. Siehe dazu die IdP-Konfigurationsanleitung in diesem Wiki!

/etc/fail2ban/filter.d/idp.conf
[Definition]
 
failregex = IP\:<HOST> .* Login by .* failed
            IP\:<HOST> .* No password available
ignoreregex =
/etc/fail2ban/jail.local
[idp]
 
enabled  = true
port     = http,https
filter   = idp
logpath  = /opt/shibboleth-idp/logs/idp-process.log
maxretry = 5

Im Normalfall sperrt Fail2ban die user per iptables Regel auf IP-Ebene. D.h. der gesperrte User bekommt keine Verbindung mehr zum IdP. Damit entfällt die Möglichkeit dem User eine Information zu geben warum er gesperrt ist und was er machen kann um sich entsperren zu lassen.

Alternativ kann fail2ban daher auch eingesetzt werden um den gesperrten nicht per iptables abzuweisen sondern ihn auf eine Info-Webseite zu leiten.

Hier die Info eines DFN-AAI-Teilnehmers in Kurzform:

Also habe ich mich an folgende Anleitung gehalten:
https://httpd.apache.org/docs/2.4/rewrite/access.html#host-deny

Dabei werden alle Anfragen an den Apache auf eine fest definierte Seite 
weitergeleitet, sobald die anfragende IP-Adresse auf der Blacklist steht.
Auf der Zielseite habe ich dann einfach einen kurzen Erläuterungs-Text 
hinterlegt, der wie folgt aussieht:

> Anmeldung zu oft fehlgeschlagen.
> Sie wurden für 10 Minuten gesperrt.
> Bitte versuchen Sie es später erneut.

Die nötige Konfiguration im Apache sieht bei mir so aus:

> RewriteEngine on
> RewriteMap hosts-deny "txt:/etc/apache2/conf.d/shib.deny"
> RewriteCond "${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND}" "!=NOT-FOUND"
> RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/Blockiert/index.html [L]
>
> <Directory "/srv/www/htdocs/Blockiert">
>   AllowOverride
>   Require all granted
> </Directory>

Im fail2ban habe ich dann noch unter action.d eine eigene Datei 
angelegt, die beschreibt wie im Falle eine IP-Adresse gebannt und wieder 
freigegeben wird.

> actionban = printf %%b "<ip> -\n" >> <deny-config>
> actionunban = sed -i "/^<ip> -$/d" <deny-config>
> deny-config = /etc/apache2/conf.d/shib.deny
  • Zuletzt geändert: vor 8 Monaten