Linux

Укрепление безопасности SSH на Linux: пошаговая инструкция

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

Обновлено 15 февраля 2026 г.
15-20 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 20.04+Debian 10+CentOS 7+Fedora 35+

Введение

SSH (Secure Shell) — основной инструмент для удаленного управления Linux-серверами. Однако стандартная установка OpenSSH оставляет несколько уязвимостей, которые активно эксплуатируются злоумышленниками: подбор паролей, попытки входа под root, сканирование порта 22. Данный гайд проведет вас через пять ключевых шагов по усилению безопасности SSH-сервера. После выполнения вы получите защищенное соединение, устойчивое к автоматическим атакам, без ущерба для удобства работы.

Требования

Перед началом убедитесь, что у вас есть:

  • Доступ к серверу с правами sudo (или root).
  • Установленный OpenSSH-сервер (пакет openssh-server).
  • Работающая аутентификация по SSH-ключам (рекомендуется настроить заранее).
  • Резервная копия конфигурационного файла:
    sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
    
  • Текстовый редактор (nano, vim или другой).

Шаг 1: Смена порта SSH

Стандартный порт 22 является целью массовых сканирований. Смена порта уменьшает шум от ботов.

  1. Откройте конфигурационный файл:
    sudo nano /etc/ssh/sshd_config
    
  2. Найдите строку #Port 22, удалите символ # и измените номер порта, например, на 2222:
    Port 2222
    

    ⚠️ Важно: Выберите порт из диапазона 1024-65535, который не используется другими службами.

  3. Сохраните файл (Ctrl+O, Enter, Ctrl+X в nano).
  4. Перезапустите SSH-демон:
    • Для systemd (Ubuntu/Debian/CentOS 7+/Fedora):
      sudo systemctl restart sshd   # Ubuntu/Debian
      # или
      sudo systemctl restart ssh    # CentOS/Fedora (пакет ssh)
      
  5. Откройте новый порт в фаерволе:
    • UFW (Ubuntu/Debian):
      sudo ufw allow 2222/tcp
      sudo ufw reload
      
    • firewalld (CentOS/Fedora):
      sudo firewall-cmd --permanent --add-port=2222/tcp
      sudo firewall-cmd --reload
      
  6. Проверьте, что служба слушает новый порт:
    sudo ss -tlnp | grep sshd
    
    В выводе должен быть *:2222.

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

Вход под root — распространенная атака. Запретите его, используйте обычного пользователя с sudo.

  1. В том же файле /etc/ssh/sshd_config найдите параметр #PermitRootLogin и установите:
    PermitRootLogin no
    
  2. Сохраните и перезапустите SSH-демон (как в шаге 1).

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

Если вы используете SSH-ключи, отключите парольную аутентификацию — это устранит подбор пароля.

  1. В /etc/ssh/sshd_config найдите #PasswordAuthentication и установите:
    PasswordAuthentication no
    
  2. Критически важно: перед применением убедитесь, что вы можете войти по ключу с нового клиента. Проверьте:
    ssh -p 2222 user@your-server-ip
    
    Если подключение успешно — примените настройку.
  3. Перезапустите SSH-демон.

Шаг 4: Настройка Fail2ban

Fail2ban автоматически блокирует IP после нескольких неудачных попыток входа.

  1. Установите Fail2ban:
    • Debian/Ubuntu:
      sudo apt update && sudo apt install fail2ban
      
    • CentOS/Fedora:
      sudo yum install fail2ban   # CentOS 7
      # или
      sudo dnf install fail2ban   # CentOS 8+/Fedora
      
  2. Создайте локальный конфиг (не редактируйте jail.conf напрямую):
    sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    
  3. Отредактируйте jail.local:
    sudo nano /etc/fail2ban/jail.local
    
    Найдите секцию [sshd] и убедитесь, что параметры соответствуют:
    enabled = true
    port = 2222    # если сменили порт, укажите его; иначе оставьте ssh
    filter = sshd
    logpath = /var/log/auth.log   # Debian/Ubuntu
    # logpath = /var/log/secure   # CentOS/Fedora
    maxretry = 3   # количество попыток перед блокировкой
    bantime = 3600   # блокировка на 1 час (в секундах)
    

    💡 Совет: Для CentOS/Fedora измените logpath на /var/log/secure.

  4. Перезапустите Fail2ban:
    sudo systemctl restart fail2ban
    sudo systemctl enable fail2ban
    
  5. Проверьте статус:
    sudo fail2ban-client status sshd
    

Шаг 5: Ограничение пользователей

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

  1. В /etc/ssh/sshd_config добавьте (или раскомментируйте) параметр AllowUsers:
    AllowUsers alice bob admin   # перечислите логины через пробел
    

    ⚠️ Важно: Убедитесь, что ваш текущий пользователь включен в список, иначе заблокируете себя.

  2. Сохраните и перезапустите SSH-демон.

Проверка результата

Убедитесь, что все настройки работают:

  1. Подключитесь с нового клиента, используя:
    • Нестандартный порт (если меняли): ssh -p 2222 user@server-ip
    • Только ключевую аутентификацию (пароль должен отклоняться).
    • Попробуйте войти под root — подключение должно быть отклонено.
  2. Проверьте статус Fail2ban:
    sudo fail2ban-client status sshd
    
    В выводе должны быть заблокированные IP (если были попытки).
  3. Убедитесь, что служба SSH слушает нужный порт:
    sudo ss -tlnp | grep sshd
    

Возможные проблемы

  • Заблокировали себя после настройки: используйте консольный доступ (KVM/IPMI) через панель хостинг-провайдера. В консоли откатите /etc/ssh/sshd_config из резервной копии и перезапустите SSH.
  • Порт не открыт в фаерволе: проверьте правила (sudo ufw status или sudo firewall-cmd --list-all). Убедитесь, что порт добавлен и фаервол активен.
  • Подключение по ключу не работает: проверьте права на ~/.ssh/authorized_keys (должны быть 600) и на домашнюю директорию (755). Убедитесь, что публичный ключ добавлен в authorized_keys.
  • Fail2ban не блокирует IP: проверьте логи (sudo tail -f /var/log/fail2ban.log). Убедитесь, что logpath в jail.local указывает на правильный файл (auth.log для Debian/Ubuntu, secure для CentOS/Fedora).
  • SSH не перезапускается: проверьте синтаксис конфига перед перезапуском:
    sudo sshd -t
    
    Если вывод пустой — конфиг корректен.

Часто задаваемые вопросы

Зачем менять стандартный порт SSH?
Безопасно ли полностью отключать аутентификацию по паролю в SSH?
Что делать, если потерял доступ к серверу после настройки SSH?
Fail2ban может заблокировать мой IP случайно?

Полезное

Смена порта SSH
Отключение root-логина
Отключение аутентификации по паролю
Настройка Fail2ban
Ограничение пользователей