09.08.2019 10:50

Настройка SSH на Debian/Ubuntu

В этой статье я объясню, как настроить SSH сервер на операционной системе Debian/Ubuntu. Как только вы получите доступ по SSH к вашему серверу (VPS/VDS, dedicated server), сразу же к вам полезут различные боты с попыткой взлома вашего сервера. Постарайтесь сразу же сделать минимальную настройку SSH, чтобы защититься от ботов. Итак, приступим к настройке.

Эта инструкция была выполнена на операционных системах: Debian 10, Debian 9, Ubuntu 20.10, Ubuntu 20.04, Ubuntu 19.10.

Первое соединение с сервером

При размещении сайта на сервере вам должны выдать выделенный IP-адрес и root-пароль для доступа по SSH. Давайте подключимся к нашему серверу, выполнив команду в терминале:

ssh root@192.168.0.101

где 192.168.0.101 — это IP-адрес вашего сервера.

При первом подключении вы должны подтвердить подлинность хоста, введя "yes". Дальше необходимо ввести пароль суперпользователя:

Первое соединение с сервером

Теперь у нас есть полный доступ к серверу.

Создание пользователя с правами администратора

Находиться в системе от суперпользователя (root) небезопасно, поэтому из соображений безопасности создадим пользователя с правами администратора, выполнив команду в терминале:

adduser username

где username — это имя пользователя, которое будет основным и заменит суперпользователя (root). Пароль старайтесь придумать достаточно сложный.

Добавим нового пользователя в группу sudo, выполнив команду в терминале:

usermod -aG sudo username

Закроем SSH-соединение, выполнив команду в терминале:

exit

Создание пользователя с правами администратора

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

ssh username@192.168.0.101

Войти в систему как новый пользователь

Отключение root-логина

В целях безопасности давайте запретим авторизацию по SSH для суперпользователя (root). Все изменения настроек вносятся в файл /etc/ssh/sshd_config. Редактируем файл настроек, выполнив команду в терминале:

sudo nano /etc/ssh/sshd_config

Ищем в файле параметр "PermitRootLogin" и устанавливаем значение "no". Если параметр не нашли, добавляем в конце файла строчку "PermitRootLogin no". Сохраняем изменения и закрываем файл. Для применения новых настроек перезапустим сервер SSH, выполнив команду в терминале:

sudo service ssh restart

Отключение root-логина

Изменения остальных параметров будет происходить таким же способом!

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

Чтобы минимизировать попытки взлома по стандартному порту 22, просто поменяем его на нестандартный, но который не занят другими сервисами. Диапазон значений составляет 1 — 65535. Вы можете проверить, свободен ли порт в файле /etc/services, выполнив команду в терминале:

grep -w '22' /etc/services

Например, выберем порт 2222. Открываем файл настроек и ищем параметр "Port". Устанавливаем новое значение порта вместо стандартного 22. Сохраняем изменения и закрываем файл, перезапускаем сервер SSH.

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

Не забывайте про брандмауэр, если он работает. Если есть ограничения на трафик, просто создайте правило для нового порта.

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

ssh -p 2222 username@192.168.0.101

Войти, используя новый порт

Разрешенные пользователи

По умолчанию вход разрешен для всех имен пользователей. Давайте разрешим доступ к серверу по протоколу SSH с помощью параметра "AllowUsers" только для перечисленных пользователей (отделенные друг от друга пробелами):

AllowUsers username username2

Добавляем эту строчку в конец файла настроек. Сохраняем изменения и закрываем файл, перезапускаем сервер SSH.

Разрешенные пользователи

Разрешенные IP-адреса

Мы можем ограничить доступ к серверу с определенных IP-адресов или их семейства. Параметр "AddressFamily" указывает, какое семейство IP-адресов будет использоваться: any (IPv4 + IPv6), inet (только IPv4), inet6 (только IPv6). Давайте укажем значение inet для доступа только с IP-адресов версии 4:

AddressFamily inet

Добавляем эту строчку в конец файла настроек. Сохраняем изменения и закрываем файл, перезапускаем сервер SSH.

Еще мы можем указать для каких IP-адресов будет разрешен доступ с помощью параметра "ListenAddress". Например, укажем адрес 192.168.0.100:

ListenAddress 192.168.0.100

Добавляем эту строчку в конец файла настроек. Сохраняем изменения и закрываем файл, перезапускаем сервер SSH.

Разрешенные IP-адреса

Если во время перезапуска сервера SSH произошла ошибка, попробуйте добавить адрес самого сервера в конец файла настроек:

ListenAddress 192.168.0.101

Включение аутентификации с открытым ключом

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

ssh-keygen -t rsa -f ~/.ssh/id_rsa_remote_server

После выполнения этой команды будут созданы два файла:

Создание приватного и публичного ключей

Скопируем публичный ключ на ваш удаленный сервер, выполнив команду в терминале:

ssh-copy-id -i ~/.ssh/id_rsa_remote_server -p 2222 username@192.168.0.101

Копирование публичного ключа на удаленный сервер

Также необходимо проверить включена ли возможность аутентификации по открытому ключу с помощью параметра "PubkeyAuthentication", по умолчанию данный параметр имеет значение "yes".

Теперь при дальнейшем входе в систему по SSH у нас не будет запрашиваться пароль.

SSH вход без пароля

Отключение аутентификации по паролю

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

Для отключения аутентификации по паролю используется параметр "PasswordAuthentication":

PasswordAuthentication no

Добавляем эту строчку в конец файла настроек. Сохраняем изменения и закрываем файл, перезапускаем сервер SSH.


В этой статье я представил основные настройки, которые могут существенно минимизировать взлом вашего сервера по SSH. Помните, что никогда не бывает 100% гарантии от взлома.

Другие статьи