В одной из моих систем есть брандмауэр, запрещающий любые исходящие сообщения, кроме http (s) ...
Некоторые пользователи должны использовать ssh, но не могут. Сначала я попытался запустить ssh на порту 443, но безуспешно.
Я прогуглил это и обнаружил, что могу сделать это, используя stunnel
, который нуждается в некоторой конфигурации, так как это сделать?
Эта конфигурация состоит из двух частей. Первая часть сделана на удаленном сервере SSH. Вторая часть сделана на локальной машине.
Инструкции на стороне сервера:
Сначала установите stunnel:
sudo apt-get install stunnel4
Создайте сертификат SSL (на 365 дней):
openssl genrsa 1024 > stunnel.key
openssl req -new -key stunnel.key -x509 -days 365 -out stunnel.crt
cat stunnel.crt stunnel.key > stunnel.pem
sudo mv stunnel.pem /etc/stunnel/
Сконфигурируйте stunnel для туннеля с 443 (https) до 22 (ssh):
Создайте файл конфигурации для удовлетворения потребностей использования SSH через SSL.
gksu gedit /etc/stunnel/stunnel.conf
Запишите их:
pid = /var/run/stunnel.pid
cert = /etc/stunnel/stunnel.pem
[ssh] accept = public_ip:443
connect = 127.0.0.1:22
Приведенная выше конфигурация сообщает stunnel, где найти сгенерированный нами сертификат и где принимать и пересылать соединения. В этом случае stunnel будет прослушивать public_ip через порт 443 (https) и перенаправлять туда соединения обратно на localhost 22 (ssh).
Чтобы запустить службу stunnel, нам нужно активировать ее в / etc / default / stunnel4. Измените ENABLED строку с 0 на 1.
Наконец, мы можем запустить службу и перейти к конфигурации клиента:
sudo service stunnel4 start
Вы можете убедиться, что stunnel теперь прослушивает, используя команду netstat:
netstat -natp | grep :443
Инструкции на стороне клиента:
Сначала установите пакет stunnel:
sudo apt-get install stunnel4
Создайте сертификат SSL (на 365 дней):
openssl genrsa 1024 > stunnel.key
openssl req -new -key stunnel.key -x509 -days 365 -out stunnel.crt
cat stunnel.crt stunnel.key > stunnel.pem
sudo mv stunnel.pem /etc/stunnel/
Создайте файл конфигурации:
gksu gedit /etc/stunnel/stunnel.conf
Напишите их:
pid = /var/run/stunnel.pid
cert = /etc/stunnel/stunnel.pem
[ssh] accept = 127.0.0.1:2200
connect = remote_ip:443
Чтобы запустить службу Stunnel, нам нужно активировать ее в / etc / default / stunnel4. Измените строку ENABLED с 0 на 1.
Запустить службу.
sudo service stunnel4 start
Установите соединение
Теперь, когда служба stunnel работает как на сервере, так и на клиенте, мы готовы установить безопасное соединение. Теперь, когда вы подключаетесь к локальному компьютеру через порт 2200, он устанавливает соединение с удаленным IP-адресом через порт 443, создает безопасное соединение SSL и подключается к порту 22 на другом конце. Ваши зашифрованные соединения SSH теперь обернуты в зашифрованное соединение SSL с использованием порта 443.
ssh localhost -p 2200
stunnel
подходит для постоянных настроек, но если вам нужно более специальное решение, вы можете объединить 2 туннеля.
Например, вы хотите, чтобы хост A получил доступ к порту 443 на хосте B, но заблокирован брандмауэром, поэтому вы пытаетесь создать туннель от хоста C, который может получить доступ как к порту A 22, так и к порту B 443
ssh -R 443:B:443 root@A
не будет работать в Ubuntu или любом другом дистрибутиве, который отключает root-аккаунт или root-доступ по ssh.
ssh -R 443:B:443 other_user@A
не будет работать, так как только root может настроить порт прослушивания на A, даже если у пользователя «other_user» есть разрешение sudo.
ssh -R 1443:B:443 other_user@A
Позволит A получить доступ к B: 443 с использованием 127.0.0.1:1443. Это хорошо, но иногда вы не можете изменить порт (возможно, номер порта, который жестко задан в приложении).
В этом случае вы можете добавить еще один туннель из A: 443 в A: 1443, используя ssh -L 443:127.0.0.1:1443 127.0.0.1
в дополнение к предыдущему туннелю A-> C-> B.