Verzeichnisscanner verhindern

#1
Hallo,

mich nerven seit geraumer Zeit Log-Einträge wie:
Code:
94.102.49.168 - - [25/Apr/2014:13:12:03 +0200] "HEAD /mysqlmanager/scripts/setup.php HTTP/1.1" 404 163 "-" "-"
85.214.49.51 - - [12/Apr/2014:14:22:47 +0200] "GET /phpMyAdmin-2/main.php HTTP/1.0" 404 500 "-" "-"
Die dürfte sicherlich jeder Admin kennen und sollten einen wohl auch nicht allzu beunruhigen. Dennoch mache ich mir im Moment Gedanken, wie ich dem einen Riegel vorschieben kann.

Auf meinen Server läuft bereits Ossec, welche die Scans auch erkennt und meldet. Ossec ist aber so eingestellt, dass er keine Sperren verhängt.
Dafür verwende ich die CSF Firewall, in welcher man durchaus auch eigene Regex eintragen kann.

Dies klappt so aber auch nur mit der eigentlichen access.log des Apache. Für jeden Benutzer ist ja dann noch ein eigenes, welches natürlich weder von Ossec noch von CSF angesehen wird.

Nun Frage ich mich, ob es dafür denn schon elegante Lösungen dafür gibt?
Evtl. genau diese 404 Fehler in eine allgemeine Datei zusammenfassen, welche dann von CSF überwacht wird und die Sperren verhängt werden?
Auch eine Möglichkeit wäre eine eigenes Script, welches per Cronjob z.b. alle 10 Minuten sämtliche Benutzerlogs durchsieht und die gefundenen Zeilen zusammenfasst? Fraglich ob das aus Ressourcensicht überhaupt rentabel ist?

Was denkt ihr?

LG
 

nowayback

Well-Known Member
#2
wenn mich nicht alles täuscht, sollte man das auch problemlos mit fail2ban lösen können ;)


*edit*
Kurz gegooled
Code:
[Definition]
failregex = (?P<host>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) .+ 404 [0-9]+ "
ignoreregex = favicon\.ico
Code:
[apache-404block]
enabled = true
port = http
filter = apache-404block
logpath = /var/log/apache2/access.log
bantime = 86400
maxretry = 20
Testen musst du es alleine ;)
 
Zuletzt bearbeitet:
#4
alle scannen geht so:
Code:
[apache-404block] 
enabled = true 
port = http 
filter = apache-404block 
logpath = /var/www/*/logs/access.log 
bantime = 86400 
maxretry = 20
 
#5
Hallo,

ich versuche mich grad an dem Thema, bekomm es aber noch nicht ganz hin.

Mir werden keinerlei access.logs eingelesen. fail2ban.log zeigt:
Code:
2014-04-27 00:38:39,083 fail2ban.comm   : WARNING Invalid command: ['set', 'apache-404', 'addlogpath', '/var/www/meine.domain.de/log/access.log']
Achtet bitte, dass ich hier auf eine Subdomain verweise. Hier vermute ich nämlich den Fehler, dass Fail2Ban da nicht rein kommt.
Der Pfad ist natürlich korrekt und die Datei auch vorhanden.
Fail2Ban schreibt nur diesen einen Fehler, die anderen werden offensichtlich gar nicht erst versucht.

Hier meine Configs:
/etc/fail2ban/jail.local
Code:
[apache-404]
enabled = true
port = http,https
filter = apache-404
logpath = /var/www/*/log/access.log
bantime = 86400
maxretry = 6
Hier die Definition:
/etc/fail2ban/filter.d/apache-404.conf
Code:
[Definition]
failregex = <HOST> - - \[.*\] "GET /.* HTTP/1\.[01]" 404 [0-9]+.*$
ignoreregex =
Den Ausdruck habe ich bereits überprüft, der liest mir die Einträge korrekt. Nur kommt Fail2Ban noch nicht dazu, die IPs auch zu bannen.
LG
 

nowayback

Well-Known Member
#6
evtl. solltest du die logs in /var/log/ispconfig/httpd/meine.domain.de/ nehmen.

Keine Ahnung ob es daran schon scheitert. Außerdem bin ich mir nicht sicher das es mit den * da drin klappt. Ich hab es bisher nie getestet, aber versuch es doch einfach mal mit dem kompletten Pfad bevor du versuchst alle einzubinden.
 
#7
Hallo,

auch hier der selbe Fehler.
Gebe ich ihm eine feste Domain domain.de ohne Subdomain, bindet er das Logfile korrekt ein.

Mit dem Handy habe ich 404er Fehler erzeugt welche auch im Logfile stehen. Aber Fail2Ban macht dennoch nichts?

Vermutlich hakt sichs mit meinem installierten CSF Firewall?

LG

PS. Er macht schon was. Ich gab mit TAIL nur die letzten Zeilen aus und wartete auf Änderungen. Zuvor hatte er aber schon:
2014-04-27 01:24:15,995 fail2ban.actions.action: ERROR iptables -D INPUT -p tcp -m multiport --dports http,https -j fail2ban-apache-404
iptables -F fail2ban-apache-404
iptables -X fail2ban-apache-404 returned 100

Das heißt ich sollte meine "banaction" anpassen???
 
Zuletzt bearbeitet:
#8
Okay ich habe nun eine eigene:
banaction = csf-ip-deny

und unter:
/etc/fail2ban/filter.d/fail2ban.conf

Code:
[Definition]
actionstart =
actionstop =
actioncheck =
actionban = csf -d <ip> Added by Fail2Ban for <name>
actionunban = csf -dr <ip>
Nun wird mir die eine Seite korrekt gebant.

Fehlt nur noch dass ALLE Seiten-Logs geprüft werden.
Ich hab inzwischen herausgefunden, dass es NICHT am * und auch nicht an der Subdomain liegt, sondern dass diejenige access.log ein nicht lesbarer Link ist???
Verteh ich gerade selbst noch nicht.

Sooo.

aktueller Stand. Fail2Ban läuft und sämtliche Logs wurden geadded.
Es lag an manchen access.logs. welches lediglich verlinkungen waren auf eine Datei, welche nicht vorhanden war. Keine Ahnung woher die kommen. Waren auch nur ein paar wenige.
Befürchte jetzt habe ich misst gemacht denn ich hab von den betroffenen Seiten die verlinkungen entfernt...
 
Zuletzt bearbeitet:
#9
Hallo,

irgendwie mag das Ganze noch nicht ganz so.

Aktuell wird mir wohl erst gebannt, wenn ich Fail2Ban neu Starte und die Logs bereits Einträge haben.
Gehe ich allerdings mit meinem Smartphone her und provoziere 404er Fehler, bekomme ich keinen Ban zustande. Erst wieder nach Neustart von Fail2Ban.

Gibt es da Laufzeiten in welchem die Logs durchsucht werden?
Habe nun die FINDTIME auf 600 gestellt, mal sehen was in 10 Minuten ist?

LG
 
#10
Ursache lag am BACKEND = auto

Hier wird die Methode definiert, mit welcher Dateiänderungen erkannt werden. Hier steht auch dass Debian Probleme mit python-gamin hat.

Der Wert auto, sowie gamin funktionieren nicht.
Allerdings arbeitet fail2ban korrekt wenn der Wert auf polling steht.
 

Werbung