Blok portów SSH: przekierowanie portów


0

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:


0

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:

iptables -t nat -A PREROUTING -p tcp -d 5.6.7.8 --dport 443 -j DNAT --to-destination 1.2.3.4:22

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?


Dziękuję, to powinno być rozwiązanie. Sprawdzę to później.
Richard

0

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 -Lopcji 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.

 -L [bind_address:]port:host:hostport
             Specifies that the given port on the local (client) host is to be
             forwarded to the given host and port on the remote side.  This
             works by allocating a socket to listen to port on the local side,
             optionally bound to the specified bind_address.  Whenever a con‐
             nection is made to this port, the connection is forwarded over
             the secure channel, and a connection is made to host port
             hostport from the remote machine.  Port forwardings can also be
             specified in the configuration file.  IPv6 addresses can be spec‐
             ified by enclosing the address in square brackets.  Only the
             superuser can forward privileged ports.  By default, the local
             port is bound in accordance with the GatewayPorts setting.  How‐
             ever, an explicit bind_address may be used to bind the connection
             to a specific address.  The bind_address of “localhost” indicates
             that the listening port be bound for local use only, while an
             empty address or ‘*’ indicates that the port should be available
             from all interfaces.

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 myBacct@5.6.7.8

W -poznacza „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. -Lopowiada 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:22Takż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 myAacct@127.0.0.1

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.


0

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ć:

  1. Serwer SSH ustawiasz na komputerze B, aby nasłuchiwał portu 443. Oczywiście musisz skonfigurować zaporę firmową, aby kierować ruchem zewnętrznym dla portu 443, aby przejść do tego komputera.
  2. Zaloguj się do komputera B. Teraz jesteś w sieci lokalnej, prawdopodobnie bez ograniczeń zapory.
  3. Z komputera B zaloguj się do komputera A, który ma serwer SSH nasłuchujący na porcie 22.

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.


Też o tym myślałem. Ale może być łatwiej z przekierowaniem portów ;-) Dziękuję!
Richard

Co jest łatwiejszego niż to, że potrzebujesz go tylko przez kilka dni?
SPRBRN

Zobacz moją edycję dotyczącą tunelowania ruchu.
SPRBRN
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.