Защита SSH
Эта инструкция показывает, как укрепить SSH на Linux-сервере.
Рекомендуем выполнять изменения по порядку и не закрывать текущую сессию SSH, пока не проверите новую конфигурацию.
Перед началом
Заголовок раздела «Перед началом»Убедитесь, что у вас:
- есть доступ к серверу под
rootили через пользователя сsudo; - используется
OpenSSH; - вы понимаете, как вернуть изменения через консоль управления сервером, если отключите доступ случайно.
Если на сервере используется ssh.socket вместо обычного ssh.service, сначала отключите socket-режим:
sudo systemctl stop ssh.socketsudo systemctl disable ssh.socket
sudo systemctl enable sshsudo systemctl restart sshПроверить текущий режим можно так:
sudo systemctl status sshШаг 1. Ограничьте доступ по SSH
Заголовок раздела «Шаг 1. Ограничьте доступ по SSH»Основные настройки находятся в файле /etc/ssh/sshd_config.
Запретите вход под root
Заголовок раздела «Запретите вход под root»Сначала создайте отдельного пользователя с правами администратора:
useradd -m -U -s /bin/bash -G sudo holupasswd holuЗатем отключите вход под root:
PermitRootLogin noОграничьте время бездействия
Заголовок раздела «Ограничьте время бездействия»Чтобы SSH-сеанс разрывался после простоя, добавьте:
ClientAliveInterval 300ClientAliveCountMax 1Разрешите вход только нужным пользователям
Заголовок раздела «Разрешите вход только нужным пользователям»Если к серверу должны подключаться только конкретные аккаунты, укажите их явно:
AllowUsers holu holu2Измените стандартный порт
Заголовок раздела «Измените стандартный порт»Смените порт с 22 на любой другой, который вы будете использовать для SSH:
Port SELECTED_PORTЕсли вы меняете порт, не забудьте обновить правила фаервола.
Отключите ненужные функции
Заголовок раздела «Отключите ненужные функции»Отключите функции, которые не нужны для обычного SSH-доступа:
AllowTcpForwarding noX11Forwarding noAllowAgentForwarding noAuthorizedKeysFile .ssh/authorized_keysШаг 2. Ограничьте ошибки входа
Заголовок раздела «Шаг 2. Ограничьте ошибки входа»Чтобы снизить риск перебора пароля, ограничьте число попыток входа:
MaxAuthTries 2Шаг 3. Включите вход по ключу
Заголовок раздела «Шаг 3. Включите вход по ключу»Проверьте, что аутентификация по ключу разрешена:
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-releaseyum install google-authenticatorДля Arch Linux:
pacman -S libpam-google-authenticatorДля openSUSE / SLES:
zypper install google-authenticator-libpamНастройте Google Authenticator
Заголовок раздела «Настройте Google Authenticator»Запустите настройку:
google-authenticatorДальше:
- Ответьте
y, если хотите time-based токены. - Отсканируйте QR-код в приложении.
- Сохраните резервные коды.
- Подтвердите остальные вопросы.
Подключите PAM к SSH
Заголовок раздела «Подключите PAM к SSH»В файле /etc/pam.d/sshd закомментируйте строку:
@include common-authИ добавьте:
auth required pam_google_authenticator.soВ /etc/ssh/sshd_config включите:
ChallengeResponseAuthentication yesUsePAM yesAuthenticationMethods publickey,keyboard-interactiveЕсли у вас Ubuntu 22.04 и новее, используйте вместо ChallengeResponseAuthentication:
KbdInteractiveAuthentication yesПерезапустите SSH:
systemctl restart sshШаг 5. Проверьте конфигурацию
Заголовок раздела «Шаг 5. Проверьте конфигурацию»Перед перезапуском SSH проверьте синтаксис:
sshd -tЕсли ошибок нет, примените настройки:
systemctl restart sshПроверка
Заголовок раздела «Проверка»После всех изменений:
- откройте новое SSH-подключение;
- проверьте вход по ключу;
- проверьте вход с 2FA, если вы его включали;
- убедитесь, что старые способы доступа больше не нужны.
Если вы всё настроили правильно, SSH станет заметно безопаснее.