Доступ к заблокированным сайтам через ssh для «чайников»

Open VPN

Конечно, конкуренция среди программ сделала свое дело – создать VPN канал теперь можно многими средствами. Одно из таких – это Open VPN. Его также можно использовать на Linux. Итак, для того, чтобы инсталлировать Open VPN, вам потребуется зайти в терминал и ввести следующую строку: apt-get install openvpn openvpn-docs, после чего приложение загрузится и установится. Возможно, у вас будет запрошен пароль администратора.


Open VPN можно настроить по-разному, в зависимости от общей сложности задачи. К примеру, если вам нужно туннелирование между двумя компьютерами, то настройка будет очень простой, а вот если компьютеров много, то и с конфигурациями придется помучиться.

Итак, чтобы создать простой туннель между двумя компьютерами, вам нужно будет сгенерировать специальный ключ. Делается это при помощи запроса: openvpn –genkey –secret static.key. Созданный ключ нужно перенести как на сервер, так и на клиент в сгенерированную при инсталляции папку openvpn, размещенную в каталоге Etc. Внутри этой папки вам предстоит создать файл с конфигурациями, который назовете по-разному для сервера и клиента. На сервере сгененрируйте server.conf, а для клиента пропишите client.conf. Стандартные настройки файла конфигураций вы сможете найти на сайте приложения Open VPN.

После добавления специальных конфигураций, которые вы скопируете на официальном сайте Open VPN, вам нужно будет лишь запустить приложение и на сервере, и на компьютере, проверить ping по каналу и активировать постоянный автозапуск приложения после активации системы при помощи кода: chkconfig openvpn on. После этого вы уже сможете обмениваться данными между сервером и клиентом.

С одной стороны, Open VPN – это весьма удобное приложение, которое позволяет быстро сгенерировать туннель между серверами, но с другой – у вас не получится так же легко создать VPN для соединения множества клиентов с хостом. Для этого реально нужно будет прыгнуть выше головы и утонуть в настройках – настолько это сложно. Так что лучше для решения подобных задач используйте другие утилиты.

Проверяем, как работает autossh

Во второй части мы решали две задачи:

  1. Пробросить ssh-туннель от до через промежуточный , чтобы иметь возможность подключаться с физической машины к серверу БД на виртуальной машине
  2. Пробросить ssh-туннель от до через промежуточный , чтобы иметь возможность подключаться с виртуальной машины к серверу БД на физической машине

Мы сейчас посмотрим, как работает , пробрасывая туннель от до (правая половина первого рисунка). Для проверки того, что туннель работает, установим на виртуальную машину клиент БД MySQL:

$ sudo apt install mysql-client

Теперь с виртуальной машины выполним команду создания туннеля:

$ autossh -M 0 -N remote-forward-ssh-server

А с виртуальной машины соединяемся с сервером БД MySQL:

$ mysql -uroot -pqwerty --protocol=TCP

Соединение прошло успешно. Теперь выключим сетевой интерфейс на виртуальной машине :

$ sudo ip link set dev enp0s3 down

Удостоверимся, что подключиться к серверу БД MySQL теперь нельзя:

$ mysql -uroot -pqwerty --protocol=TCP
mysql:  Using a password on the command line interface can be insecure.
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (111)

И посмотрим, как отреагирует утилита на машине :

$ autossh -M 0 -N remote-forward-ssh-server
Timeout, server 192.168.110.8 not responding. # прошло 90 секунд, сервер не отвечает
ssh: connect to host 192.168.110.8 port 2222: No route to host # попытка соединения с сервером
ssh: connect to host 192.168.110.8 port 2222: No route to host # попытка соединения с сервером
ssh: connect to host 192.168.110.8 port 2222: No route to host # попытка соединения с сервером

При включении сетевого интерфейса на виртуальной машине :

$ sudo ip link set dev enp0s3 up

Туннель будет восстановлен. Это можно проверить, если выполнить команду на :

