Скрыть трафик SSH от брандмауэра

624
The Omitter

Можно ли как-то (желательно легко) скрыть трафик ssh от пакета, проверяющего брандмауэр. Я подумал о том, чтобы встроить сессию ssh в безвредно выглядящий сеанс TLS. Я узнал, что это возможно с помощью socat, но я понятия не имею, как это запустить. У меня есть полный доступ администратора на клиенте и сервере ssh, но решение в пользовательском пространстве, конечно, было бы самым хорошим :-)

В случае, если кто-то знает socat, вот что я попробовал (но мне также любопытны другие решения):

сервер:

socat OPENSSL-LISTEN:10000,fork,cipher=aNULL,verify=0 TCP-CONNECT:localhost:22 

клиент:

ssh -o ProxyCommand='socat STDIO OPENSSL-CONNECT:%h:10000,cipher=aNULL,verify=0' theserver 

serverlog:

socat[27898] E SSL_accept(): Success socat[27897] E exiting on signal 11 

clientlog:

socat[15953] E SSL_connect(): error:141640B5:SSL routines:tls_construct_client_hello:no ciphers available ssh_exchange_identification: Connection closed by remote host 

Согласно справочной странице, aNull не должен вызывать эту ошибку.

Обновление : благодаря гравитации туннель успешно установлен. После этого у меня возникли проблемы с обнаружением, что соединения с localhost были заблокированы (настроено в /etc/hosts.allow). Но сейчас работает нормально. Благодарю.

1
`stunnel`, вероятно, легче обрабатывать, потому что он был создан именно для этой цели. Daniel B 6 лет назад 1
Получил это также работает. Хорошая идея, спасибо. Также работает с разрешениями пользователя при запуске вручную (очевидно, не как системная служба). The Omitter 6 лет назад 0

1 ответ на вопрос

2
grawity

Это обычно делается, да. (Хотя на стороне сервера чаще встречается stunnel.)

Тем не менее cipher=aNULL, ваша главная проблема в том, какие недавние библиотеки TLS могут не принять. (Не говоря уже о том, что брандмауэры и IDS могут считать такое соединение очень необычным и подозрительным.)

Вместо этого используйте обычный TLS с проверкой подлинности на основе сертификата с самозаверяющим сертификатом:

openssl req -new -subj "/CN=ponies" -days 365 -extensions v3_req -x509 \ -out tunnel.crt -newkey rsa:2048 -keyout tunnel.key -nodes  socat OPENSSL-LISTEN:10000,fork,cert=tunnel.crt,key=tunnel.key,verify=0 ... 

(Это нужно сделать только на стороне сервера; по умолчанию клиенты не проходят проверку подлинности.)

Большое спасибо за помощь. Мне также пришлось сгенерировать файл параметров dh с помощью `openssl dhparam 2048` и добавить его в команду сервера` dhparams = dhparmasfile` (после ручной компиляции версии socat, которая поддерживала опцию…). The Omitter 6 лет назад 0
А? Разве это не поддерживает ECDH? grawity 6 лет назад 0
Он просто жаловался, что ключ слишком короткий. The Omitter 6 лет назад 0

Похожие вопросы