Если сервер доступен из интернета, SSH становится первой точкой атаки. Боты начинают brute-force через минуты после публикации IP-адреса.
Ниже — production-ready конфигурация SSH для Ubuntu/Debian: аутентификация по ключу, отключение root, запрет паролей, ограничение пользователей, Fail2ban, firewall и автообновления безопасности.
- Почему нельзя оставлять SSH по умолчанию
- Шаг 1. Создание обычного пользователя
- Шаг 2. Генерация SSH-ключа (ed25519)
- Linux / macOS
- Windows (PowerShell)
- Шаг 3. Добавление публичного ключа
- Шаг 4. Отключение root и паролей
- Проверка активной конфигурации
- Шаг 5. Настройка firewall (UFW)
- Шаг 6. Fail2ban для защиты от brute-force
- Шаг 7. Автоматические обновления безопасности
- Финальная secure-конфигурация
- Частые ошибки
- Заключение
Почему нельзя оставлять SSH по умолчанию
Стандартная конфигурация OpenSSH обычно допускает вход по паролю и root-доступ. Это создаёт постоянную нагрузку из-за brute-force и повышает риск компрометации.
Без hardening сервер получает:
- непрерывные попытки подбора пароля;
- увеличение latency при high-load атаках;
- потенциальный полный контроль над системой.
Решение — минимизация поверхности атаки и переход на ключевую аутентификацию.
Шаг 1. Создание обычного пользователя
Работа по SSH должна выполняться через обычного пользователя с sudo-доступом.
sudo adduser <username>
sudo usermod -aG sudo <username> Проверка:
id <username> Шаг 2. Генерация SSH-ключа (ed25519)
Алгоритм ed25519 обеспечивает оптимальный баланс безопасности и производительности.
Linux / macOS
ssh-keygen -t ed25519 -C "device-name" Windows (PowerShell)
ssh-keygen -t ed25519 -C "device-name" Создаются файлы:
id_ed25519— приватный ключ;id_ed25519.pub— публичный ключ.
Приватный ключ никогда не передаётся и не копируется на сервер.
Шаг 3. Добавление публичного ключа
На сервере необходимо создать каталог .ssh в домашней директории текущего пользователя и добавить в файл authorized_keys публичный ключ.
mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys В файл вставляется содержимое id_ed25519.pub одной строкой без переносов.
После добавления ключа необходимо выставить корректные права доступа:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys Проверка подключения к серверу:
ssh <username>@<server_ip> Шаг 4. Отключение root и паролей
Перед изменением конфигурации создаётся резервная копия:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak Проверка активной конфигурации
В современных версиях Ubuntu/Debian параметры могут переопределяться файлами из каталога sshd_config.d. Перед изменением конфигурации необходимо проверить, какие значения реально применяются:
sudo sshd -T | grep -E "permitrootlogin|passwordauthentication" Чтобы увидеть дополнительные конфигурационные файлы:
sudo ls -la /etc/ssh/sshd_config.d/ Файлы читаются в лексикографическом порядке. Настройки из файлов с большим номером (например, 99-*.conf) переопределяют параметры из файлов с меньшим номером (например, 60-cloudimg-settings.conf).
Применение безопасных параметров:
sudo sed -i \
-e 's/^#\?PermitRootLogin.*/PermitRootLogin no/' \
-e 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' \
-e 's/^#\?PubkeyAuthentication.*/PubkeyAuthentication yes/' \
-e 's/^#\?ChallengeResponseAuthentication.*/ChallengeResponseAuthentication no/' \
/etc/ssh/sshd_config Ограничение доступа конкретным пользователем:
echo "AllowUsers <username>" | sudo tee -a /etc/ssh/sshd_config Перезапуск службы:
sudo systemctl restart ssh Проверка активных параметров:
sudo sshd -T | grep -E "permitrootlogin|passwordauthentication" Парольную аутентификацию отключают только после проверки входа по ключу.
Шаг 5. Настройка firewall (UFW)
UFW снижает поверхность атаки и ограничивает сетевой доступ.
sudo apt install ufw -y
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw limit 22/tcp
sudo ufw enable Проверка статуса:
sudo ufw status Параметр limit активирует rate limiting для защиты от частых попыток подключения.
Шаг 6. Fail2ban для защиты от brute-force
Fail2ban анализирует логи и блокирует IP-адреса при превышении порога ошибок аутентификации.
sudo apt update
sudo apt install fail2ban -y Создание локальной конфигурации:
sudo nano /etc/fail2ban/jail.local [DEFAULT]
bantime = 24h
findtime = 10m
maxretry = 3
backend = systemd
[sshd]
enabled = true Перезапуск:
sudo systemctl restart fail2ban Проверка статуса:
sudo fail2ban-client status Шаг 7. Автоматические обновления безопасности
Security-патчи должны устанавливаться автоматически для снижения времени уязвимости.
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure unattended-upgrades Механизм устанавливает обновления из security-репозиториев без ручного вмешательства.
Финальная secure-конфигурация
- Root-доступ по SSH отключён;
- Парольная аутентификация отключена;
- Вход только по ed25519-ключу;
- Доступ ограничен конкретным пользователем;
- Firewall активирован;
- Fail2ban блокирует brute-force;
- Автообновления безопасности включены.
Такая конфигурация соответствует best practices 2026 года для публичных VPS и production-инфраструктуры.
Частые ошибки
- Отключение пароля до проверки ключа;
- Работа через root;
- Неверные права на каталог
.ssh; - Передача приватного ключа третьим лицам;
- Отсутствие firewall.
Заключение
Hardening SSH занимает менее 20 минут, но радикально снижает риск компрометации сервера. Ключевая аутентификация, отключение root, Fail2ban и firewall формируют минимально необходимый уровень защиты для любой публичной Linux-инфраструктуры.









