Zezwalanie na dostęp do wirtualnego hosta Apache tylko z sieci lokalnej

19

Mam stronę internetową na serwerze Linux, którym administruję, z uruchomionym Apache 2.2. Ten serwer jest widoczny dla świata zewnętrznego w przypadku niektórych innych usług.

Chciałbym skonfigurować Apache tak, aby dany wirtualny host był widoczny tylko z sieci lokalnej, dzięki czemu mogę wdrożyć aplikację internetową, aby uzyskać informacje zwrotne od innych osób w mojej organizacji. Sądzę, że ma to związek z dyrektywą Allow, ale moje eksperymenty nie idą dobrze.

Jak mogę zmienić mój plik konfiguracyjny, aby to osiągnąć? Czy powinienem również zmienić konfigurację zapory?

Btz
źródło
Czy używasz prywatnego (nierutowalnego) adresu IP, takiego jak 10.0.0.100, czy publicznego (routowalnego) adresu IP dla swojego serwera?
closetnoc,
Serwer ma publiczny adres IP i mogę się z nim połączyć spoza sieci służbowej - na przykład z domu. Wszystkie komputery współpracowników mają lokalne adresy IP typu 10. *. *. *.
Btz

Odpowiedzi:

12

Łatwo. Wystarczy ustawić coś takiego w konfiguracji głównej lub konfiguracji wirtualnej:

<Directory /var/www/path/to/your/web/documents>

  Order Deny,Allow
  Deny from all
  Allow from 127.0.0.1 ::1
  Allow from localhost
  Allow from 192.168
  Allow from 10
  Satisfy Any

</Directory>

<Directory></Directory>Oświadczenie w zasadzie mówi „Użyj tych zasad do niczego w tym katalogu. I przez „ten katalog”, który odnosi się do tego, /var/www/path/to/your/web/documentsktóry ustawiłem w tym przykładzie, ale powinien zostać zmieniony, aby pasował do ścieżki katalogu lokalnego witryny.

Następnie w <Directory></Directory>obszarze zmieniasz domyślne zachowanie Apache, które domyślnie jest ustawione Allowna Order Deny,Allow. Następnie zaczynasz Deny from allod odmowy dostępu wszystkim. Poniżej znajdują się Allow frominstrukcje, które umożliwiają dostęp z 127.0.0.1 ::1(adres IP hosta lokalnego), localhost(sam host lokalny ). To wszystko standardowe rzeczy. Ponieważ dostęp localhostjest potrzebny do wielu wewnętrznych procesów systemowych.

Poniżej znajdują się rzeczy, które są dla Ciebie ważne.

Allow fromDla 192.168jak również 10pozwoli na dostęp z dowolnego / wszystkie adresy sieciowe w zakresie sieci, która jest poprzedzona przez tych liczb.

Wskazując, 192.168że w zasadzie oznacza to, czy użytkownik ma adres podobny do tego, 192.168.59.27czy 192.168.1.123będzie mógł zobaczyć stronę internetową.

I podobnie używając Allow fromdo 10zapewnia prefiksu, że jeśli ktoś ma adres IP 10.0.1.2lub nawet 10.90.2.3będą mogli zobaczyć zawartość.

Prawie wszystkie sieci wewnętrzne na świecie używają albo 192.168zasięgu, albo czegoś w tym 10zasięgu. Nic zewnętrznego. Tak więc użycie tej kombinacji pozwoli osiągnąć cel polegający na zablokowaniu dostępu do świata zewnętrznego, ale pozwoli na dostęp tylko z sieci lokalnej.

JakeGould
źródło
Co należy Satisfy Anyzrobić w tym przypadku? Nic o tym wszystkim nie wiem, ale kiedy było to obecne w moim scenariuszu, mogłem uzyskać dostęp do strony (z której korzystałem <Location /path>) z sieci zewnętrznej. Usunięcie go rozwiązało jednak moje problemy. Miło byłoby zrozumieć, dlaczego tak się dzieje, ponieważ obawiano się, że mogę uzyskać dostęp do strony, nawet przy obowiązujących zasadach.
liamnichols,
@liamnichols Jak wyjaśniono tutaj : „Zezwala na żądanie, jeśli spełnione są jakiekolwiek wymagania (uwierzytelnianie lub dostęp).”
JakeGould
14

