Добавить в корзинуПозвонить
Найти в Дзене
Kravchenko Web Lab

Безопасность SSH: что нужно настроить в первую очередь

Ты настроил сервер и первым делом дал себе доступ по SSH. И сразу возникает вопрос: что сделать первым, чтобы утром не обнаружить попытки взлома в логах? В этой статье — только практичные шаги, которые реально закроют распространённые дыры, без лишней теории. Сгенерируй ключ: ssh-keygen -t ed25519, перенеси публичный ключ на сервер через ssh-copy-id или вручную в ~/.ssh/authorized_keys. В конфигурации /etc/ssh/sshd_config включи PubkeyAuthentication yes и выключи PasswordAuthentication no. Это сразу уберёт тысячи автоматических подборов паролей. PermitRootLogin no — одна строка в конфиге, но сколько проблем она решит. Дай себе обычный пользовательский аккаунт и настроь sudo. Я однажды восстановил сервер именно потому, что root был закрыт и злоумышленник не мог выполнить критические изменения. Установи MaxAuthTries 3 и LoginGraceTime 30s в sshd_config. Пара дополнений: ClientAliveInterval 300 и ClientAliveCountMax 2 помогут завершать брошенные сессии. Дополнительно поставь Fail2Ban
Оглавление

Ты настроил сервер и первым делом дал себе доступ по SSH. И сразу возникает вопрос: что сделать первым, чтобы утром не обнаружить попытки взлома в логах? В этой статье — только практичные шаги, которые реально закроют распространённые дыры, без лишней теории.

Первое и самое важное — ключи вместо паролей

Сгенерируй ключ: ssh-keygen -t ed25519, перенеси публичный ключ на сервер через ssh-copy-id или вручную в ~/.ssh/authorized_keys. В конфигурации /etc/ssh/sshd_config включи PubkeyAuthentication yes и выключи PasswordAuthentication no.

Это сразу уберёт тысячи автоматических подборов паролей.

Второе — запрети вход под root

PermitRootLogin no — одна строка в конфиге, но сколько проблем она решит. Дай себе обычный пользовательский аккаунт и настроь sudo. Я однажды восстановил сервер именно потому, что root был закрыт и злоумышленник не мог выполнить критические изменения.

Третье — ограничь попытки входа и таймауты

Установи MaxAuthTries 3 и LoginGraceTime 30s в sshd_config. Пара дополнений: ClientAliveInterval 300 и ClientAliveCountMax 2 помогут завершать брошенные сессии. Дополнительно поставь Fail2Ban — он автоматически блокирует IP, которые грубо брутфорсят SSH.

Четвёртое — фильтрация по сети

Открой доступ к SSH только с нужных IP через ufw/iptables/firewalld, или используй AllowUsers/AllowGroups в sshd_config для ограничения пользователей. Если у тебя динамический доступ из дома — настроь VPN или jump host (bastion) и держи SSH только внутри защищённой сети. Смена порта (Port 2222) — это лишь маскировка; не полагайся на неё как на защиту, но как дополнительный барьер — полезно.

Пятое — управление ключами и надежные пароли

Никогда не используйте один и тот же приватный ключ на нескольких машинах без обдумывания. Дай ключам passphrase и пользуйся ssh-agent, чтобы не вводить его каждый раз. Поменяй ключи, если сотрудник уходит или ты не уверен в безопасности устройства, где они хранились.

Шестое — логирование и мониторинг

Смотри /var/log/auth.log или journalctl -u sshd, добавь простые оповещения: Fail2Ban уже подскажет многие атаки, но настрой и уведомления на случай подозрительной активности (частые попытки входа, новые ключи в authorized_keys).

Регулярно просматривай авторизации: когда и откуда заходили, откуда были неудачные попытки

Седьмое — дополнительные механики безопасности

Подумай о двухфакторной аутентификации (Google Authenticator, Duo) для SSH или использовании SSH Certificates (CA) вместо множества ключей — это чуть сложнее, но удобно в масштабах. Для сервисов SFTP используйте internal-sftp + ChrootDirectory, чтобы ограничить область доступа пользователя.

Восьмое — поддержка и обновления

Обновляй OpenSSH и систему: уязвимости закрывают патчами. Проверь список разрешённых шифров и MACов, но будь аккуратен — не блокируй старые клиенты, если они тебе нужны. Защищённый SSH — это не разовая настройка, а поддерживаемый процесс.

Короткая чек-листовая свёртка:

1) Включи аутентификацию по ключам и отключи пароли.
2) Запрети вход под root.
3) Установи MaxAuthTries и LoginGraceTime.
4) Поставь Fail2Ban или аналог и настрой firewall.
5) Ограничь доступ по IP или используй bastion/VPN.
6) Дай ключам passphrase и управляй ими (rotate/revoke).
7) Включи логирование и настрой оповещения.
8) Обновляй OpenSSH регулярно.

И напоследок — вопрос: хочешь потратить час сейчас и спать спокойно, или тратить часы на восстановление после взлома? Начни с ключей, запрети root и включи Fail2Ban — это даст самый большой выигрыш при минимальных усилиях.