logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Przekierowanie portu na konkretny plik php w /var/www/html

dudinr1 16 Wrz 2020 01:18 1122 11
REKLAMA
  • #1 18925671
    dudinr1
    Poziom 10  
    Posty: 78
    Ocena: 7
    Dzień dobry,
    kontrolując GPIO w mojej malince steruję pilotem do bramy.
    Wszystko działa w sieci lokalnej, działa też po VPN, gdy wchodzę na adres mojej sieci i wskazuję plik php w którym jest kod.
    Przykładowo 192.168.1.1/brama.php, sam plik brama.php jest w /var/www/html.

    Chciałbym móc ten plik wskazać z wykorzystaniem przekierowania portu na moim domowym routerze abym mógł z zewnątrz się do tego konkretnego pliku dobrać.

    Przekierowując port mogę wskazać na IP malinki i konkretny port, proszę o podpowiedź jak mogę wskazać na ten konkretny plik php aby móc uruchamiać zawarty w nim kod poza siecią lokalną i bez wykorzystania VPN.

    Pozdrawiam
  • REKLAMA
  • #2 18925699
    Tommy82
    Poziom 41  
    Posty: 12141
    Pomógł: 455
    Ocena: 1073
    Jak dobrze rozumiem to
    Odpalić instancje apache na w/w porcie a plik nazwać index.php, wtedy wywołanie ip:port powinno załadować stronę domyślną tej instancji apapche.
  • #3 18925957
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1463
    Powiem to samo co @Tommy82 tylko inaczej.

    Port to dostaje cały serwer od systemu operacyjnego, i jest przyznany dla wszystkich jego aplikacji (czyli wszystkich plików php na przykład).
    Jak powołasz drugiego Apacha na innym porcie, optymalne będzie wskazać mu inną ścieżkę do plików.

    Skoro o portach mowa, przy pracy zewnętrznej zainteresuj się szyfrowaniem czyli https, dlaczego masz ryzykować, że ktoś to wysnifuje.
    Przy okazji masz szansę używania wewnątrz na nieszyfrowanym http, port np 80, a firewala otworzyć na https port np 443 *)
    Tradycyjna/typowa konfiguracja Apacha powołuje dwa porty serwujące typowo tę samą zawartość - nie mam na poczekaniu pomysłu jak "dezaktywować" niechciane skrypty php
    Wypowiadam się mając doświadczenia z Apache Tomcat, javowskim serwerem http, zwykłego Apacha pamiętam o tyle o ile.

    *) Jak czasem to robię, wybieram przekierowanie na inny port zewnętrzny, żeby dzieciaki nie próbowali niepotrzebnie
  • REKLAMA
  • #4 18925984
    Tommy82
    Poziom 41  
    Posty: 12141
    Pomógł: 455
    Ocena: 1073
    Jeszcze pytanie uzupełniające czemu przez port a nie przez subdomenę?
    Wtedy domena prowadzi Ci na konkretny katalog a tam zarządzasz poprzez .httaccess dostępem.
  • #5 18925992
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1463
    Tommy82 napisał:
    Jeszcze pytanie uzupełniające czemu przez port a nie przez subdomenę?
    Wtedy domena prowadzi Ci na konkretny katalog a tam zarządzasz poprzez .httaccess dostępem.


    Moje domniemanie:
    domena nie jest kategorią dającą się ustawić na firewalu (pomijam routery korporacyjne)

    Potwierdzisz lub zaprzeczysz:
    Przez .httaccess da się odróżnić ruch http od https ?
  • REKLAMA
  • #6 18925997
    dudinr1
    Poziom 10  
    Posty: 78
    Ocena: 7
    Dziękuję za nakierowanie.
    Skonfigurowałem Apache, włączyłem nasłuch na dwóch portach (jeden dla otwierania całej bramy, drugi do jednego skrzydła, są to osobne pliki php) i to działa. Mieliśmy duży problem z sąsiadami ponieważ nasze pilociki po prostu miały za mały zasięg i trzeba było kawał iść żeby komuś otworzyć.

    Jednak @JacekCz wspomniał o bezpieczeństwie, które też dla mnie jest istotne. Dwa otwarte porty, http, kod wykonywany bez autoryzacji... spać by mi to nie dało, choć to tylko brama.

    Póki co nadałem sąsiadom dostępy po VPN do Vlan'a, którego wydzieliłem w swojej sieci i będę czytał dalej jak można to ograć. Szczerze to jestem zafascynowany możliwościami o jakich przeczytałem w jedną noc szukając odpowiedzi na to pytanie.

    W B4A napisałem prostą aplikacyjkę, która w chwili wciśnięcia guzika do otwarcia bramy prosi o wpisanie pinu, jak pin się zgadza to łączy z OpenVPN, pinguje stronę, kod się wykonuje brama otwiera, a następnie rozłącza tunel VPN. Nie jest to idealne, jednak na taki kompromis mogę pójść do czasu zgłębienia tematu i upewnienia się, że o wszystkim w kontekście bezpieczeństwa pomyślałem.

    Ponownie dziękuję Wam Panowie za naprowadzenie mnie na rozwiązanie, choć wybrałem inne (póki co) niż mogłoby wskazywać pytanie z tematu.

    Pozdrawiam.
  • #7 18926003
    Tommy82
    Poziom 41  
    Posty: 12141
    Pomógł: 455
    Ocena: 1073
    @JacekCz
    Ta da się możesz wykorzystać .httacess do przekierowania na https całego ruchu na przykład.
  • #8 18926044
    dudinr1
    Poziom 10  
    Posty: 78
    Ocena: 7
    Pisząc swojego posta, nie widziałem jeszcze "pytania uzupełniającego", czyli "czemu przez port a nie przez subdomenę".

    Jeśli pytałeś w kontekście routera.
    Ponieważ, na routerze mogę jedynie przekierować port zdalny wskazując na port (oraz ip) lokalny, nie mam możliwości wskazanie subdomeny/folderu/pliku/całej ścieżki.

    Napisałem w dużym skrócie myślowym. To w kontekście routera, choć pewnie nie to mieliście na myśli, lecz już zostawię powyższy akapit.

    Jeśli pytałeś w kontekście serwera Apache na malince.
    Nie pomyślałem o tym lub nie wiedziałem że jest taka możliwość.
    Brzmi rozsądnie, mniej otwartych portów, mniej rozproszonej konfiguracji, wszystko w ramach .httaccess, poczytam i spróbuję takiej konfiguracji, póki co rozumiem zamysł, aby go zrealizować jeszcze będę musiał zgłębić temat.

    Wojtek

    Dodano po 8 [godziny] 21 [minuty]:

    Przepraszam za post pod postem, pozwoliłem sobie na taki zabieg ponieważ chcę klarownie przedstawić rozwiązanie jakie zastosowałem. Dziękuję @Tommy82 oraz @JacekCz za uczestniczenie w rozmowie i naprowadzenie mnie na rozwiązanie.

    Zagadnienie:
    "Przekierowanie portu na konkretny plik php w /var/www/html"

    Jak najbardziej można przekierować port tak, aby uzyskać "z zewnątrz" dostęp do konkretnego pliku za NAT'em w sieci lokalnej, bez VPN itp.

    1. Na malince instalujemy i uruchamiamy serwer Apache, aby przedstawić koncept może być konfiguracja domyślna:
    Link

    Dodajemy do serwera obsługę PHP, to opcjonalnie, jak to zrobić jest w powyższym linku.

    2. Apache domyślnie ma adres lokalny malinki z portem 80, przykładowo 192.168.1.19:80 i pod tym adresem zobaczymy stronę testową jeśli wpiszemy go w przeglądarce lokalnie.

    3. Na routerze ustanawiamy przekierowanie z sieci publicznej na nasz serwer Apache.
    Przykładowo [adres publiczny]:9999 na 192.168.1.19:80 i z sieci publicznej widzimy stronę testową.

    Po DDNS oczywiście też działa.

    4. I teraz jak w katalogu /var/www/html mamy przykładowo trzy pliki "index.php/index.html", "test1.php", "test2.php" to wpisując [adres publiczny]:9999 domyślnie wejdziemy na stronę testową, czyli index.*.
    Jednak jak wpiszemy [adres publiczny]:9999/test1.php lub [adres publiczny]:9999/test2.php to dostaniemy się do konkretnego pliku.

    5. Dodatkowo, jak w URL dodamy parametr na przykład [adres publiczny]:9999/test1.php?id=2 to kodem:
    Kod: PHP
    Zaloguj się, aby zobaczyć kod

    to możemy taki parametr przechwycić i użyć jako zmiennej.

    Przykład dodatkowych możliwości, jak ja to rozegrałem.
    Instalując wiredpi mogę bezpośrednio z PHP sterować GPIO malinki.
    Parametry w URL pozwalają mi w ramach jednego pliku sterować wszystkimi pinami.
    Z wykorzystaniem parametrów napisałem szyfrowanie oparte na haśle użytkownika i dacie aby nawet posiadając url utrudnione było "bawienie się bramą", dodatkowo w aplikacji na androida aby wykonać akcję należy użyć zabezpieczenia jakie ma się na telefonie (wzór, pin, palec, itp) bez zdefiniowanego zabezpieczenia nie zadziała. Ponownie ma to przeciwdziałać "bawieniu się bramą" jak na przykład dzieciak dobierze się do telefonu.
    Z parametrami mogę logować kto i kiedy bramę otwierał itp. oraz mieć kontrolkę nad nadawanymi dostępami w oderwaniu od użytkowników w ramach rpi.

    Fajnie wyszło. Docelowo rozegram to po https.
    Prawdopodobnie to co teraz napisałem dla znawców jest oczywiste, jednak ja w temacie jestem od dwóch dni, zostawiłem dla siebie i dla potomnych, teraz wydaje się to w miarę proste jednak punktu zaczepienia szukałem długo, mam nadzieję że ten post dla kogoś takim "zaczepieniem" w przyszłości może być.

    Pozdrawiam,
    Wojtek
  • Pomocny post
    #9 18927109
    Tommy82
    Poziom 41  
    Posty: 12141
    Pomógł: 455
    Ocena: 1073
    Jak masz dyndns i skonfigurujesz przekierowanie portu to wywołanie get na domenę i numer portu powinno się forwardować. I jak będzie prawidło skonfigurowany apache.
    Raczej użył bym metody POST bo nie przesyłasz jawnie w linku parametrów i nie ogranicza Cie maksymalna długość url.

    I przydatne do debugowania
    https://stackoverflow.com/questions/15772355/how-to-send-an-http-request-using-telnet
  • REKLAMA
  • Pomocny post
    #10 18928366
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1463
    Tommy82 napisał:
    Raczej użył bym metody POST bo nie przesyłasz jawnie w linku parametrów i nie ogranicza Cie maksymalna długość url.


    Oraz ogólnie "bo tak jest porządnie", na przykład GET może być cachowany, powtórzony jak przeglądarka myśli, że się nie udało etc itd...
    Przez GET robimy odczyty (zgodnie z nazwą zresztą) , zmiany przez POST i inne, o czym można dłużej specjalistycznie rozmawiać.
  • #11 18934783
    dudinr1
    Poziom 10  
    Posty: 78
    Ocena: 7
    Zorganizowałem całość z użyciem metody POST.
    Jest hash'owanie haseł, zrobiłem logowanie do bazy danych kto i kiedy "otwierał bramę", aplikacja na androida działa.
    Także z tej strony myślę, że technicznie jest to ogarnięte na tyle, że działa płynnie i zgodnie z oczekiwaniami.

    Od strony bezpieczeństwa mam wątpliwości.
    Mianowicie, w katalogu /var/www/html mam katalogi i strony, do których jak ktoś zna adres to może się dostać.
    I to co było pierwotnie celem mojego pytania, stało się źródłem obawy.

    Czy jest duże ryzyko/możliwość zdobycia listy tych folderów/plików przez osoby postronne?
    Czy można wskazać aby tylko dany folder Apache "udostępniał" po przekierowaniu?

    Tu pytam bardziej w kontekście zdobycia wiedzy niż konkretnych obaw, jak mogę prosić to wskażcie mi jakieś materiały czy zagadnienia, doczytam i z chęcią dowiem się sam.

Podsumowanie tematu

✨ Użytkownik poszukiwał sposobu na przekierowanie portu na konkretny plik PHP na Raspberry Pi, aby uzyskać dostęp do niego z zewnątrz bez użycia VPN. Odpowiedzi sugerowały uruchomienie instancji Apache na różnych portach oraz wykorzystanie pliku index.php jako domyślnego. Zwrócono uwagę na kwestie bezpieczeństwa, takie jak szyfrowanie HTTPS oraz ograniczenie dostępu do plików za pomocą .htaccess. Użytkownik skonfigurował Apache, włączył nasłuch na dwóch portach i zaimplementował metodę POST do komunikacji, co poprawiło bezpieczeństwo. Pojawiły się również pytania o możliwość ograniczenia dostępu do folderów w /var/www/html oraz wyłączenie listingów katalogów.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA