Aktionen

Fail2Ban mit ISPConfig und open basedir restriction in effect

Aus znilwiki

Version vom 15. März 2026, 11:58 Uhr von BLinz (Diskussion | Beiträge) (Filter erstellen)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Changelog:

  • 15.03.2026 erste Version

Vorwort

Ich betreibe schon seit Jahren Webserver mit diversen Webseiten. Basis ist bei mir immer Ubuntu-Server, schon länger setze ich dabei ISPConfig als Verwaltungssoftware ein.
Über diese kann ich bequem die Subdomäne anlegen. ISPConfig sorgt dann dafür das die Webseiten immer unter einem jeweils eigenen Benutzer laufen, mit der gewählten PHP-Version oder auch ganz ohne.

Gerade diese Seite hier wird dabei regelmäßig nach Sicherheitslücken aller Art abgesucht.
ISPConfig führt die Logs pro Webseite, diese finden sich unter

/var/www/znil.net/log/access.log
/var/www/znil.net/log/error.log

bzw. die echten Pfade

/var/www/clients/client*/web*/log/access.log
/var/www/clients/client*/web*/log/error.log


Gerade im error.log find ich ständig Versuche irgendwelche Shell/Bash Befehle auszuführen:

[Sun Mar 15 09:35:37.043222 2026] [fcgid:warn] [pid 368061] [client 85.208.96.195:64110] mod_fcgid: stderr: PHP Warning:  file_exists(): open_basedir restriction in effect.
File(/bin/bash) is not within the allowed path(s):(/var/www/clients/client0/web1/web:/var/www/clients/client0/web1/private:/var/www/clients/client0/web1/tmp ...

Ich habe beschlossen, die Quelladressen solcher Versuche für 2h zu sperren.
Nachfolgend ist die Lösung dafür.


Voraussetzungen

Voraussetzung ist für dieses Beispiel, ein Webserver mit Apache2 und installierten Fail2Ban.
Ich habe vor Begin der nachfolgenden Befehle per

sudo -i

dauerhaft zum root gewechselt!


Filter erstellen

nano /etc/fail2ban/filter.d/apache-basedir.conf

Inhalt:

[Definition]
# Erläuterung der Regex:
# ^          = Zeilenanfang
# .* = Beliebige Zeichen (Datum/PID)
# \[client <ADDR>(:\d+)?\] = Sucht nach [client IP] oder [client IP:Port]
# .* = Beliebige Zeichen dazwischen
# open_basedir restriction in effect = Der Zieltext
failregex = ^.*\[client <ADDR>(:\d+)?\].*open_basedir restriction in effect.*$

ignoreregex =

jail.conf anpassen

nano /etc/fail2ban/jail.local

Folgendes ergänzen:

[apache-basedir]
enabled  = true
port     = http,https
filter   = apache-basedir
logpath  = /var/www/clients/client*/web*/log/error.log
backend  = polling
# oder backend = pyinotify
# 2 Stunden Sperrzeit
bantime  = 7200
# Wie viele Versuche (hier 1, da "open_basedir" oft ein direkter Angriffsversuch ist)
maxretry = 1
findtime = 600
# Eigene IP-Adressen Whitelisten, ggf. weglassen
ignoreip = 127.0.0.1/8 ::1 90.187.238.201 80.153.150.156



Neustart und Test

Neustart:

systemctl restart fail2ban-service

Test:

fail2ban-client status apache-basedir

Beispielausgabe:

Status for the jail: apache-basedir
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- File list:        /var/www/clients/client0/web76/log/error.log /var/www/clients/client0/web59/log/error.log /var/www/clients/client0/web40/log/error.log /var/www/clients/client0/web1/log/error.log /var/www/clients/client0/web34/log/error.log /var/www/clients/client0/web24/log/error.log /var/www/clients/client0/web56/log/error.log /var/www/clients/client0/web22/log/error.log /var/www/clients/client0/web36/log/error.log /var/www/clients/client0/web50/log/error.log /var/www/clients/client0/web42/log/error.log /var/www/clients/client0/web77/log/error.log /var/www/clients/client0/web65/log/error.log /var/www/clients/client0/web10/log/error.log /var/www/clients/client0/web71/log/error.log /var/www/clients/client0/web78/log/error.log /var/www/clients/client0/web7/log/error.log /var/www/clients/client0/web61/log/error.log /var/www/clients/client0/web64/log/error.log /var/www/clients/client0/web72/log/error.log /var/www/clients/client0/web66/log/error.log /var/www/clients/client0/web63/log/error.log /var/www/clients/client0/web26/log/error.log /var/www/clients/client0/web29/log/error.log /var/www/clients/client0/web70/log/error.log /var/www/clients/client0/web74/log/error.log /var/www/clients/client0/web37/log/error.log /var/www/clients/client0/web57/log/error.log /var/www/clients/client0/web68/log/error.log /var/www/clients/client0/web47/log/error.log /var/www/clients/client0/web60/log/error.log /var/www/clients/client0/web69/log/error.log /var/www/clients/client0/web44/log/error.log /var/www/clients/client0/web39/log/error.log /var/www/clients/client0/web12/log/error.log /var/www/clients/client0/web23/log/error.log /var/www/clients/client0/web35/log/error.log /var/www/clients/client0/web73/log/error.log /var/www/clients/client0/web8/log/error.log /var/www/clients/client0/web62/log/error.log /var/www/clients/client0/web31/log/error.log /var/www/clients/client0/web67/log/error.log /var/www/clients/client0/web46/log/error.log /var/www/clients/client0/web32/log/error.log
`- Actions
   |- Currently banned: 26
   |- Total banned:     26
   `- Banned IP list:   102.208.164.150 103.148.23.225 154.255.118.195 177.192.199.144 179.106.81.176 185.244.153.128 186.224.30.81 187.74.225.19 189.90.28.210 190.130.142.14 2.213.102.207 216.73.216.101 2400:9700:103:69c5:2197:66b1:22db:c9cf 2600:1700:c165:7c00:bc0c:102a:538a:bd3 2804:14d:4cde:53be:d47c:b718:7b29:67ac 41.143.157.183 45.162.126.188 45.180.51.16 45.19.53.191 47.205.44.108 49.36.168.211 5.9.120.88 50.219.171.129 52.167.144.202 62.49.115.25 73.182.239.193

Wie Ihr seht klappt das auch mit IPv6 Adressen.


Adressen wieder entbannen

Alle:

fail2ban-client reload --unban apache-basedir

Bestimmte IP:

fail2ban-client set apache-basedir unbanip 80.153.150.156



Nachtrag

Die open_basedir Fehlermeldung wurde durch MediaWiki erzeugt weil dieses tatsächlich einige Shell befehle ausführen würde, z.B. diff oder imagemagick.
Trotzdem habe ich das hier mal als Beispiel für die Zukunft beibehalten.


Kommentare

Loading comments...