Potrzebuję rozwiązania odwrotnego proxy dla SSH

10

Cześć, oto sytuacja Mam serwer w korporacyjnym centrum danych dla projektu. Mam dostęp SSH do tej maszyny na porcie 22. Istnieją pewne maszyny wirtualne działające na tym serwerze, a następnie z tyłu każdej rzeczy działa wiele innych systemów operacyjnych. Teraz, ponieważ jestem za zaporą centrów danych, mój przełożony zapytał mnie, czy mogę coś zrobić, dzięki czemu mogę dać wielu osobom dostęp do Internetu bezpośrednio do tych maszyn wirtualnych. Wiem, że jeśli pozwolono mi uzyskać ruch na porcie innym niż 22, mogę wykonać przekierowanie portów. Ale ponieważ nie wolno mi tego, co może być rozwiązaniem w tym przypadku. Ludzie, którzy chcieliby się połączyć, mogą być kompletnymi idiotami, którzy mogą być szczęśliwi, otwierając szpachlę na swoich komputerach, a nawet Filezillę.

Nie mam firewalla w moich rękach ani żadnego portu innego niż 22 otwarty i w rzeczywistości nawet jeśli poproszę, że nie pozwolą na otwarcie. 2 razy SSH nie jest czymś, czego chce mój przełożony.

Więź
źródło
1
powiązane pytanie z innym doskonałym rozwiązaniem: serverfault.com/questions/361794/…
Kaii
SSH Reverse Proxy github.com/tg123/sshpiper
farmer1992
sshpiperd działa świetnie!
Király István

Odpowiedzi:

5

Powinieneś otworzyć tunel ssh z komputera na serwer w centrum danych. Nazwijmy to jako „server1”. Jeśli używasz openssh, możesz po prostu uruchomić

ssh -L0.0.0.0:8080:localhost:8080 you_username@server1

Spowoduje to otwarcie połączenia z komputera przez port 8080 do serwera, port 8080, pomijając zaporę pomiędzy nimi. Zakładając, że twój apache nasłuchuje na porcie 8080. Format przekierowania portów nasłuchuje IP: port lokalny: adres zdalny: port zdalny. Oczywiście w przypadku pojedynczego serwera można również użyć

ssh -L0.0.0.0:8080:remote_server_address:8080 you_username@server1

Należy pamiętać, że parametr localhost w parametrze -L odnosi się do server1. Innymi słowy, serwer widzi połączenia przychodzące z hosta lokalnego, podczas gdy w rzeczywistości przychodzą one z twojego komputera przez połączenie ssh.

Potrzebujesz również parametru

AllowTcpForwarding yes

w konfiguracji ssh serwera (zazwyczaj / etc / ssh / sshd_config).

Następnie inni mogą połączyć się z komputerem na porcie 8080, aby uzyskać połączenie za pośrednictwem Apache Reverse Proxy. Jeśli potrzebujesz ogólnego proxy (aby użytkownicy mogli wybrać adres, a nie tylko konkretne adresy w konfiguracji Apache), powinieneś zainstalować squid na serwerze server1 i użyć tunelu ssh do portu squid.

Olli
źródło
Chcesz powiedzieć, kiedy to zrobię, ssh -L0.0.0.0:8080:localhost:8080 you_username@server1 czy połączenie będzie nadal przechodzić przez port 22 zapory (ponieważ jeśli tak się nie stanie, nie mogę nic zrobić), a tunel ssh zostanie ustanowiony między maszyną lokalną a maszyną zdalną na określonych portach, ale cały ruch byłby kontynuowany (port 22) w zaporze.
Bond
Po uruchomieniu tunelu ssh ten ruch (z portu 8080 do portu 8080) przechodzi do połączenia ssh przy użyciu portu 22. Zapora ogniowa widzi ruch do portu 22, a nie 8080.
Olli
Kiedy ssh -L0.0.0.0:8080:remote_server_address:8080 you_username@server1 wydasz to polecenie , chcę wiedzieć, co można ustawić jako adres_zdalny_serwera, to adres IP komputera wewnętrznego, na którym chcę używać server1 jako pośredniego. Czy zrozumiałem to poprawnie?
Bond
Bond: tak, zgadza się. Możesz także określić wiele tuneli -L (oczywiście z różnymi portami źródłowymi), aby otwierać połączenia z wieloma komputerami wewnętrznymi. Na przykład „-L0.0.0.0: 8080: serwer_zdalny1: 80 -L0.0.0.0: 8081: serwer_zdalny2: 80 -L0.0.0.0: 8082: serwer_zdalny2: 22” (bez cudzysłowów).
Olli
Wykonanie tej solidnej operacji wymagałoby ustawienia serwera działającego jako odbicia poza centrum danych i wpuszczania ruchu. Oczywiście tunel ssh jest w porządku jako rozwiązanie tymczasowe, ale w przypadku czegoś produkcyjnego radziłbym zainstalować prawdziwy odwrotny serwer proxy na odbicia i dostosuj ustawienie zapory, aby zezwalać na połączenia 8080 tylko z tego odbicia. To powiedziawszy, mądrzej jest umieścić zwrotny serwer proxy jako jedną z maszyn wirtualnych w DC. Aby połączenie było zabezpieczone za pomocą protokołu SSL tylko na tym komputerze.
jmary
0

Być może możesz użyć czegoś takiego jak SshMeIn . Jest to system webowy typu open source, który sprawi, że tunel ssh przejdzie przez zapory ogniowe, nawet nie musisz otwierać portów.

Belug
źródło