Wie Webserver über direkte IP sperren?

3 Antworten

Ich gehe davon aus, dass Du Apache verwendest. Es gibt mehrere Ansätze, um so etwas zu lösen.

Im Apache kannst Du sogenannte Virtual Hosts einrichten. Die Konfigurationsdateien dafür liegen unter /etc/apache2/sites-available.

Wenn Du keinen Virtual Host eingerichtet hast, wird die Datei 000-default.conf und default-ssl.conf verwendet. Diese Dateien sind vorinstalliert. Du findest dort die Zeilen DocumentRoot. Trage dort in beiden Dateien einen Pfad ein, wo eine leere HTML-Seite zu finden ist. Anschließend kopierst Du die Dateien:

cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/name.conf
cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/name-ssl.conf

name.conf und name-ssl.conf sind Beispiele, benenne die Dateien sinnvoll. Trage in beiden Dateien als DocumentRoot den Pfad zu Deinen HTML-Dateien ein. Füge eine weitere Zeile ein:

ServerName name.local

name.local ist ebenfalls ein Beispiel/Platzhalter. Trage hier den Namen ein, mit dem der Server aufgerufen wird. Die Konfiguration muss nun aktiviert und neu eingelesen werden:

a2ensite name name-ssl
systemctl reload apache2

Erläuterung des Ganzen: Wenn Du http://name.local aufrufst, wird der vHost name.conf verwendet und die unter DocumentRoot angegebene Datei angezeigt. Wenn Du https://name.local aufrufst, wird der vHost name-ssl.conf angezeigt.

Wenn jedoch irgend etwas anderes, z. B. die IP-Adresse aufgerufen wird, wird der vHost 000-default.conf bzw. bei https default-ssl.conf verwendet, es wird die leere Datei aufgerufen.

Variante 2: Im vHost (z. B. 000-default.conf und default-ssl.conf) fügst Du direkt ein Verbot ein:

<VirtualHost *:80>
 <Location />
  <RequireAll>
    Require all granted
    Require not ip 127.0.0.1
    Require not ip 192.168.1.20
  </RequireAll>
 </Location>
</VirtualHOst>

Die erste und die letzte Zeile sind bereits vorhanden, ich habe sie nur zur Orientierung hingeschrieben. In der default-ssl.conf steht natürlich *:443, das muss so bleiben. Die IP-Adressen passt Du sinngemäß an Deine Verhältnisse an. Ruft man den Server nun mit einer der aufgeführten IP-Adresse auf, erhält man eine Fehlermeldung "Forbidden (403)". Wenn Du das nicht möchtest, musst Du den Server so konfigurieren, dass beim Fehler 403 eine leere Seite (oder eine "vernünftige" Fehlermeldung angezeigt wird.

Variante 3: Du verwendest das Modul rewrite. Das muss zunächst aktiviert werden.

sudo a2enmod rewrite
<VirtualHost *:80>
    <IfModule mod_rewrite.c>
        RewriteEngine On
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTP_HOST} ^192\.168\.1\.20.*$ [OR]
        RewriteCond %{HTTP_HOST} ^127\.0\.0\.1.*$
        RewriteRule ^ /Pfad/zur/leeren/Seite.html
    </IfModule>
</VirtualHost>

Auch hier: Die erste und die letzte Zeile sind bereits vorhanden, ich habe sie nur der Orientierung wegen aufgeschrieben. Die erste IP-Adresse musst Du anpassen. Achte auf die Schreibweise der regulären Ausdrücke. Möchtest Du weiter IP-Adressen verbieten, kannst Du weitere Zeilen RewriteCond unterhalb von RewriteEngine On einfügen. Vergiss nicht das [OR] am Ende einer jeden Zeile. Den Pfad zur leeren Seite musst Du natürlich auch anpassen.

Einfache Antwort:

Indem Du den httpd richtig konfigurierst. (No shit sherlock ...)

Weniger einfache:

Wie ist denn Dein bisheriges Setup?

Ich würde das vermutlich so gestalten:

Eigener VHOST für Next, Du gibst die Namen und Ports an, über die dieser VHOST erreichbar ist. der Normale vhost (Catchall) liefert dann eine Standardseite oder nen Forbidden oder ähnliches oder wird gleich ganz deaktiviert.

<VirtualHost *:80>
    ServerName xxx.xxx.xxx.xxx
    Redirect 403 /
</VirtualHost>

Das wäre für HTTP. Für HTTPS 443 statt 80.

Bei xxx.xxx.xxx.xxx trägst du deine IP Adresse ein

Woher ich das weiß:Berufserfahrung – arbeite seit vielen Jahren in der IT
prONICIALY 
Fragesteller
 05.05.2022, 23:42

Ich habe es versucht, allerdings geht das nicht so ganz. Wo muss ich das denn einfügen? Bei 000-default.conf kann ich es nicht ändern, weil dort als "ServerName localhost" steht. Schreibe ich statt localhost was anderes, funktioniert der Webserver nicht mehr. Bei nextcloud.conf ist dann die Cloud nicht mehr erreichbar. Ich habe eine neue config-Datei erstellt mit Port 80, da gabs aber auch keine Änderung

0
TechPech1984  05.05.2022, 23:53
@prONICIALY

es muss vor dem eintrag mit localhost , einfach dazu machen . es ist nur ein service es in jeweils eine datei zu packen . den das erste was gefunden wird, wird genommen .

0
TechPech1984  05.05.2022, 23:58
@prONICIALY

also vor heist wirklich

<VirtualHost *:80>
    ServerName xxx.xxx.xxx.xxx
    Redirect 403 /
</VirtualHost>
<VirtualHost *:80>
    ServerName deine.domain.de
.
# bzw vor localhost 

wenn du da nicht mit namen arbeitest , bzw poste die config mal , dann hast du ein generelles problem. dann solltest du wenn mal testen ob du ein config test erfolgreich überstehst . leider hab ich gerade keine nextcloud installiert um mir anzugucken wie es eingerichtet wurde .

0
prONICIALY 
Fragesteller
 06.05.2022, 00:05
@TechPech1984

Alles klar, danke. Meine aktuelle config lautet so ohne Änderungen. Das hier ist 000-default.conf


<VirtualHost *:80>
ServerName localhost
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
0