Apache nur über 127.0.0.1 zugänglich machen, ist das möglich?

19

Ich habe meinen Apache-Server eingerichtet und PHP / MySQL funktioniert gut!

Das Problem ist jedoch, wie ich das privat halte, da es sich nur um einen Entwicklungsserver handelt . Der einzige Grund, den Inhalt privat zu halten, ist, wenn ein Skript schief gelaufen ist. Ich möchte nicht, dass Apache-Fehler angezeigt werden, wenn es sich um eine öffentlich zugängliche Site handelt (und die Tatsache, dass sich auch andere das gleiche Netzwerk teilen!), Und ich bin weniger Wahrscheinlich wird mein PC als Webhost verwendet. Ich werde eher die Route des Webhosting-Anbieters für eine tatsächliche Live-Site verwenden.

Derzeit kann ich auf drei Arten darauf zugreifen:

  • http: // localhost (oder http://127.0.0.1 )

  • http 192.168.0.1 (IP meines Routers)

  • http pc-name-here (Name meines PCs, offensichtlich variiert dies zwischen Windows-PCs!)

[Hinweis, Links können nicht gepostet werden, für die anderen beiden müssen Sie den Doppelpunkt / Schrägstrich wie im ersten einfügen].

Ich möchte jedoch nur über die erste zugreifen. Es lauscht auf Port 80 (und das möchte ich nicht ändern). Ist das nicht möglich oder irre ich mich? Ich weiß ein bisschen mehr über PHP / Webdesign als über das Netzwerk, also ist dies eine Premiere für mich!

Grundsätzlich möchte ich, dass nur über localhost auf diesem Computer zugegriffen werden kann und nicht über die externe IP-Adresse oder 192.168.0.1.

Muss ich httpd.conf bearbeiten und deny auf jeder Testbed-Site verwenden, oder gibt es eine andere Lösung?

Beispiel:

<Directory /www/vhosts/localhost/>
    Options All
    AllowOverride All
    order allow,deny
    allow from 127.0.0.1
            deny from 192.168.0.1
            deny from my-pc-name
</Directory>
  • Das ist ein Beispiel, aber ich bin nicht sicher, was hier richtig oder falsch ist!

Mein Betriebssystem ist Windows 7 Ultimate.

Ich habe mich im Netz umgesehen, aber einiges davon schien mir ein bisschen technisch.

Was würdest du empfehlen?

linthurst53
quelle

Antworten:

34

Der einfachste Weg, dies zu tun, führt über die ListenRichtlinie. Standardmäßig enthält unsere httpd.conf folgende Zeile:

Listen *:80

Dies bedeutet, dass Ro-Anfragen an Port 80 auf allen Netzwerkadressen Ihres Computers beantwortet werden. Ändern Sie es auf:

Listen 127.0.0.1:80

Weist Apache an, nur auf Anforderungen auf dem lokalen Adapter zu antworten und alles andere zu ignorieren.

SmallClanger
quelle
12

Die Listen-Option ist wahrscheinlich die beste, aber genau wie ein FYI können Sie dies mit allow / deny tun

<Directory /www/vhosts/localhost/>
    Options All
    AllowOverride All
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Directory>

Order deny,allow„Verweigert alle Anforderungen , wenn nicht ausdrücklich erlaubt“ Apache erzählt ( Order allow,denydas Gegenteil, IE erlaubt alle Anfragen , sofern nicht ausdrücklich blockiert)
Deny from allhaben eine ähnliche Sache Order deny,allow, dass sie alle Anforderungen von allen IP - Adressen blockieren werden , wenn Sie speziell sie öffnen. Es scheint allgemeine Praxis zu sein, beide zu verwenden, Order deny,allowund Deny from allich bin mir nicht 100% sicher, warum, wenn beide dasselbe tun
Allow from 127.0.0.1, "Alle Anfragen von 127.0.0.1 zulassen". 127.0.0.1 wird localhost zugeordnet, sodass Sie http://127.0.0.1/ oder http: // localhost / verwenden können. Dies ist zulässig

Dies führt zu einem (verbotenen) 403-Fehler für alle, die die Site no auf localhost anfordern

Einige andere nützliche Dinge;
Allow from 192.168.0.erlaubt Anfragen von jedem in Ihrem Netzwerk (vorausgesetzt, Ihr Netzwerk ist 192.168.0.0-192.168.0.255)
Zulassen / Verweigern Regeln werden in dieser Reihenfolge verarbeitet

Deny from 192.168.0.2
Allow from 192.168.0.2

würde erlauben, Anfragen und

Allow from 192.168.0.2
Deny from 192.168.0.2

würde Anfragen von 192.168.0.2 ablehnen

So

Deny from 192.168.0.2
Allow from all

Ermöglicht Anforderungen von 192.168.0.2, obwohl dies ausdrücklich abgelehnt wurde.

Sie können Allow / Deny-Regeln auch in .htaccess-Dateien oder auf Verzeichnisbasis verwenden

Verschmieren
quelle
Außerdem ist es "Bestellung ablehnen, zulassen", nicht "Bestellung zulassen, ablehnen". Ein häufiger kleiner Fehler, den Menschen ständig machen.
Scott Chu
3

Ich habe Änderungen an ports.conf in / etc / apache2 vorgenommen, sodass jeder Verweis auf Auf einen Port hören nur localhost hörte. Keine anderen Dateien scheinen den Befehl listen zu haben. Nach dem Neustart von Apache schienen diese Änderungen den gewünschten Effekt zu haben.

/etc/apache2/ports.conf

NameVirtualHost *:80
########################## Listen 80
Listen 127.0.0.1:80

<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
###############################Listen 443
Listen 127.0.0.1:443
</IfModule>

<IfModule mod_gnutls.c>
##################################Listen 443
Listen 127.0.0.1:443
</IfModule>
Mathew Peet
quelle