Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
de:shibidp3fail2ban [2016/08/25 11:00] – angelegt Raoul Gunnar Boreniusde:shibidp3fail2ban [2020/04/16 09:01] Silke Meyer
Zeile 1: Zeile 1:
-===== Abwehr von Brute Force Attacken =====+====== Abwehr von Brute Force Attacken ======
  
 Da der IdP weltweit erreichbar ist, ist es einem Angreifer prinzipiell möglich Usernamen/Passwörter beliebig lange durchzuprobieren. Da der IdP weltweit erreichbar ist, ist es einem Angreifer prinzipiell möglich Usernamen/Passwörter beliebig lange durchzuprobieren.
Zeile 5: Zeile 5:
 Solche Angriffe können z.B. mithilfe des Tools 'fail2ban' abgewehrt werden. Solche Angriffe können z.B. mithilfe des Tools 'fail2ban' abgewehrt werden.
  
-Dazu muss das IdP-Logformat etwas angepasst werden:+==== Config Shibboleth IdPv3 ====
  
-<file xml ./conf/logback.xml> +Dazu muss das IdP-Logformat etwas angepasst werdenSiehe dazu die [[de:shibidp3config-log|IdP-Konfigurationsanleitung in diesem 
-<appender name="IDP_PROCESS" class="ch.qos.logback.core.rolling.RollingFileAppender"> +Wiki]]!
-        <File>${idp.logfiles}/idp-process.log</File>+
  
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> +==== Config fail2ban ====
-            <fileNamePattern>${idp.logfiles}/idp-process-%d{yyyy-MM-dd}.log.gz</fileNamePattern> +
-            <maxHistory>${idp.loghistory:-180}</maxHistory> +
-        </rollingPolicy>+
  
-        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 
-            <charset>UTF-8</charset> 
-            <Pattern>%date{ISO8601} - %level [%logger:%line] - IP:%mdc{idp.remote_addr:-n/a} | %msg%n%ex{short}</Pattern> 
-        </encoder> 
-    </appender> 
-</file> 
- 
-Entscheidend dabei ist die Angabe  
 <file ini /etc/fail2ban/filter.d/idp.conf> <file ini /etc/fail2ban/filter.d/idp.conf>
 [Definition] [Definition]
Zeile 32: Zeile 20:
 </file> </file>
  
 +<file ini /etc/fail2ban/jail.local>
 +[idp]
 +
 +enabled  = true
 +port     = http,https
 +filter   = idp
 +logpath  = /opt/shibboleth-idp/logs/idp-process.log
 +maxretry = 5
 +</file>
 +
 +===== Fail2ban über Apache =====
 +
 +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:
 +
 +<code>
 +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
 +</code>
  
 +{{tag>idp3}}