Мне нужно получить доступ к SSH на машине A в другом порту, отличном от 22, потому что есть только стандартные порты, которым разрешен доступ из сети, которую я использую. Поэтому я хочу направить порт 443 машины B к порту 22 на машине A (на машине A стандартный порт больше не свободен, и я не хочу касаться производительной машины).

Машина B - это просто неиспользуемая машина, поэтому порт 443 не используется. Кроме того, это решение только на несколько дней.

Мои вопросы:

-Как переправить порт 443 машины B (5.6.7.8) в порт 22 машины A (1.2.3.4)? Я думаю о iptables.

-Что касается безопасности с помощью этого метода? Не должно быть проблемы из-за отпечатка ключа SSH-сервера, верно?

3 ответа3

0

Вам нужно будет использовать функциональность NAT в iptables. Здесь задокументировано: NAT назначения с сетевым фильтром (DNAT). Однако это не распространяется на номера портов. Я видел, как это работает, просто поместив номер порта за IP-адресом.

Я думаю, что это будет работать:

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

Это, конечно, предполагает, что 5.6.7.8 может достигнуть 1.2.3.4:22. Что касается безопасности, вы, вероятно, увидите, что некоторые клиенты пытаются подключиться к SSH. Если у вас есть надежные пароли для всех учетных записей (или, что еще лучше, только для проверки подлинности с использованием открытого ключа), это все равно должно быть достаточно безопасно.

редактировать: я видел, что этот вопрос уже ответил на сбой сервера: как я могу перенести вперед с iptables?

0

Вы входите в систему вручную или сервис на внешнем компьютере X должен войти в систему на компьютере A? Для ручного входа вы можете сделать это:

  1. Вы устанавливаете SSH-сервер на машине B для прослушивания порта 443. Конечно, вам нужно настроить брандмауэр компании для направления внешнего трафика на порт 443 для перехода на этот компьютер.
  2. Вы входите на компьютер B. Теперь вы находитесь в локальной сети, вероятно, без ограничений брандмауэра.
  3. С компьютера B войдите на компьютер A, на котором SSH-сервер прослушивает порт 22.

Учитывая, что вы можете настроить брандмауэр для направления трафика через порт 443 на компьютер B, почему вы не можете настроить брандмауэр на прослушивание порта 22 или порта 54827 (или любого произвольного номера порта) и перенаправить его на компьютер A?

Другим вариантом является туннелирование трафика SSH через B к A.

Безопасность так же хороша, как и SSH.

0

Если я неправильно понял, что вам нужно сделать, довольно просто добиться того, чего вы хотите, если вы управляете B и можете настроить демон SSH на B для прослушивания через порт 443 вместо стандартного порта 22 и установить любое программное обеспечение брандмауэра на B разрешить входящее соединение с портом 443, если трафику на порт 443 разрешен исходящий из сети, которую вы используете.

Если B - система Linux, для прослушивания порта 443 на наличие SSH-соединений, вероятно, потребуется незначительное обновление /etc/ssh/sshd_config . Посмотрите на строку ниже в файле:

#Port 22

Удалите «#», который означает, что последующее будет рассматриваться как комментарий в начале строки. Измените "22" на "443", а затем перезапустите демон SSH.

В клиентской системе вы используете опцию -L для SSH, которая приводит к локальным соединениям, то есть к системе, из которой вы инициируете соединения SSH, перенаправляясь на порт в какой-либо другой системе с сервера SSH, к которому вы подключаетесь. подключения.

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

Например, вы можете использовать команду, подобную приведенной ниже, для подключения к порту 443 через SSH на компьютере B и переадресации трафика на порт 2222 в локальной системе на порт 22 на A через порт 443 на B.

ssh -p 443 -L 2222:1.2.3.4:22 myBacct@5.6.7.8

-p означает "порт" и сообщает SSH, что вам необходимо подключиться к системе назначения, то есть B на 5.6.7.8 на порту 443, а не на стандартном порту 443. -L указывает SSH создать локальный прослушивающий порт в системе, с которой вы устанавливаете соединение. Я поставил "2222" в командной строке, но число произвольно; просто поместите что-то больше, чем 1 024 и меньше, чем 65 536. -L 2222:1.2.3.4:22 также дает команду программе SSH в системе, из которой вы устанавливаете соединение SSH с B, перенаправлять любой трафик, который он получает через порт 2222, через туннель SSH, который он установил с B. И когда он покидает другой конец туннеля, B отправляет его на A на 1.2.3.4 через порт 22. Таким образом, с точки зрения A, SSH-подключение к нему происходит из B.

Затем в системе, из которой вы устанавливаете соединение, вам нужно инициировать другое соединение SSH, но на этот раз на порт 2222. Вы можете сделать это следующим образом:

ssh -p 2222 myAacct@127.0.0.1

Теперь ваша система подключается к нестандартному порту 2222 по адресу localhost для себя, то есть 127.0.0.1. Первое установленное вами соединение SSH имеет клиентское программное обеспечение SSH, прослушивающее порт 2222 для соединений и затем перенаправляющее трафик через туннель SSH на порт 443 на B, где оно затем отправляется далее на порт 22 на A. Когда вы инициируете соединение, пароль запрос вы получите, если вы используете пароль аутентификации, будет для машины А.

Брандмауэр в сети, из которой вы исходите, первое SSH-соединение видит только исходящее соединение с портом 443 на B. Но в соединении с портом 443 на B есть зашифрованный туннель, который перенаправляет весь трафик на порт 2222 вашего SSH-клиента порт 22 на А.

Я использую аналогичный подход для передачи файлов на / с сервера SSH, A, который находится в ограниченной сетевой зоне, где единственное разрешенное входящее соединение SSH должно проходить через хост-бастион B. Примечание: если вам также необходимо выполнить передачу файлов используя безопасное копирование (SCP), вам нужно использовать прописную букву "P" с SCP для указания порта, тогда как с ssh вы должны использовать строчную букву "p".

Если вы не используете систему Linux или OS X в качестве клиентской системы SSH, вы можете использовать аналогичный подход переадресации портов с PuTTY или другим клиентским программным обеспечением SSH.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .