SSH с ключами и тунелированием

left Бывают такие нехорошие места где кроме веб портов все закрыто, а частенько очень хочется залезть на свой сервер к некоторому приложению. Перебрасывание портов на открытые дело неразумное, да и вообще открывать какие-то сервисы наружу не стоит. В какой-то момент меня достала эта проблема, и поэтому я озадачился возможностью сделать тунель. Как оказалось все гениальное просто и название ему OpenSSH.

На самом деле сначала я смотрел в сторону VPN. Но сложноcть настройки и еще один дополнительный сервис в системе не добавлял энтузиазма. Дальше я попытался поискать что-нить будь около http туннелирования, но не нашел ничего. В конце концов выяснилось что обычный OpenSSH умеет вместе с соединением пробрасывать порты. А как плюс еще и умеет выступать в качестве socket 5 прокси. Эта возможность лазить по интернету через зашифрованный канал мне показалось довольно приятной.

В сети довольно много статей как настроить ssh с ключами, но я толком ни где не нашел слов "почему" и "как" мы это делаем. Все больше набор команд что бы сделать "хорошо". Поэтому я решил немного осветить эту тему.

Если вы собираетесь открыть доступ по ssh, то вам крайне необходимо настроить аутентификацию по ключам. Если вам кажется что хватит и пароля, стоит посмотреть логи и вы убедитесь, что каждую минуту десятки ботов пытаются его подобрать.

С аутентификацией по ключам существуют открытый (public) и приватный (private) ключ. Приватный ключ содержится на компьютере с которого вы будете подключаться, например ноутбук. Публичный ключ храниться на машине к который вы собираетесь подключиться, например домашний сервер. Когда вы соединяетесь с сервером он шифрует сообщения публичным ключом и только ваш приватный ключ может расшифровать его. Те все атаки будут просто бесполезны. Так же ключ обычно храниться в зашифрованном виде так что даже если он утек у вас будет время что бы сгенерировать новый. Очень важно понимать что это не зашита, а лишь преграда и отсрочка. Пароль к ключу (passphrase) должен быть сложным.

SSH может использовать RSA (Rivest-Shamir-Adleman) или DSA (Digital Signature Algorithm), но рекомендуется использовать только RSA ключи.

Давайте уже создадим оба ключа. По умолчанию используется 2048 бит, но можно увеличить до 4096, это усложнит брутфорсную подборку. В ходе работы у вас будет спрошен пароль к приватному ключу. Сохраняются ключи в /home/{user}/.ssh/id_rsa и /home/{user}/.ssh/id_rsa.pub. Я же предпочитаю указывать имя вручную, что бы потом не путаться.

mkdir ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t rsa -b 2048 -f .ssh/isudo.key

Теперь что бы скопировать публичный ключ на сервер необходимо сделать следующее. При условии что у вас есть доступ по ssh. Сам ключ будет храниться в фале .ssh/authorized_keys

ssh-copy-id admin@isudo.ru -p 22

Теперь можно зайти на удаленную машину.

ssh admin@isudo.ru -p 22

Теперь стоит убедиться что на сервере отключен вход по паролям. Заодно загляните в другие настройки. sudo nano /etc/ssh/sshd_config

# PubkeyAuthentication yes
# RSAAuthentication yes
# PermitRootLogin no
# PermitEmptyPasswords no
# PasswordAuthentication no

Перезагружаем sudo service ssh restart

Порты можно пробрасывать ключами к команде ssh, но есть более приятный способ - описать присеты в .ssh/config. Вот небольшой пример. Первое сокрашение для домашнего использования, с пробросом mysql и без сжатия. Второе для удаленного, тут мы пробросили cifs шару и прокси. Заодно указали какой ключ использовать.

Host home
     HostName   172.17.1.10
     User       admin
     Port       22

     Compress   no

     LocalForward 3306   lcalhost:3306

Host isudo.ru
     IdentityFile /home/admin/.ssh/isudo.key
     HostName   isudo.ru
     User       admin
     Port       22

     Compress   yes

     DynamicForward      1080

     LocalForward 135   localhost:135
     LocalForward 137   localhost:137
     LocalForward 138   localhost:138
     LocalForward 445   localhost:445

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

ssh home
ssh isudo.ru
sudo ssh isudo.ru -F /home/admin/.ssh/isudo.key

Если вы хотите прокси, то например в ubuntu надо зайти в Network Proxy и выбрать Socks host: localhost 1080. Браузеры понимаю настройки системы, но например месенжер Empathy нет.

На этом все, надеюсь я помог кому-то сэкономить время.

Categories: HowTo, Ubuntu Tags: , ,