Перейти к содержимому

Защита SSH

Эта инструкция показывает, как укрепить SSH на Linux-сервере.

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

Убедитесь, что у вас:

  • есть доступ к серверу под root или через пользователя с sudo;
  • используется OpenSSH;
  • вы понимаете, как вернуть изменения через консоль управления сервером, если отключите доступ случайно.

Если на сервере используется ssh.socket вместо обычного ssh.service, сначала отключите socket-режим:

Окно терминала
sudo systemctl stop ssh.socket
sudo systemctl disable ssh.socket
sudo systemctl enable ssh
sudo systemctl restart ssh

Проверить текущий режим можно так:

Окно терминала
sudo systemctl status ssh

Основные настройки находятся в файле /etc/ssh/sshd_config.

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

Окно терминала
useradd -m -U -s /bin/bash -G sudo holu
passwd holu

Затем отключите вход под root:

Окно терминала
PermitRootLogin no

Чтобы SSH-сеанс разрывался после простоя, добавьте:

Окно терминала
ClientAliveInterval 300
ClientAliveCountMax 1

Разрешите вход только нужным пользователям

Заголовок раздела «Разрешите вход только нужным пользователям»

Если к серверу должны подключаться только конкретные аккаунты, укажите их явно:

Окно терминала
AllowUsers holu holu2

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

Окно терминала
Port SELECTED_PORT

Если вы меняете порт, не забудьте обновить правила фаервола.

Отключите функции, которые не нужны для обычного SSH-доступа:

Окно терминала
AllowTcpForwarding no
X11Forwarding no
AllowAgentForwarding no
AuthorizedKeysFile .ssh/authorized_keys

Чтобы снизить риск перебора пароля, ограничьте число попыток входа:

Окно терминала
MaxAuthTries 2

Проверьте, что аутентификация по ключу разрешена:

Окно терминала
PubkeyAuthentication yes

На клиентской машине создайте ключ:

Окно терминала
ssh-keygen -t rsa -b 4096

На Linux-клиенте скопируйте ключ так:

Окно терминала
ssh-copy-id -i ~/.ssh/id_rsa.pub -p SELECTED_PORT holu@your_host

На Windows можно вручную добавить содержимое публичного ключа в файл:

/home/holu/.ssh/authorized_keys

Проверка подключения по ключу:

Окно терминала
ssh -i ~/.ssh/id_rsa -p SELECTED_PORT holu@your_host

Шаг 4. Включите двухфакторную аутентификацию

Заголовок раздела «Шаг 4. Включите двухфакторную аутентификацию»

Если нужен дополнительный уровень защиты, подключите Google Authenticator или Aegis.

Для Ubuntu / Debian:

Окно терминала
apt install libpam-google-authenticator

Для CentOS / RedHat:

Окно терминала
yum install epel-release
yum install google-authenticator

Для Arch Linux:

Окно терминала
pacman -S libpam-google-authenticator

Для openSUSE / SLES:

Окно терминала
zypper install google-authenticator-libpam

Запустите настройку:

Окно терминала
google-authenticator

Дальше:

  1. Ответьте y, если хотите time-based токены.
  2. Отсканируйте QR-код в приложении.
  3. Сохраните резервные коды.
  4. Подтвердите остальные вопросы.

В файле /etc/pam.d/sshd закомментируйте строку:

@include common-auth

И добавьте:

auth required pam_google_authenticator.so

В /etc/ssh/sshd_config включите:

Окно терминала
ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive

Если у вас Ubuntu 22.04 и новее, используйте вместо ChallengeResponseAuthentication:

Окно терминала
KbdInteractiveAuthentication yes

Перезапустите SSH:

Окно терминала
systemctl restart ssh

Перед перезапуском SSH проверьте синтаксис:

Окно терминала
sshd -t

Если ошибок нет, примените настройки:

Окно терминала
systemctl restart ssh

После всех изменений:

  • откройте новое SSH-подключение;
  • проверьте вход по ключу;
  • проверьте вход с 2FA, если вы его включали;
  • убедитесь, что старые способы доступа больше не нужны.

Если вы всё настроили правильно, SSH станет заметно безопаснее.