Минимальная защита SSH на свежем VPS

  linuxssh

Публичный IP начинают перебирать по SSH буквально через минуты после запуска сервера. Это не персональная атака, а фоновый шум интернета. Ниже минимальный набор шагов, который я делаю на каждом новом сервере.

Ключ вместо пароля

Генерируем ключ Ed25519 на своём компьютере. Параметр -a 100 задаёт число раундов KDF и усложняет перебор passphrase, если приватный ключ утечёт.

ssh-keygen -t ed25519 -a 100 -C "laptop"
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server

Настройки в отдельном файле

Современный OpenSSH читает файлы из /etc/ssh/sshd_config.d/. Важная деталь: для большинства параметров действует первое найденное значение, поэтому файл с префиксом 01- перекроет, например, 50-cloud-init.conf.

PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
MaxAuthTries 3
LoginGraceTime 30
X11Forwarding no
AllowAgentForwarding no

Проверить до перезапуска

sudo sshd -t && sudo systemctl restart ssh
sudo sshd -T | grep -Ei 'passwordauth|permitroot'

Текущую сессию не закрываю, пока не проверю вход из второго окна. Это самая дешёвая страховка от потери доступа.

Что проверить снаружи

ssh -o PubkeyAuthentication=no -o PreferredAuthentications=password user@server
# ожидаем: Permission denied (publickey)
Настройки sshd одинаково действуют на IPv4 и IPv6. А вот файрвол нужно проверять для обоих стеков отдельно.