1 955
0
Время чтения ≈ 18 минут

Сетевой протокол SSH (Secure Shell) — один из наиболее популярных инструментов для удаленного подключения к виртуальному серверу VPS/VDS. Однако преимущества этой технологии таят в себе и ряд сложностей, связанных с обеспечением безопасности SSH-сервера, об устранении которых мы хотим рассказать в этой статье.

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

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

В этом руководстве мы дадим ряд проверенных практикой советов для защиты SSH при подключении к серверу Linux, которые сделают работу с VDS более безопасной и продуктивной.

Клиенты не могут войти на сайт из-за DDoS? Хватит терпеть убытки!
Подключите интеллектуальную DDoS-защиту CyberFlow и забудьте о проблемах!

Подключение по SSH

Подробно о том, как подключиться к Linux-серверу по SSH с компьютера на ОС семейства Unix/Linux или с ОС Windows мы уже писали ранее в отдельных руководствах Базы знаний:

Поэтому в данной статье мы сосредоточимся только на мерах обеспечения безопасности SSH, с учетом подключения как с Linux, так и с Windows. Во втором случае в качестве инструмента SSH-подключения будет выступать клиент PuTTY.

#1 Создайте профили SSH

При подключении к Linux-серверу с сервера или локального компьютера, который использует операционную систему Unix/Linux, можно создать специальный профиль SSH, который упростит операционный цикл. 

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

Для подключения с Linux на Linux

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

ssh [USERNAME]@[IP_ADDRESS] -p [PORT_NUMBER]

В приведенном примере:

  • [USERNAME] — имя пользователя на сервере, к которому идет подключение через SSH.
  • [IP_ADDRESS] — адрес сервера к которому идет удаленное подключение.
  • [PORT_NUMBER] — порт, который используется на сервере для подключения по SSH.

Приведенный параметр с ключом -p прописывать не обязательно, если сервер использует стандартный порт SSH (22). Тогда команда будет иметь вид:

ssh [USERNAME]@[IP_ADDRESS]

Для отключения от сервера следует использовать команду exit.

Профили SSH хранятся в файле «~/.ssh/config». Каталог «~/.ssh» создается автоматически при первом запуске SSH соединения, файл «config» может создаться автоматически, но в некоторых операционных системах, его нужно создать используя команду:

touch ~/.ssh/config

В файл «~/.ssh/config» нужно занести данные профиля SSH для подключения к стороннему серверу. Это можно сделать с помощью любого редактора, например, vi, используя команду:

vi ~/.ssh/config

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

Host [PROFILE_NAME]
Hostname [IP_ADDRESS]
User [USERNAME]
Port [PORT_NUMBER]

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

ssh [PROFILE_NAME]

Для подключения с Windows на Linux

Создание профиля с готовыми настройками для удаленного соединение с разными SSH-серверами в PuTTY во многом напоминает аналогичный процесс для клиента на Linux.

В процессе создания удаленного SSH подключения в PuTTY вводятся данные сессии, которые сохраняются (кнопка Save) в основном разделе Session Saved Sessions под отдельным именем.

При повторном подключении этот сохраненный профиль с конфигурациями можно использовать для быстрого соединения с конкретным SSH-сервером, аналогично профилям SSH в подключении Linux/Linux. Для этого нужно:

  1. Выбрать в разделе Saved Sessions название сохраненной сессии и нажать «Открыть» (Open).
  2. В открывшемся терминале соединения с SSH-сервером ввести пароль (password:) и нажать «Ввод».

Кстати. Помимо PuTTY, для удаленного подключения по SSH к VPS типа Windows/Linux с сохранением профиля можно использовать и другие удобные инструменты. Например, Windows терминал MobaXterm со встроенным SSH-клиентом и сетевыми утилитами содержит безопасный менеджер паролей для их автозаполнения при входе.

#2 Подключайтесь без пароля

Хотя наличие надежного пароля может эффективно повысить уровень безопасности VPS, постоянно вводить при входе в систему может быть утомительно. Да и при нерегулярном использовании пароли часто забываются.

Хорошая новость для тех, кто использует определенные машины для входа на свои серверы — можно один раз установить пару открытый/закрытый ключ (SSH ключи) и не вводить пароль при каждом входе.

Для подключения с Linux на Linux

SSH подключение по ключу выполняется с помощью ряда последовательных действий, алгоритм которых приведен ниже.

  1. Сгенерировать пару ключей SSH на локальном компьютере. Следует нажать ввод пару раз, пока SSH ключи не будут сгенерированы. Это нужно для установки местоположения, имени файла и парольной фразы, но они могут оставаться со значениями по умолчанию.
ssh-keygen -t rsa

  1. Теперь нужно скопировать сгенерированный ключ на удаленный сервер с помощью команды ssh-copy-id:

    ssh-copy-id [ИМЯ ПОЛЬЗОВАТЕЛЯ]@[IP_АДРЕС] -p [НОМЕР_ПОРТА]

    Или, если конфигурация профиля уже установлена, выполнить следующую команду:

ssh-copy-id [PROFILE_NAME]

  1. Чтобы подключение без ввода пароля осуществлялось с помощью профиля SSH в файл конфигурации «~/.ssh/config» нужно добавить строки:
    Identitiesonly yes
    Identityfile ~/.ssh/id_rsa

    Теперь нужно попробовать подключиться к удаленному серверу — вход в систему должен осуществиться без запроса пароля.

Важно! Используя предложенный выше метод, следует иметь в виду, что пары ключей SSH не должны использоваться на машинах с общим доступом, так как это может стать уязвимостью системы безопасности.

Для подключения с Windows на Linux

Для быстрого подключения по SSH без пароля к VPS  в клиентах для Window используются готовые профили, сохраняемые в виде так называемых SSH-ключей (SSH keys). Подробнее о том, как создать и использовать SSH-ключи на примере PuTTY, можно почитать в этом руководстве.

#3 Заблокируйте root-доступ

Хотя некоторые провайдеры VPS-хостинга обеспечивают настройку подключения без необходимости root-доступа, как правило, он все-таки будет использоваться. А при работе сервера в интернете, логин и пароль от корневого доступа станут очевидной мишенью для хакеров.

Важно! Прежде чем блокировать root-доступ, вам нужно создать учётку пользователя с правами администратора, которая будет использоваться вместо root. В противном случае, можно потерять доступ к VPS.

Блокировка root-доступа предотвращает внесение незапланированных изменений на сервере, поскольку доступ новых пользователей с административными правами может быть ограничен.

Для блокировки корневого доступа нужно последовательно выполнить приведенный ниже алгоритм.

  1. Добавить нового пользователя (например, admin):
sudo useradd -m admin
  1. Установить пароль для нового пользователя:
sudo passwd admin

  1. Добавить пользователя в список «sudo»:
sudo usermod -a -G sudo admin

Чтобы запретить доступ с помощью пользователя root, нужно установить значение «no» для параметра PermitRootLogin, разрешающего авторизацию с корневым доступом, в файле конфигурации SSH, расположенном в «/etc/ssh/sshd_config».

Затем перезапустить службу sshd, используя команду:

systemctl restart sshd

#4 Измените номер порта SSH

Изменение номера порта — простой способ скрыть VPS от сканирования. SSH по умолчанию использует порт 22, однако его можно просто изменить на любой номер — от 1024 до 65 535 (порты с 0 по 1023 зарезервированы).

Важно! Данная мера рекомендуется только для опытных пользователей. При замене, следует использовать 5-значный и нестандартный номер порта.

Чтобы изменить порт SSH, нужно заменить его номер (параметр «Port») в «/etc/ssh/sshd_config», если данный параметр закомментирован — перед ним стоит #, ее нужно убрать.

Изменение стандартного порта SSH на 45685.

Затем перезапустить sshd.service командой:

sudo systemctl restart sshd

Важно! Перед обновлением номера порта SSH нужно убедиться, что новый номер порта открывается через ufw, если брандмауэр уже активен.

#5 Заблокируйте неиспользуемые порты

Хотя настройка брандмауэра не относится напрямую к SSH, стоит упомянуть об этом, как о важном шаге при удаленном подключении к VPS. В Ubuntu есть встроенный брандмауэр Uncomplicated Firewall с инструментом командной строки ufw.

Активировав ufw, можно управлять сетевым потоком, используя различные фильтры, такие как порты и IP-адреса. Для управления портом используются команды allow («разрешить») и deny («запретить»).

Важно! Перед активацией брандмауэра нужно убедиться, что порт SSH разрешен (по умолчанию это порт 22). В противном случае можно потерять доступ к VPS.

Для блокировки неиспользуемых портов в Linux нужно последовательно выполнить приведенный ниже алгоритм.

  1. Открыть SSH-порт:
sudo ufw allow ssh

Или, если установлден нестандартный порт:

sudo ufw allow [SSH_PORT]
  1. Заблокировать порт
sudo ufw deny [UNUSED_PORT]
  1. Активировать брандмауэр
sudo ufw enable
  1. Проверить статус брандмауэра
sudo ufw enable

#6 Блокируйте ping-запросы

Этот совет, как и предыдущий не связан напрямую с SSH, но это простое и эффективное действие для повышения общего уровня безопасности виртуального сервера.

Служба ping отвечает на пакеты ICMP, запрошенные у клиента, и широко используется для проверки доступности сервера по определенному IP-адресу. Однако поисковые роботы могут использовать ответ на пинг-запросы и для поиска IP-адреса конкретного сервера, что ухудшает уровень защиты его приватности.

Пример результата выполнения команды ping.

Чтобы деактивировать ping навсегда (служба не будет активироваться после перезагрузки), нужно выполнить следующую последовательность действий под пользователем root или пользователем, имеющим root-доступ.

  1. Открываем файл конфигурации «/etc/sysctl.conf»:
vi /etc/sysctl.conf

В некоторых дистрибутивах Linux вы можете заметить, что параметр отсутствует. В этом случае вы можете попробовать добавить ту же строку настроек в файл «/etc/ufw/sysctl.conf»:

vi /etc/ufw/sysctl.conf
  1. Устанавливаем в конфигурационном файле значение:
net.ipv4.icmp_echo_ignore_all = 1

Измененный файл конфигурации sysctl.

  1. Применяем изменения командой:
sysctl -p

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

#7 Ограничьте доступ по SSH определенными IP-адресами

Чтобы ограничить все входы по SSH с определенными IP-адресами, нужно выполнить приведенный ниже алгоритм.

  1. Открыть файл «hosts.allow» командой:
sudo vi /etc/hosts.allow
  1. В нижней части этого файла нужно добавить через запятую строку, включающую все IP-адреса, для которых разрешен вход по SSH. Например:
sshd: 192.168.1.62, 192.168.1.11, 192.168.1.100 *

Если нужно разрешить вход по SSH всем машинам в одной подсети, можно использовать следующий вариант:

sshd: 192.168.1.0/24 *

* В команде приведены IP 192.168.1.62, 192.168.1.11, 192.168.1.100, они используются для примера, вы должны использовать свой IP адрес. Для подсети 192.168.1.0/24, также нужно использовать свою подсеть.

  1. Сохранить и закрыть файл.
  2. Открыть файл «hosts.deny» командой:
sudo vi /etc/hosts.deny
  1. Внизу этого файла добавить следующее:
sshd: ALL
  1. Сохранить и закрыть файл.

#8 Отключите переадресацию портов X11/TCP

Отключить дефолтный сервер X11 и переадресацию портов TCP следует, потому что злоумышленники могут использовать эту уязвимость для получения доступа к другим системам в сети.

Важно! Все описанные правки выполняются в конфигурационном файле SSH-сервера «/etc/ssh/sshd_config».

  1. Откройте файл конфигурации демона и найдите следующие две строки:
AllowTcpForwarding yes
X11Forwarding yes
  1. Измените эти строки на:
AllowTcpForwarding no
X11Forwarding no
  1. Сохраните и закройте файл.

Рекомендуется воздержаться от перезапуска демона SSH, пока не будут полностью настроены другие настройки безопасности.

#9 Выполняйте команды через SSH

Что, если единственное, что вам нужно сделать через SSH-соединение — это выполнить одну быструю команду? Возможно, вы не захотите выполнять отдельные действия по подключению и аутентификации, запуску команды и последующему отключению.

SSH позволяет пользователям добавлять нужную команду непосредственно к попытке подключения. Команда выполняется и соединение закрывается.

Основной синтаксис, который поможет понять, как выполнить команду через SSH:

ssh [USERNAME]@[IP_ADDRESS] "command"

Примеры применения

  • Проверить статус установки пакета:
ssh [USERNAME]@[IP_ADDRESS] "rpm -qa | grep nano"
  • Проверить файл журнала на удаленном сервере на наличие сообщений о сбое:
ssh [USERNAME]@[IP_ADDRESS] "cat /var/log/secure" | grep -i fail
  • Извлечь файл из удаленной системы со сжатием:
