W tym artykule pokażemy, jak korzystać z wbudowanego serwera Windows OpenSSH przekierowanie portów przez tunel SSH (Tunelowanie SSH). Przekazywanie portów w SSH umożliwia tunelowanie (przekazywanie) portów aplikacji z komputera lokalnego na zdalny serwer i odwrotnie. Wcześniej przekierowanie portów przez tunel SSH było używane tylko w środowisku Linux / Unix, ale teraz możesz korzystać z tych funkcji również w systemie Windows. Spójrzmy na praktyczny przykład przekazywania połączenia RDP na serwerze Windows przez serwer SSH z otwartym portem TCP 22.
Najczęściej przekierowanie portów przez SSH jest używane w scenariuszach, gdy trzeba połączyć się ze zdalnym komputerem chronionym przez zaporę ogniową. Na przykład masz serwer z systemem Windows, na którym otwarty jest tylko port SSH (TCP 22). Wszystkie pozostałe porty są blokowane przez zaporę sprzętową lub zaporę systemu Windows. Twoim zadaniem jest połączenie się z pulpitem tego serwera Windows za pomocą klienta RDP. To wydawałoby się zadaniem niemożliwym, ponieważ RDP 3389 jest blokowany przez zaporę ogniową. Można jednak użyć technologii przekierowania portów przez tunel ssh..
Najczęściej używane są następujące skrypty przekazywania SSH:
- Lokalne przekazywanie TCP - przekierować port lokalny na zdalny serwer;
- Zdalne przekazywanie TCP - przekieruj port zdalny na komputer lokalny;
- Podwójny tunel SSH - pozwala łączyć komputery przez serwer SSH bez dedykowanych białych adresów IP lub znajdujących się za NAT (jeśli rozwiązanie z OpenVPN nie pasuje)
Dostęp RDP przez tunel SSH (lokalne przekazywanie TCP)
W tym trybie tworzony jest lokalny port TCP na komputerze, do którego połączenia są przekierowywane przez tunel SSH do określonego portu na zdalnym serwerze. W tym przykładzie utworzymy port lokalny 8888, po podłączeniu, do którego następuje przekierowanie z tego portu do portu RDP 3389 komputer zdalny. Ogólny schemat połączeń wygląda następująco:
Aby utworzyć tunel SSH przy użyciu wbudowanego klienta SSH (wbudowanego w Windows 10 1809 i Windows Server 2019), uruchom polecenie:
ssh -L 8888: 192.168.1.90: 3389 [email protected]
Teraz, aby połączyć się ze zdalnym komputerem przez tunel SSH, musisz podłączyć klienta RDP mstsc.exe do lokalnego portu 8888 twojego komputera:
127.0.0.1:8888
Zaloguj się do komputera zdalnego i możesz bezpiecznie pracować w sesji RDP, pamiętając, że port 3389 jest nadal zamknięty w zaporze. Za pomocą TCPView można sprawdzić, czy połączenie RDP jest ustanawiane lokalnie (połączenie RDP jest inicjowane przez lokalnie działający serwer SSH).
Pamiętaj, że jeśli przekierujesz w ten sposób niezaszyfrowany ruch aplikacji, jest on przesyłany w postaci zaszyfrowanej przez sieć. Ruch w przypadku czoła jest szyfrowany na jednym końcu połączenia SSH i odszyfrowywany na drugim.
W tym trybie inne komputery w sieci lokalnej będą mogły również łączyć się ze zdalnym serwerem RDP, nawet jeśli całkowicie zablokowały bezpośredni dostęp do zdalnego serwera (zarówno przez SSH, jak i RDP). Aby to zrobić, muszą podłączyć klienta RDP do portu 8888 na komputerze, na którym tworzony jest tunel SSH:
mstsc.exe / v 10.10.1.220:8888
Transfer zdalnego portu na komputer lokalny (zdalne przekazywanie TCP)
Istnieje inny przypadek użycia tunelu SSH - zdalne przekazywanie TCP. Poprzez tunel SSH możesz zezwolić na zdalny dostęp serwera do portu lokalnego na twoim komputerze lub portu na innym komputerze w sieci lokalnej. Na przykład chcesz, aby zewnętrzny serwer (192.168.1.90) miał dostęp do Twojej witryny intranetowej (nie opublikowany w Internecie). Aby utworzyć tunel zwrotny, użyj tego polecenia:
ssh -R 8080: serwer wewnętrzny: 80 uż[email protected]
Teraz, aby uzyskać dostęp do wewnętrznego serwera WWW na zdalnym serwerze SSH, wystarczy wpisać adres w przeglądarce http: // localhost: 8080
.
netsh interface portproxy
.Dzięki tunelom SSH możesz budować całe łańcuchy do przekierowania portów. Możesz włączyć lub wyłączyć tunelowanie SSH w pliku konfiguracyjnym sshd_config dyrektywy:
AllowStreamLocalForwarding tak
AllowTcpForwarding zdalny