$ mysql -uroot -pqwerty --protocol=TCP
mysql:  Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.7.28-0ubuntu0.18.04.4 (Ubuntu)
..........

Если возникли какие-то проблемы с , можно запустить утилиту в режиме отладки:

$ AUTOSSH_DEBUG=1 autossh -M 0 -N remote-forward-ssh-server
autossh: port set to 0, monitoring disabled # мы отключили мониторинг
autossh: checking for grace period, tries = 0
autossh: starting ssh (count 1) # запуск ssh (попытка 1)
autossh: ssh child pid is 2747
autossh: check on child 2747
autossh: set alarm for 600 secs
autossh: execing /usr/bin/ssh
Timeout, server 192.168.110.8 not responding.
autossh: check on child 2747
autossh: ssh exited with error status 255; restarting ssh
autossh: expired child, returning 1
autossh: checking for grace period, tries = 1
autossh: starting ssh (count 2) # запуск ssh (попытка 2)
autossh: ssh child pid is 2754
autossh: check on child 2754
autossh: set alarm for 559 secs
autossh: execing /usr/bin/ssh
ssh: connect to host 192.168.110.8 port 2222: No route to host
autossh: check on child 2754
autossh: ssh exited with error status 255; restarting ssh
autossh: expired child, returning 1
autossh: checking for grace period, tries = 2
autossh: starting ssh (count 3) # запуск ssh (попытка 3)
autossh: ssh child pid is 2755
autossh: check on child 2755
autossh: set alarm for 524 secs
autossh: execing /usr/bin/ssh
ssh: connect to host 192.168.110.8 port 2222: No route to host
autossh: check on child 2755
autossh: ssh exited with error status 255; restarting ssh
autossh: expired child, returning 1
autossh: checking for grace period, tries = 3
autossh: starting ssh (count 4) # запуск ssh (попытка 4)
autossh: ssh child pid is 2756
autossh: check on child 2756
autossh: set alarm for 521 secs
autossh: execing /usr/bin/ssh

Поиск: CLI • Linux • Ubuntu • SSH • Виртуальная машина • Команда • Конфигурация • Настройка • Сервер • Туннель

Автоматическое восстанавление туннеля

Утилита предназначена для мониторинга соединений ssh и их автоматического восстановления в случае разрыва. Она уже входит в репозитории Ubuntu, поэтому устанавливаем ее на виртуальную машину :

$ sudo apt install autossh
$ autossh
usage: autossh  ]  

    -M specifies monitor port. Overrides the environment
       variable AUTOSSH_PORT. 0 turns monitoring loop off.
       Alternatively, a port for an echo service on the remote
       machine may be specified. (Normally port 7.)
    -f run in background (autossh handles this, and does not
       pass it to ssh.)
    -V print autossh version and exit.

Environment variables are:
    AUTOSSH_GATETIME    - how long must an ssh session be established
                          before we decide it really was established
                          (in seconds). Default is 30 seconds; use of -f
                          flag sets this to 0.
    AUTOSSH_LOGFILE     - file to log to (default is to use the syslog
                          facility)
    AUTOSSH_LOGLEVEL    - level of log verbosity
    AUTOSSH_MAXLIFETIME - set the maximum time to live (seconds)
    AUTOSSH_MAXSTART    - max times to restart (default is no limit)
    AUTOSSH_MESSAGE     - message to append to echo string (max 64 bytes)
    AUTOSSH_PATH        - path to ssh if not default
    AUTOSSH_PIDFILE     - write pid to this file
    AUTOSSH_POLL        - how often to check the connection (seconds)
    AUTOSSH_FIRST_POLL  - time before first connection check (seconds)
    AUTOSSH_PORT        - port to use for monitor connection
    AUTOSSH_DEBUG       - turn logging to maximum verbosity and log to
                          stderr

Команда создания туннеля на виртуальной машине :

