В настоящее время я тестирую некоторые конфигурации с vagrant (виртуальным ящиком) для соединения 2 серверов (в настоящее время виртуальная машина) вместе через туннель SSH. Цель состоит в том, чтобы безопасно подключить мое веб-приложение к базе данных.
Проблема в том, что когда я запрашиваю базу данных через туннель SSH, мои запросы выполняются в 5–80 раз медленнее, чем если бы я не использовал туннель. Вот команда, которую я использую:
ssh -N -L 3306:127.0.0.1:3306 sshuser@192.168.10.10
Судя по тому, что я читал, накладные расходы не должны быть такими большими, поэтому я попробовал несколько вещей, чтобы ускорить передачу. Я узнаю, что если убрать -N
вариант, запросы выполняются так же быстро, как если бы я не использовал туннель, но я вхожу в терминал как 'sshuser' (и добавляю &
в конце команды делать странные вещи ...).
Зная это, у меня есть несколько вопросов:
Мои данные все еще зашифрованы, когда я удаляю -N
вариант?
Если да, то что я могу сделать, чтобы сохранить производительность без регистрации в консоли как sshuser?
Могу ли я использовать какие-либо варианты, чтобы ускорить шифрование?
Заранее спасибо за свет.
SSH-туннель - не лучшая идея в качестве постоянного решения. SSH основан на TCP. Большинство вещей, которые вы можете туннелировать в SSH, основаны на TCP (включая mysql). Туннелирование TCP через TCP может повлиять на производительность. Потому что ваша система будет пытаться обрабатывать откат и тому подобное на обоих соединениях одновременно.
Если вам нужно безопасное постоянное соединение между двумя хостами в одной сети, вам почти наверняка будет гораздо лучше выяснить, что потребуется для настройки IPSEC. Или, если IPSEC не работает, используйте настройку VPN, которая не передает через TCP.
Что касается производительности вашего SSH-туннеля, я бы посмотрел на шифры, которые вы используете. Некоторые быстрее, чем другие. Может быть, вы сможете принять более быстрый / более слабый шифр. Вы почти можете убедиться, что сжатие отключено. Если вы используете быстрое соединение, действительно нет никакого значения для сжатия, но это может добавить задержку для выполнения сжатия / распаковки. Если вы по-прежнему не получаете никаких улучшений после их изменения, вы, вероятно, захотите запустить tcpdump / wirehark и посмотреть, можете ли вы увидеть, откуда происходят задержки.
В -N
опция просто запретить SSH выполнять удаленную команду, а не шифрование. Ваш туннель все равно будет зашифрован.
Если вы используете -N
, ssh просто создает туннель, а не оболочку и все переменные среды с другой стороны. Это намного быстрее.
Я не думаю, что добавление SSH-туннеля к вашей установке повысит вашу безопасность, оно может даже резко снизить ее.
Если вы подключаете свое веб-приложение непосредственно к базе данных, любой потенциальный злоумышленник будет иметь только те учетные данные, которые использует ваше приложение. Если вы создаете туннель, злоумышленник потенциально может использовать туннель для получения доступа к узлу базы данных и компрометации всех данных на этом сервере.
В вашей настройке вы должны вручную запустить туннель и, вероятно, в конечном итоге автоматизируете его и как-то сохраните учетные данные. Злоумышленник может найти учетные данные и использовать их для доступа к серверу базы данных.
Если сервер базы данных и сервер приложений находятся в одной подсети, повышение безопасности при использовании зашифрованных туннелей SSH для доступа к данным незначительно. Это защитит вас только от злоумышленника, который уже находится внутри сети. В этом случае, когда он получит доступ ко всему, это лишь вопрос времени.