Перейти к содержанию
Innovialabs

Как защитить SSH на Linux-сервере

Практика3 мин

Коротко

Безопасный SSH — это вход только по ключам под отдельным пользователем с sudo, запрет входа для root и по паролю, fail2ban против перебора, файрвол с ограничением доступа и регулярный просмотр логов. Для критичных серверов добавьте второй фактор, например аппаратный ключ.

Что сделать в первую очередь

Любой сервер с открытым портом 22 постоянно получает попытки входа от ботов. Минимальный набор защиты:

  1. Вход только по SSH-ключам.
  2. Запрет входа для root и по паролю.
  3. Отдельный пользователь с sudo.
  4. fail2ban или аналог против перебора.
  5. Файрвол, который открывает SSH только нужным адресам, если это возможно.

Главное правило при настройке: не закрывайте текущую сессию, пока не проверите вход в новом окне терминала. Иначе легко потерять доступ к серверу.

Шаг 1. Отдельный пользователь и ключи

Создайте пользователя на сервере и дайте ему права sudo (команда зависит от дистрибутива — например, группа sudo в Debian/Ubuntu или wheel в RHEL-подобных системах).

На своём компьютере создайте ключ и скопируйте открытую часть на сервер:

ssh-keygen -t ed25519 -C "laptop-work"
ssh-copy-id deploy@your-server

Защитите приватный ключ парольной фразой — тогда украденный файл ключа сам по себе бесполезен. Для каждого устройства лучше заводить свой ключ: при потере ноутбука удаляется одна строка в authorized_keys.

Шаг 2. Настройка sshd

Откройте /etc/ssh/sshd_config (или создайте файл в /etc/ssh/sshd_config.d/, если дистрибутив его подключает) и задайте:

PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
AllowUsers deploy
MaxAuthTries 3

Проверьте синтаксис и перечитайте конфигурацию:

sudo sshd -t && sudo systemctl reload ssh

В некоторых дистрибутивах служба называется sshd. После перезагрузки конфигурации откройте новое окно и убедитесь, что входите по ключу.

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

Шаг 3. fail2ban

fail2ban читает логи и временно блокирует IP после нескольких неудачных попыток. Минимальная настройка в /etc/fail2ban/jail.local:

[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h

Статус и заблокированные адреса:

sudo fail2ban-client status sshd

При входе только по ключам перебор паролей уже бесполезен, но fail2ban снижает нагрузку и шум в логах.

Шаг 4. Файрвол

Закройте всё, что не нужно, и по возможности ограничьте SSH доверенными адресами. Пример для ufw:

sudo ufw default deny incoming
sudo ufw allow from 203.0.113.10 to any port 22 proto tcp
sudo ufw allow 80,443/tcp
sudo ufw enable

Если постоянного IP нет, используйте VPN или бастион-сервер (jump host): SSH открыт только для него, а он защищён особенно тщательно. Многие облачные провайдеры также дают сетевые фильтры (security groups) — это дополнительный слой перед сервером.

Шаг 5. Второй фактор

Для критичных серверов добавьте 2FA. Два распространённых варианта:

ВариантКак работаетОсобенности
Аппаратный ключ (FIDO2)Ключ типа ed25519-sk, нужен физический токенПростая настройка, защита от кражи файла ключа
TOTP через PAMКлюч плюс код из приложения-аутентификатораНужна настройка PAM и AuthenticationMethods

Аппаратный ключ создаётся так:

ssh-keygen -t ed25519-sk

Для TOTP-варианта проверьте инструкцию вашего дистрибутива и обязательно оставьте открытой рабочую сессию на время тестирования.

Шаг 6. Аудит входов

Регулярно смотрите, кто и откуда входит:

sudo journalctl -u ssh --since "24 hours ago"
last -n 20
sudo lastb -n 20

Что проверять:

  • успешные входы с незнакомых IP;
  • новые строки в ~/.ssh/authorized_keys у пользователей;
  • появление новых пользователей с правами sudo.

Для нескольких серверов удобнее отправлять логи в централизованную систему и настроить оповещения.

Частые вопросы

Это необязательно. Смена порта сокращает количество автоматических попыток, но не защищает от целенаправленного сканирования. Ключи, запрет паролей и файрвол важнее.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.