Massig Status 404 in access log per fail2ban erkenne

firefox

New Member
Hallo Forum,
seit ein paar Stunden befindet sich mein Server unter massiven Scanattacken des Morfeus Scanners. Sprich es wird nach Software und Sicherheitsleaks gesucht. Das so stark, dass mein Apache in die Knie geht.

Habe Anfangs manuell mit iptables die IP's geblockt, aber jetzt kommen auch vermehrt weitläufige Ip's. Auch aus unterschiedlichen bereichen.

Würde gern mittels fail2ban die Einträge in der Accesslog des Apachen erkennen und dann automatisch die IP sperren.

Kann mir jemand auf die Sprünge helfen, wie ich einen reguläre Suche nach diesem Schema erstelle?

Code:
84.199.41.202 - - [16/Dec/2008:13:06:08 +0100] "GET /administrator/phpMyAdmin-2.8.2.3/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:09 +0100] "GET /administrator/phpMyAdmin-2.8.2.4/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:09 +0100] "GET /administrator/phpMyAdmin-2.8.2/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:09 +0100] "GET /administrator/phpMyAdmin-2.9.0-beta1/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:09 +0100] "GET /administrator/phpMyAdmin-2.9.0-rc1/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:09 +0100] "GET /administrator/phpMyAdmin-2.9.0.1/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:09 +0100] "GET /administrator/phpMyAdmin-2.9.0.2/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:09 +0100] "GET /administrator/phpMyAdmin-2.9.0.3/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:10 +0100] "GET /administrator/phpMyAdmin-2.9.0/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:10 +0100] "GET /administrator/phpMyAdmin-2.9.1-rc1/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:10 +0100] "GET /administrator/phpMyAdmin-2.9.1-rc2/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:10 +0100] "GET /administrator/phpMyAdmin-2.9.1.1/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:10 +0100] "GET /administrator/phpMyAdmin-2.9.1/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:10 +0100] "GET /administrator/phpMyAdmin-2.9.2-rc1/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:10 +0100] "GET /administrator/phpMyAdmin-2.9.2/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:11 +0100] "GET /administrator/phpMyAdmin-2/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:11 +0100] "GET /administrator/phpMyAdmin/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:11 +0100] "GET /administrator/phpMyAdmin2/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:11 +0100] "GET /administrator/phpmanager/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:11 +0100] "GET /administrator/phpmy-admin/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:11 +0100] "GET /administrator/phpmyadmin/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:12 +0100] "GET /administrator/phpmyadmin2.11.5/main.php HTTP/1.0" 404 1030 "-" "-"
84.199.41.202 - - [16/Dec/2008:13:06:12 +0100] "GET /administrator/phpmyadmin2/main.php HTTP/1.0" 404 1030 "-" "-"

Werde dann die Retrys so anpassen, dass auch niemand fälschlicherweiße ausgesperrt wird, welcher von Hand ein paar 404's bekommt.

Besten dank für die Hilfe.
 
brauchst du dazu nur die RegEx oder komplettes Beispiel ahand von fail2ban?
Ich hab fail2ban im Einsatz zum Blocken sämtlicher bots und scripte, funktioniert tadellos.

Hier mal die RegEx zu deinem Beispiel:

Code:
<HOST> - - \[.*\] "GET /.* HTTP/1\.[01]" 404 [0-9]+.*$
 
Ok habe einen neuen Filter und Action anlegen.
Also ich habe mir einen neuen Filter gemacht welcher nach dem Regex sucht, besten dank für die Hilfe.

Einen neuen Block in der jail.conf erstellt, welcher so aussieht:

Code:
[apache-404block]

enabled  = true
filter   = apache-404block
action   = iptables[name=Apache404Block, port=http]
logpath  = /var/log/apache2/access_log
bantime  = 1800
maxretry = 8

der Filter dazu:

Code:
[Definition]
failregex = <HOST> - - \[.*\] "GET /.* HTTP/1\.[01]" 404 [0-9]+.*$
ignoreregex =

Sollte so in Ordnung gehen. Gerade in diesem Moment habe ich natürlich keine Logs welche so auftreten um den Erfolg oder Misserfolg zu sehen :/
 
dieser Befehl hilft Dir beim Testen weiter:
Code:
fail2ban-regex "zeile-aus-log" "zu-testende-regex"

Es wird Dir dann ausgegeben ob die RegEx etwas gefunden hat sowie ob die automatische Datums-erkennung funktioniert hat.

Edit: Groß/Kleinschreibung
 
Last edited by a moderator:
Besten dank, steht sogar in der Doku ;-)

Aber ich glaub das war noch nicht alles.
Irgend etwas ballert noch auf den Apache ein.

Mit top sehe ich nur den Apache Prozess. Im error_log sowie access_log steht nichts drin was so viel lasst macht. Wie kann ich raus finden, welche Angriffe da gefahren werden?
 
Informationen über den Status von Apache geben dir folgende Tools:
Code:
apache2ctl fullstatus
ps aux | egrep '[a]pache|[h]ttpd

Interessant wäre auch mit welchen Zahlen du es zu tun hast.
Wie viele Besucher hast du Durchschnittlich, um welche Art von Seite handelt es sich?
Wird dynamischer oder statischer Inhalt ausgeliefert.
Sind deine dynamischen Skripte sauber geschrieben?

Was ist dein MPM Modell?
Wie ist dieses eingestellt?
 
fullstatus bringt eine nette Meldung das dass mit dem Browser nicht geht.
Code:
  Unfortunately, your browser is not supported by
[warning_le]                       Sitebuilder.                        [warning_ri]
              Please use Internet Explorer 5.5 or later, or Mozilla.

