Muszę uzyskać dostęp do SSH na komputerze A w porcie innym niż 22, ponieważ istnieją tylko standardowe porty, które umożliwiają dostęp z sieci, z której korzystam. Dlatego chcę skierować port 443 komputera B do portu 22 na komputerze A (na komputerze A żaden standardowy port nie jest już wolny i nie chcę dotykać produktywnej maszyny).
Komputer B to po prostu nieużywany komputer, więc port 443 nie jest używany. Co więcej, to rozwiązanie jest dostępne tylko przez kilka dni.
Moje pytania to:
-Jak przekierować port 443 maszyny B (5.6.7.8) do portu 22 maszyny A (1.2.3.4)? Myślę o iptables.
- O co chodzi z bezpieczeństwem w tej metodzie? Nie powinno to stanowić problemu z powodu odcisku klucza serwera SSH, prawda?
Odpowiedzi:
Musisz użyć funkcji NAT w iptables. Jest to udokumentowane tutaj: Destination NAT z netfilter (DNAT) . Nie dotyczy to jednak numerów portów. Widziałem, jak to działa po prostu umieszczając numer portu za adresem IP.
Myślę, że to zadziała:
Zakłada to oczywiście, że 5.6.7.8 może osiągnąć 1.2.3.4:22. Jeśli chodzi o bezpieczeństwo, prawdopodobnie zobaczysz niektórych klientów próbujących połączyć się z SSH. Jeśli masz silne hasła na wszystkich kontach (lub nawet lepiej, tylko uwierzytelnianie za pomocą klucza publicznego), powinno to być nadal dość bezpieczne.
edycja : Widziałem, że odpowiedź na to pytanie jest już związana z błędem serwera: Jak mogę przekierować za pomocą iptables?
źródło
O ile nie zrozumiałem źle, co musisz zrobić, osiągnięcie celu jest dość proste, jeśli kontrolujesz B i możesz skonfigurować demona SSH na B, aby nasłuchiwał na porcie 443 zamiast standardowego portu 22 i ustawił dowolne oprogramowanie zapory ogniowej na B aby umożliwić łączność przychodzącą do portu 443, o ile jakikolwiek ruch do portu 443 jest dozwolony wychodzący z używanej sieci.
Jeśli B jest systemem Linux, zmuszenie go do nasłuchiwania na porcie 443 dla połączeń SSH prawdopodobnie będzie wymagać niewielkiej aktualizacji
/etc/ssh/sshd_config
. Poszukaj wiersza poniżej w pliku:#Port 22
Usuń „#”, co oznacza, że to, co następuje, w przeciwnym razie będzie traktowane jako komentarz, od początku wiersza. Zmień „22” na „443”, a następnie uruchom ponownie demona SSH.
W systemie klienckim używasz
-L
opcji SSH, która spowoduje połączenia lokalne, tj. Połączenia z systemem, z którego inicjujesz połączenia SSH, przekierowane do portu w innym systemie z serwera SSH, z którym się łączysz.Np. Można użyć polecenia takiego jak poniższe, aby połączyć się z portem 443 przez SSH na komputerze B i pozwolić mu przekierowywać ruch do portu 2222 w systemie lokalnym do portu 22 na A za pośrednictwem portu 443 na B.
ssh -p 443 -L 2222:1.2.3.4:22 [email protected]
W
-p
oznacza „port” i opowiada SSH, które trzeba podłączyć do systemu docelowego, czyli B na 5.6.7.8 na porcie 443 zamiast standardowego portu 443.-L
opowiada SSH stworzyć lokalny port odsłuchu w systemie z z którym nawiązujesz połączenie. W wierszu poleceń wpisałem „2222”, ale numer jest dowolny; po prostu umieść coś większego niż 1024 i mniejszego niż 65 536.-L 2222:1.2.3.4:22
Także instruowanie program SSH w systemie, z którego jest nawiązanie połączenia SSH do B do przekazania żadnego ruchu, które otrzymuje na porcie 2222 przez tunel SSH to ustanowił B. A gdy opuszcza drugi koniec tunelu, B wysyła go do A w 1.2.3.4 na porcie 22. Zatem z perspektywy A połączenie SSH z nim pochodzi z B.Następnie w systemie, z którego ustanawiasz połączenie, musisz zainicjować kolejne połączenie SSH, ale tym razem do portu 2222 na sobie. Możesz to zrobić w następujący sposób:
ssh -p 2222 [email protected]
Teraz twój system łączy się z niestandardowym portem 2222 na adresie hosta lokalnego , tj. 127.0.0.1. Pierwsze ustawione połączenie SSH ma oprogramowanie klienckie SSH nasłuchujące na porcie 2222 dla połączeń, a następnie przekierowujące ruch przez tunel SSH do portu 443 na B, gdzie jest następnie przesyłane dalej do portu 22 na A. Po zainicjowaniu połączenia hasło monit, który otrzymasz, jeśli korzystasz z uwierzytelniania hasłem, będzie na maszynie A.
Zapora w sieci, z której powstaje pierwsze połączenie SSH, widzi tylko połączenie wychodzące z portem 443 na B. Ale w połączeniu z portem 443 na B znajduje się zaszyfrowany tunel, który kieruje cały ruch do portu 2222 klienta SSH do port 22 na A.
Korzystam z podobnego podejścia do przesyłania plików do / z serwera SSH A, który znajduje się w strefie sieci z ograniczeniami, gdzie jedyna dozwolona łączność przychodząca SSH musi przechodzić przez host bastionowy B. Uwaga: jeśli musisz również wykonać transfer plików używając bezpiecznego kopiowania (SCP) , musisz użyć wielkiej litery „P” z SCP, aby określić port, podczas gdy w ssh musisz użyć małej litery „p”.
Jeśli nie używasz systemu Linux lub OS X jako systemu klienckiego SSH, możesz zastosować podobne podejście do przekierowania portów w PuTTY lub innym oprogramowaniu klienckim SSH.
źródło
Czy logujesz się ręcznie, czy usługa na komputerze zewnętrznym X musi się zalogować na komputerze A? W przypadku ręcznego logowania możesz to zrobić:
Biorąc pod uwagę, że można ustawić zaporę tak, aby kierowała ruchem dla portu 443 na maszynę B, dlaczego nie można ustawić zapory, aby nasłuchiwała portu 22 lub portu 54827 (lub dowolnego losowego numeru portu) i kierowała go do komputera A?
Inną opcją jest do tunelu SSH ruchu przez B na A .
Bezpieczeństwo jest tak dobre, jak SSH.
źródło