$ autossh -M 0 -N -p 2222 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" \
> -o "ExitOnForwardFailure yes" -R 3306:127.0.0.1:3306 evgeniy@192.168.110.8
$ autossh -M 0 -N remote-forward-ssh-server

Для обязательна опция , которая задает порт для мониторинга соединения. Но ssh-клиент может и сам это делать (это опции и ). Так что опцию будем всегда отключать.

Чтобы запустить в фоновом режиме, добавляем опцию :

$ autossh -M 0 -f -N -p 2222 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" \
> -o "ExitOnForwardFailure yes" -R 3306:127.0.0.1:3306 evgeniy@192.168.110.8
$ autossh -M 0 -f -N remote-forward-ssh-server

Здесь опции и относятся к , а все остальные передаются .

Проверим, что туннель работает, воспользовавшись командой :

$ ps -f -C autossh
UID        PID  PPID  C  STIME  TTY          TIME  CMD
evgeniy   4000  3210  0  12:26  ?        00:00:00  /usr/lib/autossh/autossh -M 0 -N remote-forward-ssh-server

Чтобы завершить процесс, используем команду :

$ pkill autossh

Где же и как подключиться к SSH-серверу?

Во-первых, существует некоторое количество бесплатных серверов, предоставляющих Shell-доступ. Кроме того, огромное количество ресурсов предоставляют платный сервис за довольно умеренную цену. Воспользуйтесь поисковым запросом «SSH-сервер» и вы быстро обнаружите искомое. Ну и в-третьих, если вы уже оплачиваете хостинг для своего сайта с поддержкой Shell, вам вообще не нужно о чем-то беспокоиться – все необходимое для доступа в сеть через SSH у вас уже есть.

Для обеспечения туннеля стоит воспользоваться программным обеспечением Bitvise SSH Client, которое кроме туннелирования предоставляет возможность защищенной передачи файлов между вашей машиной и сервером, а также имеет встроенный терминал для Shell-доступа к серверу. Кроме того, важным преимуществом этого SSH-клиента является бесплатная лицензия для индивидуального использования.

Настройка SSH сервера

1.01 Установить и запустить . Создайте ключ, чтобы сервер не ругался, потом поменяем его на новый ключ.

1.02) Здесь есть нюансы, в данный момент я предпочитаю выбирать «Нет»

1.03) Значок freeSSHd появляется в трее, выберите Settings

1.04) Само собой, нужно выдать разрешение бранмауэру.

1.05) В разделе Authentication, разрешить только доступ по ключам

1.06) Зайти в меню Users

1.07) Добавить нового пользователя

1.08) Вид после добавления

1.09) Запустить на сервере

1.10) Сгенерировать пару ключей

1.11) Публичный ключ, который останется лежать на сервере, нужно скопировать из верхнего окна

1.12) Вставить публичный ключ в текстовый редактор, проверить чтобы он был в одну строку и начинался со слова ssh-rsa

1.13) Сохранить ключ как текстовый файл, имя должно быть такое же как и пользователя, который был ранее создан (в нашем случае – sini)

1.14) Удалить расширение

1.15) Согласиться

1.16) Показать путь до ключа

1.17) Сохранить приватный ключ, который затем нужно будет перенести на клиентский компьютер В результате предыдущих манипуляций мы имеем запущенный SSH сервер и пару ключей.

Убери

Некоторые люди говорят, что SSH — это VPN для бедняков. Я бы категорически не согласился и сказал бы, что вместо этого SSH — более хирургический метод туннелирования определенного трафика для людей, которые понимают, что они делают

Принимая во внимание, что VPN подобен туннелированию с динамитом … вы получите туннель, но иногда это неправильный инструмент для работы

Например, предположим, что вы работаете удаленно и хотите подключиться к VPN в вашей рабочей сети из дома

Теперь допустим, что вы хотите просмотреть reddit, но при этом хотите, чтобы VPN был подключен, чтобы не пропустить ни одной важной электронной почты. Ну, все те кошачьи мемы, которые вы просматриваете, маршрутизируются через сеть вашей работы ..

