Я создаю "Dropbox" безопасности, который можно развернуть за nat или любым брандмауэром, вызывать контролируемый общедоступный сервер и затем инициировать управление с сервера.
Я знаю, что это легко сделать с помощью команды ssh -R, однако я ищу что-то, что эффективно обходит IDS / IPS через правильный SSL / TLS и порт 443.
В настоящее время моя работающая установка (только SSL) имеет мой dropbox (назовем его клиентом), вызывающий и инициирующий stunnel-соединение с сервером. Затем я могу вручную передать ssh с клиента на сервер.
Это хорошо и здорово, однако мне нужно иметь возможность передавать ssh с сервера на клиент через установленный stunnel.
Вопросы:
Ниже приведены мои конфиги stunnel:
Сервер:
cert=/path/to/cert.pem
pid=/tmp/stunnel.pid
[ssh]
accept = 443
connect = 127.0.0.1:22
Клиент:
cert=/path/to/cert.pem
pid=/tmp/stunnel.pid
client=yes
[ssh]
accept=2200
connect=<serverpubip>:443
Пример команды SSH для попытки и обратного перехода от клиента к серверу через соединение stunnel:
ssh -i /path/to/cert -R 2200:localhost:2200 -p 2200 admin@localhost -f -N
Помните, что требования состоят в том, что только клиент может вызывать сервер для инициации начального соединения (stunnel), а трафик должен проходить через правильно сформированное шифрование SSL / TLS. Мне также нужно получить доступ к оболочке от сервера к клиенту. Заранее спасибо!
Обновить:
В итоге получилась плохая команда ssh. У меня сработала команда ssh:
ssh -i /path/to/cert -R 2201:localhost:22 -p 2200 admin@localhost -f -N
Почему бы не установить постоянный измеритель reverse_http (s) в "Dropbox"? Я думаю, что это самый простой способ получить обратную оболочку через http (s).
Ваша цель с помощью ваших реальных инструментов не может быть достигнута, потому что
stunnel
не может выполнить эту функцию обратного подключения,ssh
не будет работать как демон, и протокол немного отличается от https. Достаточное количество умных IDS сможет это обнаружить.Что вам нужно было сделать:
Таким образом, ваше фактическое подключение для передачи данных не так просто, как вы хотите, но вы можете достичь того, чего хотите. Если вы используете все эти технологии, это может противостоять даже интеллектуальной проверке сетевой безопасности.
Я думаю, что все, что нужно, это изменить -R 2200:localhost:2200
к -R 2200:localhost:22
в вашей команде ssh.
В его нынешнем виде вы подключаете порт 2200 на сервере обратно к порту 2200 на клиенте. И да, это создает цикл пересылки, поскольку client: 2200 туннелируется обратно на сервер.
Предполагая, что ssh на клиенте работает на порту 22, тогда -R 2200:localhost:22
подключит порт 2200 на сервере к ssh на клиенте.
Чтобы сделать это немного понятнее, я предлагаю выбрать другой номер порта для обратного туннеля с сервера: скажем, -R 2201:localhost:22
. Таким образом, вы не используете порт 2200 на обоих хостах, что поможет избежать путаницы между двумя портами.