ssh [USERNAME]@[IP_ADDRESS] "tar -czf /projects" > ProjectBackup.tar.gz

Обратите внимание, что для этой задачи, скорее всего, будет использоваться команда для безопасной передачи данных scp (secure copy).

Если требуется повысить привилегии на серверной стороне SSH-соединения с помощью sudo, то при запросе пароля следует принудительно использовать псевдотерминал с -t командой:

ssh -t [USERNAME]@[IP_ADDRESS] "sudo yum install nano"

#10 Используйте SSH как туннель для других приложений

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

Система удаленного доступа VNC (Virtual Network Computing) — востребованный способ подключения к удаленному рабочему столу, если для выполнения вашей задачи требуется графический интерфейс пользователя (GUI).

Хотя не все продукты VNC обеспечивают шифрование для передачи данных, обычно они делают это на этапе аутентификации. Для обеспечения дополнительной конфиденциальности можно туннелировать VNC соединение через SSH.

Чтобы тоннель «VNC через SSH» (HTTP-over-SSH) работал, нужно перенаправить порты следующей командой:

ssh -L 5901:localhost:5901 -N -f user01 server01

В приведенной выше команде:

  • -L — перенаправление порта на целевое устройство. В данном случае это прямое сопоставление 5901 с 5901 (номер порта VNC по умолчанию).
  • -N — только перенаправление портов, без выполнения команд.
  • -f — перевод SSH в фоновый режим после установления соединения (освобождение командной строки).

Точно так же можно установить туннель HTTP-over-SSH для каталога с именем «images» с помощью команды:

ssh -L 11000:localhost:80 -N -f -l [USERNAME]@[IP_ADDRESS]

Затем следует запустить веб-браузер и подключиться к http://localhost:11000/images.

#11 Ограничьте количество попыток авторизации

По умолчанию число попыток ввода пароля на Linux сервере не ограничено. Однако злоумышленники могут использовать эту уязвимость для взлома системы с помощью удаленного SSH подключения.

Чтобы предотвратить подобный сценарий, можно настроить автоматическое завершение SSH-соединения после определенного количества попыток, указав количество разрешенных попыток ввода пароля.

Для реализации следует изменить значение «MaxAuthTries» в конфигурационном файле «sshd_config», который расположен по пути: /etc/ssh/sshd_config. Например, ограничить попытки соединения тремя:

MaxAuthTries 3

#12 Установите время ожидания соединений

Директива ClientAliveInterval в конфигурационном файле управляет бездействующими соединениями SSH. Сервер отправляет сообщение клиенту и ожидает ответа, а ClientAliveInterval задает промежуток времени между этими сообщениями.

Еще одна директива ClientAliveCountMax определяет, сколько раз сервер сделает это, прежде чем решит, что клиента на самом деле больше нет. В этот момент соединение обрывается.

Пример конфигурации, которая проверяет быстродействие каждые 60 секунд и будет делать это три раза:

ClientAliveInterval 60
ClientAliveCountMax 3

Для обеспечения большей безопасности SSH соединений, нужно оптимизировать эти значения на более приемлемые для конкретной среды.

Важно! Если SSH используется для туннелирования других подключений, нужно убедиться, что интервал достаточно длинный для правильной поддержки любых других приложений, использующих его.

Существует значение ServerAliveInterval, которое также можно настроить на стороне клиента. Это позволяет клиентам сбрасывать соединения с SSH-серверами, переставшими отвечать.

Важно! Все описанные правки выполняются в конфигурационном файле SSH-сервера «/etc/ssh/sshd_config».

#13 Сделайте резервную копию файла конфигурации

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

Резервирование выполняется командой:

cp /etc/ssh/sshd_config ~/sshd_config_original

Заключение

Безопасность SSH соединений — лишь один из способов защиты Linux серверов. С помощью перечисленных выше мер можно свести к минимуму потенциальный урон, остановив, заблокировав или замедлив кибератаку.

Однако для их реализации нужно обладать определенным запасом технических знаний или обращаться к специалисту.  Ведь при работе с VPS даже простая ошибка может привести к серьезной угрозе безопасности или даже полной к потере доступа к серверу.

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

Оцените материал:
[Всего голосов: 0    Средний: 0/5]
Подписаться
Уведомление о
guest
0 комментариев
Inline Feedbacks
View all comments

Надежный хостинг для сайта. 14 дней - бесплатно!