возможно, заблокированы рабочим прокси / брандмауэром.


Кроме того, если у вас есть SSH-доступ к вашей рабочей сети … вы можете туннелировать только свою электронную почту и настроить прокси-сервер socks. Это означает, что вы по-прежнему можете получать электронную почту и использовать один браузер для деловых целей (например, Chrome) и другой браузер для просмотра изображений кошек (например, Firefox).

Оба инструмента могут быть полезны, зависит только от того, что вы хотите сделать.

Протоколы

Протокол туннелирования точка-точка (PPTP)

Это обеспечивает безопасность данных, даже если они передаются по сетям общего пользования. Авторизованные пользователи могут получить доступ к частной сети, которая называется виртуальной частной сетью или VPN, предоставляемой провайдером интернет-услуг или провайдером интернет-услуг. Это частная сеть в виртуальном смысле, потому что она создана в туннельной среде. Данный протокол позволяет корпорациям расширять собственную корпоративную сеть по частному каналу через общедоступный интернет.

Протокол проходки тоннелей второго уровня (L2TP)

Этот протокол включает в себя комбинацию использования PPTP и переадресации второго уровня. Это используется для поддержки виртуальных частных сетей (VPN) в рамках предоставления услуг по протоколам Интернет-услуг или провайдерам интернет-услуг. Оно не обеспечивает шифрование и конфиденциальность только само по себе. Но для обеспечения конфиденциальности он использует протокол шифрования, проходящий в туннеле. Он использует сетевые соединения с пакетной коммутацией, что позволяет размещать конечные точки на разных машинах. Это означает, что соединение может быть прервано на концентраторе локальной цепи и исключает, помимо прочих преимуществ, возможные расходы на междугороднее соединение. Таким образом, с другой точки зрения, с точки зрения проведения операции никакой разницы нет.

Таким образом, туннелирование действительно полезно и полезно в корпоративной среде, а также предоставляет функции безопасности, такие как опции шифрования. В двух словах, туннели рассматриваются как механизм, используемый для отправки неподдерживаемых протоколов по различным и разнообразным сетям. Туннелирование данных, VPN или других, увеличит размер пакета, что приведет к меньшему количеству передаваемых данных на пакет. Эти данные туннелирования через SSH обычно представляют собой VPN для каждого приложения, но в последней версии открытой SSH будет реализована полномасштабная бесперебойная VPN.

Настройка Bitvise SSH Client

Сложностей при настройке этого ПО практически нет. Для начала, на вкладке “Login” необходимо указать адрес сервера (1) и порт (2) для подключения (уточните у хостера или в сервисе, предоставляющем доступ к SSH-серверу), а также свои учетные данные для Shell-доступа – логин (3) и пароль (4). Впоследствии вы сможете установить аутентификацию при помощи RSA-ключей, но для начала установим парольную аутентификацию (password).

При желании, пароль для соединения можно запоминать в профайле, для чего следует устанавливать соответствующую галочку:

На вкладке “Options” стоит установить опцию “Автоматически восстанавливать соединение” (1), а также снять галочки открытия окон терминала и SFTP автоматически после соединения (их всегда можно будет открыть вручную):

Для включения туннелирования, на вкладке “Services” установите галочку “Enabled” в разделе “Socks/HTTP Proxy Forwarding”. Для локального использования ни адрес, ни порт менять не нужно, а вот запомнить их стоит:

Настройки желательно сохранить, для чего в левой части экрана есть соответствующая пиктограмма (1). В том случае, если у вас несколько серверов, к которым вы можете подключаться, можно создать необходимое число профайлов, сохранив в каждом из них данные для доступа к необходимому серверу, а после загружать требуемый с помощью пиктограммы загрузки (2).

Настроенный клиент подключается к серверу с помощью кнопки “Login” в нижней части экрана:

Если вы не ошиблись во вводе учетных данных, сервер сообщит о том, что аутентификация прошла успешно и установит защищенное соединение.


После установки соединения автоматически запускается локальный Socks-прокси, подключаясь к которому, вы получите доступ к сети через SSH-туннель.

Для подключения, откройте настройки прокси в вашем браузере или другой программе, использующей подключение к сети, и укажите адрес вашего SSH-Socks:

После сохранения установок, соединения ваших программ будут направляться через SSH-туннель, каждое соединение отражается в окне Bitvise SSH Client:

Теперь вы используете подключение к интернету при помощи сервера, с которым установили соединение, следовательно, проблем с доступом к сайтам, блокированным в нашем сегменте интернета, больше не возникнет.

Проверить, какой IP-адрес в качестве вашего “видят” сайты, которые вы посещаете, можно с помощью сервисов 2ip.ru, myip.ru и множества подобных:

Обращаем внимание тех пользователей, что собираются использовать SSH-туннель в качестве сокрытия своего реального IP-адреса, в целях анонимности. Множество браузеров (Opera, Google Chrome и т.д.) и других программ (например – Skype), невзирая на то, какие установки вы используете для соединения с сетью, пытаются устанавливать прямые служебные соединения, минуя прокси

Это, само собой, моментально сводит на нет вашу анонимность, раскрывая реальный IP адрес.

Для устранения подобного разоблачения, необходимо в правилах брандмауэра запретить для всех программ исходящие соединения, кроме соединения на адрес вашего прокси (127.0.0.1). И разрешить программе Bitvise SSH Client исходящее соединение с адресом SSH-сервера. В этом случае анонимность будет соблюдаться безукоризненно.

Server-Side Configuration

The option in the OpenSSH server configuration file must be enabled on the server to allow port forwarding. By default, forwarding is allowed. Possible values for this option are or to allow all TCP forwarding, to prevent all TCP forwarding, to allow local forwardings, and to allow remote forwardings.

Another option of interest is , which can be used to forward Unix domain sockets. It allows the same values as . The default is .

For example:

The configuration option as described above also affects remote port forwardings. Possible values were (only local connections from server host allowed; default), (anyone on the Internet can connect to remote forwarded ports), and (client can specify an IP address that can connect, anyone can if not specified).

Вложенные SSH туннели


Допускаются вложенные SSH туннели, например:

ssh -L bind_address:port:host:hostport -p 28666 user@remotehost1.com \
    ssh -L bind_address:port:host:hostport -p 28666 user@remotehost2.com
ssh -L 192.168.0.2:8080:127.1:9999 user@8.8.8.8 \
    ssh -L 127.1:9999:127.1:80 user2@10.1.1.2

В этом примере (рисунок ниже) мы бросаем данные с порта 8080 компьютера «А» (192.168.0.2), на локальный хост и порт 9999 компьютера «Б» (8.8.8.8), а сразу после подключения к компьютеру «Б» (8.8.8.8) запускаем на нём ssh клиент, принимаем данные (127.1:9999) и бросаем их дальше на локальный хост 127.1:80 компьютера внутренней сети 10.1.1.2.

Реверс сокс-прокси. По идее офицеры службы безопасности, которые озабочены запретом Интернета на машине 10.1.1.2, должны повыдёргивать на попе все волосы, ибо приведённая ниже команда должна организовать доступ к сети Интернет для машины 10.1.1.2 через сокс-прокси, который запущен на машине «А».

ssh -D 8080 -R 127.1:8080:127.1:8080 user@8.8.8.8 \
    ssh -R 127.1:8080:127.1:8080 user@10.1.1.2

SSH Academy

IAM

IAM Zero Trust Framework Gartner CARTA Standing Privileges Zero Standing Privileges (ZSP) Ephemeral access PrivX lean PAM Identity management Active Directory Administrators Domain administrators Local administrators Jump server IAM Just in time Just-in-time security tokens Multi-Factor Authentication (MFA) OpenID Connect (OIDC) PAM (Privileged Access Management) Legacy PAM Password generator Password strength Password vaults Privileged accounts PASM Privilege Elevation and Delegation Management Privileged session management Radius Root accounts Service accounts System accounts Sudo Users User IDs Superuser