Ludzie lądujący w tej odpowiedzi, pamiętaj, że jest to specyficzne dla Apache 2.2.

Apache 2.4 wycofał te dyrektywy.

Nowym sposobem jest użycie modułu mod_authz_hosti Requiredyrektyw. ( link )

W Apache 2.4 powinieneś to zrobić

<Directory /var/www/ncp-web/>
  Require host localhost
  Require ip 127.0.0.1
  Require ip 192.168
  Require ip 10
</Directory>

i usuń wszystkie dyrektywy zezwalające.

nachoparker
źródło
5

Dodaj tę sekcję do dyrektywy wirtualnego hosta:

<Location /mypathurl>
    Order deny,allow
    Deny from all
    Allow from 192.168.1.10
</Location>

Wymień swój adres IP powyżej. Nie należy tego wykorzystywać do zabezpieczenia na poziomie finansowym, FYI.

Chloe
źródło
-1

Nie wiem, jak masz konfigurację sieci, jednak zakładam, że spróbuję znaleźć lepszą odpowiedź.

Załóżmy, że masz małe biuro z połączeniem DSL. Miałbyś statyczny publiczny adres IP lub blok adresów przypisany do linii, modem DSL i zaporę ogniową. Bez wchodzenia w szczegóły, jak to się dzieje, przejdę do ważnej części.

Powinieneś używać NAT (translacja adresu sieciowego). Dzięki temu publiczne adresy IP mogą znajdować się po stronie WAN (Internet) sieci i korzystać z prywatnych adresów IP (takich jak 10.0.0.100) w sieci po stronie LAN. Jest to standardowa procedura działania. Jeśli hostujesz serwer sieciowy w swojej sieci, możesz użyć przekierowania portów lub innego podobnego mechanizmu), aby skierować ruch sieciowy na swój serwer WWW.

W tym standardowym scenariuszu wszystkie komputery wewnętrzne będą korzystać z prywatnych adresów IP.

Zakładając, że masz podobną standardową konfigurację sieci, zmienisz adres IP komputera z publicznego adresu IP na prywatny adres IP. Twoja sieć może mieć konfigurację DHCP, w której komputer może zażądać dostępnego adresu IP. Oznacza to, że zamiast określać adres IP, decydujesz się na użycie DHCP, a adres IP zostanie przypisany. Jeśli DHCP nie jest dostępny, należy sprawdzić inne komputery pod kątem prywatnej przestrzeni adresów IP, która może być użyta, i wybrać adres IP w przestrzeni, która nie jest używana. Możesz określić ten nieużywany adres IP w konfiguracji sieci. Powinno to uniemożliwić wyświetlanie twojego systemu w Internecie.

closetnoc
źródło
Myślałem o tym, ale nie jest to praktyczne rozwiązanie. Na tym komputerze są usługi, które muszą pozostać widoczne na zewnątrz, a w każdym razie planuję, aby aplikacja internetowa była widoczna za kilka dni - nie ma sensu rewolucjonizować układu sieci tylko przez kilka dni. Mogę jednak pracować nad konfiguracją Apache.
Btz
Jeśli masz zaporę, możesz zamknąć niektóre porty dla tego adresu IP.
closetnoc
Można użyć ustawień zapory, ale to naprawdę przesada. Apache ma wbudowaną funkcję odmowy lub zezwolenia na podstawie adresu IP i innych powiązanych kryteriów. Zobacz moją odpowiedź, aby uzyskać więcej informacji.
JakeGould,
@JakeGould Zapory ogniowe niekoniecznie są rozwiązaniem nadmiarowym. Znam Apache naprawdę dobrze. Istnieją jednak opcje filtrowania HTTP w większości dobrych zapór ogniowych, które pomagają bez obciążania samego serwera. Ponadto, chociaż Apache jest doskonały, nie jest bez winy. Ponadto dostępami do portów, w tym alternatywnymi dostępami do portów, można manipulować za pomocą zapory ogniowej, dzięki czemu niektóre usługi sieciowe pozostają publiczne, a inne są dostępne tylko w sieci LAN.
closetnoc