Der Server ist eigentlich gut besucht. Aber eine Load über 3 bin ich nie gewöhnt. Aktuell gehts aber rauf bis teilweise 15.

Nmap zeigt mir nichts ungewöhnliches. Auch wenn ich mit https-alt nicht viel anfangen kann. Läuft aber als Root.

Code:
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
25/tcp   open  smtp
53/tcp   open  domain
80/tcp   open  http
106/tcp  open  pop3pw
110/tcp  open  pop3
143/tcp  open  imap
443/tcp  open  https
465/tcp  open  smtps
993/tcp  open  imaps
995/tcp  open  pop3s
3306/tcp open  mysql
8443/tcp open  https-alt

Sobald der Apache Läuft kommen in gewissen Schüben extrem viele Prozesse im Top hoch. Aber auch nur eben ab und zu. Sonst könnte ich ja sagen, dass sind reale Besucher wenn es konstant wäre. Zudem war die Last die Nacht schon so, und heut morgen. Unrealistisch für einen hohen Peak.

ps aux bringt etwa 30 Prozesse vom Apachen ala:

Code:
wwwrun   18860  0.0  0.9  37572 18784 ?        S    19:04   0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun   18872  0.4  1.3  45816 28008 ?        S    19:04   0:01 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun   18982  2.9  1.3  45436 27680 ?        S    19:05   0:09 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun   19032  4.9  1.5  50620 32832 ?        R    19:05   0:13 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun   19437  0.5  1.3  45340 27488 ?        S    19:07   0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun   19488  0.2  1.1  41320 23408 ?        S    19:08   0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf

Kann man nicht irgendwo erkennen wer wo auf welche Adresse hin will?

Netstat ist voll von wartenden Prozessen. Alle komische Hosts. Nach welchen Regeln kann ich so etwas bändigen?

Code:
tcp        0      0 h1219969.strat:www-http e178073001:ibridge-data TIME_WAIT
tcp        0      0 h1219969.strat:www-http e17807300:bluectrlproxy TIME_WAIT
tcp        0      0 h1219969.strat:www-http e178073001:ibridge-mgmt TIME_WAIT
tcp        0      0 h1219969.strat:www-http e178073001.adsl.al:2278 TIME_WAIT
tcp        0      0 h1219969.strat:www-http dyndsl-09:alarm-clock-s TIME_WAIT
tcp        0      0 h1219969.strat:www-http dyndsl-091-0:backburner TIME_WAIT
tcp        0      0 h1219969.strat:www-http dyndsl-091:interintelli TIME_WAIT
tcp        1      0 h1219969.strat:www-http e178073001:dtv-chan-req CLOSE_WAIT
tcp        0      0 h1219969.strat:www-http dyndsl-0:sybaseanywhere TIME_WAIT

Noch gar nicht erwähnt: Suse System mit Apache2 als prefork - php4.4.9
 
Last edited by a moderator:
Der Server ist eigentlich gut besucht. Aber eine Load über 3 bin ich nie gewöhnt. Aktuell gehts aber rauf bis teilweise 15.

Was bedeutet "gut besucht" in Zahlen?


Nmap zeigt mir nichts ungewöhnliches. Auch wenn ich mit https-alt nicht viel anfangen kann. Läuft aber als Root.

Code:
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
25/tcp   open  smtp
53/tcp   open  domain
80/tcp   open  http
106/tcp  open  pop3pw
110/tcp  open  pop3
143/tcp  open  imap
443/tcp  open  https
465/tcp  open  smtps
993/tcp  open  imaps
995/tcp  open  pop3s
3306/tcp open  mysql
8443/tcp open  https-alt

Wenn du mit gewissen Ports die auf deinem Server offen sind nichts anzufangen weisst, dann steht hier ein Generalputz an.
Stoppe erstmal alle Dienste die du nicht benötigst.
Sofern du nicht von extern auf deinen MySQL Server zugreifst solltest du "skip-networking" zu deiner my.cnf hinzufügen.

Welches Programm welchen Port benutzt erfährst du mit:
Code:
netstat -apn | grep <Port>


Sobald der Apache Läuft kommen in gewissen Schüben extrem viele Prozesse im Top hoch. Aber auch nur eben ab und zu. Sonst könnte ich ja sagen, dass sind reale Besucher wenn es konstant wäre. Zudem war die Last die Nacht schon so, und heut morgen. Unrealistisch für einen hohen Peak.

ps aux bringt etwa 30 Prozesse vom Apachen ala:

Code:
wwwrun   18860  0.0  0.9  37572 18784 ?        S    19:04   0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun   18872  0.4  1.3  45816 28008 ?        S    19:04   0:01 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun   18982  2.9  1.3  45436 27680 ?        S    19:05   0:09 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun   19032  4.9  1.5  50620 32832 ?        R    19:05   0:13 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun   19437  0.5  1.3  45340 27488 ?        S    19:07   0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun   19488  0.2  1.1  41320 23408 ?        S    19:08   0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf

Dazu wäre interessant mit welchen Besucherzahlen wir hier rechnen.
Wie ist die Apache MPM eingestellt?

Kann man nicht irgendwo erkennen wer wo auf welche Adresse hin will?

Im Apache Access Log kannst du das nachvollziehen.

Netstat ist voll von wartenden Prozessen. Alle komische Hosts. Nach welchen Regeln kann ich so etwas bändigen?

Wartende Verbindungen sind nicht zwingend etwas negatives.
Wieviele bekommst du da aufgelistet?
Zu prüfen mit:
Code:
netstat -apn | grep TIME_WAIT | wc -l
 
Back
Top