Vagrant

Cloud

Cloud applications Cloud computing Cloud computing characteristics Cloud computing companies Cloud computing definition Cloud computing models Cloud computing pros and cons Cloud computing security Cloud storage Cloud technology IaaS PaaS SaaS SaaS companies SaaS security

Secure Shell

Secure Shell Secure Shell protocol SSH software downloads SSH certificate authentication Ipsec Network monitoring Port 22 RCP rlogin RSH SCP Session key Automated connections SSH command SSH configuration SSHFS SSH File System SSH for Windows SSH servers Tectia SSH Server SSH server configuration SSO using SSH agent Telnet WinSCP

SSH keys

CAC and PIV smartcards OpenSSH key authorization Passphrases Passphrase generator Copy ID Host key Authorized key Authorized key file SSH key basics SSH key identities SSH key management Universal SSH Key Manager SSH key proliferation SSH keygen SSH keys for SSO Public key authentication

SSH compliance

SSH key compliance Basel III COBIT Cybersecurity framework Fips 140 Fips 199 Fips 200 GDPR HIPAA ISACA ISACA SSH guide ISO 27001 NERC-CIP NIS directive NIST 7966 NIST 7966 download NIST 800-53 PCI-DSS Sans Top 20 Sarbanes Oxley

sshd OpenSSH server process

PuTTY

PuTTY download PuTTY manuals PuTTY for Windows PuTTY for Mac PuTTY for Windows PuTTY for Windows installation PuTTY public keys PuTTYgen for Linux PuTTYgen for Windows

SSH tunneling example

Benefits of SSH tunneling for enterprises

SSH tunnels are widely used in many corporate environments that employ mainframe systems as their application backends. In those environments the applications themselves may have very limited native support for security. By utilizing tunneling, compliance with SOX, HIPAA, PCI-DSS and other standards can be achieved without having to modify applications.

In many cases these applications and application servers are such that making code changes to them may be impractical or prohibitively expensive. Source code may not be available, the vendor may no longer exist, the product may be out of support, or the development team may no longer exist. Adding a security wrapper, such as SSH tunneling, has provided a cost-effective and practical way to add security for such applications. For example, entire country-wide ATM networks run using tunneling for security.

Прямое SSH туннелирование

Что имеется ввиду под «Прямое SSH туннелирование»? Прямое SSH туннелирование это когда SSH клиент запускается в режиме sock-proxy (опция -D) и соединившись с удалённой машиной по SSH протоколу передает через неё (удалённую машину) TCP трафик, например сессия прямого SSH туннеля с удалённой машиной через консольный SSH клиент (OpenSSH) в Windows:

C:\OpenSSH\bin>ssh -D 4444 -p 28666 user@remotehost.com
The authenticity of host 'remotehost.com (96.172.128.114)' cant be establishe
d.
RSA key fingerprint is 5e:ea:62:5f:fc:3b:b2:38:d6:ba:6b:aa:65:3f:d4:35.
Are you sure you want to continue connecting (yesno)? y
Please type 'yes' or 'no': yes
Warning: Permanently added 'remotehost.com,96.172.128.114' (RSA) to the list o
f known hosts.
user@remotehost.com password:
Last login: Thu Feb 7 03:34:45 2013 from 108.95.46.202
user@remotehost ~$

Запуская SSH клиент с опцией -D 4444 мы повелеваем ему после запуска прослушивать локальный порт 4444 и после подключения к удалённому хосту remotehost.com, на удалённый порт -p 28666 и с именем пользователя user, отправлять наш TCP трафик к месту назначения от своего имени — т.е. от имени remotehost.com с ИП 96.172.128.114.


С этим читают