Теория
Чтобы настроить локальный SOCKS5 прокси, необходимо в консоли набрать следующую команду:
Code:
ssh -D $port $user@$host
Параметр "-D" в данном примере говорит установить локальный прокси на порту $port, который в свою очередь выбирается произвольным образом из свободных в системе, но должен быть больше 1024 и меньше 65535. $user и $host - это данные имени пользователя и адреса сервера. После авторизации мы получаем полноценный прокси-сервер по адресу 127.0.0.1:$port
В результате успешного выполнения команды
Code:
ssh -D 14880 [email protected]
мы получим SOCKS5 прокси по адресу 127.0.0.1:14880 в виде шифрованного туннеля до 8.8.8.8. Введя в настройках браузера SOCKS5 прокси 127.0.0.1:14880 мы получим наш внешний ip 8.8.8.8, причем в отличие от обычного SOCKS5 прокси, соединение до 8.8.8.8 будет зашифровано, то есть провайдер не увидит содержимое траффика.
Чтобы tor шел через наш прокси, нужно в конфиге torrc добавить строчку
Code:
Socks5Proxy 127.0.0.1:14880
После чего мы получим схему, известную как "VPN -> Tor".
Если же перед командой создания туннеля добавить torsocks или torify при работающем торе, то получим схему "Tor -> VPN" для всех приложений, использующих сокс-прокси на 127.0.0.1:14880:
Code:
torsocks ssh -D 14880 [email protected]
Организация рабочего окружения
Можно организовывать туннель от того пользователя, от которого запущено графическое окружение. Но тогда этому пользователю необходим неограниченный доступ в сеть, что я считаю небезопасно.
Поэтому для начала создадим новую учетную запись (выполнять в консоли от root):
Code:
useradd -M -r -U -s /usr/bin/nologin --uid 1337 sshproxy
Здесь мы создаем т.н. системную учетную запись с id 1337 и одноименную группу. Параметр -M говорит не создавать домашнюю папку, можно и создать, но мне удобнее сделать по-другому: создать шифроконтейнер, в нем создать папку, к примеру sshproxy, и поменять владельца и разрешения папки:
Code:
chown sshproxy:sshproxy sshproxy
chmod 700 sshproxy
Далее, лучше всего запретить фаерволлом лезть куда не надо всем пользователям, кроме избранных. Нашему новому пользователю sshproxy необходим доступ, поэтому добавляем правило в iptables, в файле правил оно должно выглядеть примерно так:
Code:
-A OUTPUT -m owner --uid-owner 1337 -j ACCEPT
Безопасность соединения
Перед использованием туннеля необходимо обезопаситься от атаки типа человек-по-середине. После подключения к серверу и перед тем, как инициировать авторизацию, необходимо убедиться, что "разговариваем" мы именно с нужным нам сервером.
Для начала нужно сменить рабочую директорию на ту, которую мы создали в предыдущем шаге
Code:
cd /media/cryptocont/sshproxy
Теперь, поскольку окружение у нас нестандартное, нам необходимо передать дополнительный параметр ssh, -o "UserKnownHostsFile sshproxy_hosts". В итоге команды подключения и проверки хоста будут выглядеть так (помним, что нам надо подключаться от пользователя sshproxy и подставить верные значения удаленного пользователя и сервера):
Code:
sudo -u sshproxy ssh -o "UserKnownHostsFile sshproxy_hosts" $user@$host
Высветится примерно следующее сообщение:
Code:
The authenticity of host 'ip.ip.ip.ip' can't be established.
ECDSA key fingerprint is ff:aa:bb:cc:00:11:22:33:44:55:66:77:88:99:aa:bb.
Are you sure you want to continue connecting (yes/no)?
Жмем Ctrl-C, меняем внешний ip - перезапускаем tor или устанавливаем новую личность, опять соединяемся:
Code:
sudo -u sshproxy ssh -o "UserKnownHostsFile sshproxy_hosts" $user@$host
Опять Ctrl-C, меняем внешний ip - перезапускаем tor или устанавливаем новую личность, соединяемся:
Code:
sudo -u sshproxy ssh -o "UserKnownHostsFile sshproxy_hosts" $user@$host
Если отпечаток тот же во всех трех случаях - печатаем yes. Некоторые vpn-конторы предоставляют сразу отпечатки ключей, тогда вы сверяете то, что вам высветилось с тем, что вам дали при регистрации и если все нормально, пишете "yes". После "yes" данные о сервере запишутся в файл sshproxy_hosts, и нам больше не надо будет ничего сверять.
Для справки: часть "sudo -u sshproxy" говорит, что запускать ssh нужно от пользователя sshproxy.
Авторизация
После последнего "yes", нам предложат авторизоваться на сервер. Обычно авторизация бывает двух видов: по паролю и с помощью ключевого файла.
С паролем все понятно - когда нас просят, мы его вводим, и все, туннель готов к использованию.
С ключами же несколько сложнее. Ключ или выдадут, или его нужно будет генерировать на сервере (в интернетах расскажут, как). В общем, условимся, что он у нас есть в виде файла с названием sshproxy_key. Нам нужно положить его в нашу папку sshproxy, и максимально ограничить доступ к нему:
Code:
chown sshproxy:sshproxy sshproxy_key
Code:
chmod 400 sshproxy_key
После этого наша команда подключения к серверу преобразуется вот в такую:
Code:
sudo -u sshproxy ssh -o "UserKnownHostsFile sshproxy_hosts" -i sshproxy_key $user@$host
Ну вот и все. Теперь для создания туннеля необходимо от root проникнуть в директорию sshproxy и запустить команду создания туннеля с ключом или без него.
Взято с Runion