Czy apache jest dostępny tylko przez 127.0.0.1, czy to możliwe?

19

Skonfigurowałem mój serwer Apache, a PHP / MySQL działa dobrze!

Ale problem polega na tym, jak mam zachować prywatność, ponieważ jest to serwer tylko dla programistów ? Jedynym powodem, dla którego treść jest prywatna, jest błąd skryptu, nie chcę, aby pojawiały się błędy Apache, jeśli stał się witryną publiczną (i faktem, że inni również korzystają z tej samej sieci!), A ja jestem mniej prawdopodobnie użyję mojego komputera jako hosta - bardziej prawdopodobne jest, że zejdę na dół, używając trasy dostawcy hostingu dla prawdziwej witryny na żywo.

Obecnie mogę uzyskać do niego dostęp na trzy sposoby:

  • http: // localhost (lub http://127.0.0.1 , alternatywny sposób i adres IP hosta lokalnego, ale oba sposoby są dla mnie dopuszczalne!)

  • http 192.168.0.1 (adres IP mojego routera)

  • http pc-name-here (nazwa mojego komputera, oczywiście różni się w zależności od komputera z systemem Windows!)

[uwaga, nie można publikować linków, więc dla dwóch pozostałych trzeba wstawić ukośnik / ukośnik jak w pierwszym].

Chcę jednak uzyskać do niego dostęp tylko za pośrednictwem pierwszego. Nasłuchuje na porcie 80 (i nie chcę tego zmieniać). Czy to nie jest możliwe, czy się mylę? Wiem trochę więcej o PHP / webdesign niż w sieci, więc jest to dla mnie pierwszy raz!

Zasadniczo chcę, aby był dostępny tylko przez localhost na tym komputerze, a nie zewnętrzny adres IP lub 192.168.0.1.

Czy musiałbym edytować httpd.conf i używać odmowy na każdej stronie testbed, czy jest jakieś inne rozwiązanie?

Przykład:

<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>
  • to przykład, ale nie jestem pewien, co jest dobre, a co złe!

Mój system operacyjny to Windows 7 Ultimate.

Rozejrzałem się po siatce, ale niektóre z nich wydawały mi się trochę techniczne.

Co byś polecił?

linthurst53
źródło

Odpowiedzi:

34

Najłatwiej to zrobić poprzez Listendyrektywę. Domyślnie w naszym httpd.conf znajduje się wiersz o treści:

Listen *:80

Oznacza to, że będzie odpowiadać na żądania ro na porcie 80 na wszystkich adresach sieciowych komputera. Zmiana na:

Listen 127.0.0.1:80

Powie apache, aby odpowiadał tylko na żądania lokalnego adaptera, ignorując w ten sposób wszystko inne.

SmallClanger
źródło
12

Opcja Listen jest prawdopodobnie najlepsza, ale tak jak w przypadku FYI, możesz to zrobić za pomocą opcji allow / deny w ten sposób

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

Order deny,allowmówi Apache, aby „Odrzuć wszystkie żądania, chyba że wyraźnie dozwolone” ( Order allow,denyodwrotnie, IE zezwala na wszystkie żądania, chyba że specjalnie zablokowane)
Deny from allrobi coś podobnego do Order deny,allowtego, że blokuje wszystkie żądania ze wszystkich adresów IP, chyba że je specjalnie otworzysz. To wydaje się być powszechną praktyką w użyciu zarówno Order deny,allowa Deny from all, ale nie jestem w 100% pewien, dlaczego, gdy oba robią to samo
Allow from 127.0.0.1mówi „Zezwól wszystkie żądania od 127.0.0.1”. 127.0.0.1 zamapuje na localhost, więc możesz użyć http://127.0.0.1/ lub http: // localhost / i będzie to dozwolone

Spowoduje to wyświetlenie błędu 403 (Zabronione) każdemu, kto zażąda numeru witryny na hoście lokalnym

Kilka innych przydatnych rzeczy;
Allow from 192.168.0.zezwoli na żądanie od dowolnej osoby w twojej sieci (pod warunkiem, że twoja sieć to 192.168.0.0-192.168.0.255)
Zezwalaj / odmawiaj reguły są przetwarzane w kolejności, więc

Deny from 192.168.0.2
Allow from 192.168.0.2

zezwala na wnioski i

Allow from 192.168.0.2
Deny from 192.168.0.2

odrzuciłby żądania z 192.168.0.2

Więc

Deny from 192.168.0.2
Allow from all

Pozwoliłby na żądania z 192.168.0.2, nawet jeśli zostało to szczególnie odrzucone.

Możesz także użyć reguł Zezwól / Odrzuć w plikach .htaccess lub dla poszczególnych katalogów

Plama
źródło
Oprócz tego jest to: „Odmowa zamówienia, zezwolenie”, a nie „Zamów, zezwolenie, odmowa”. Częsty drobny błąd, który ludzie ciągle popełniają.
Scott Chu,
3

Wprowadziłem zmiany do ports.conf w / etc / apache2, tak aby każde odwołanie do Listen to the port nasłuchiwało tylko na localhost. Wydaje się, że żadne inne pliki nie mają polecenia nasłuchiwania. Po ponownym uruchomieniu apache te zmiany wydawały się mieć pożądany efekt.

/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
źródło