mysurik.ru

Повышение Безопасности SSH-соединений: Практические Меры и Рекомендации

p7f0

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

SSH предоставляет зашифрованный канал связи, что позволяет безопасно выполнять команды и передавать файлы. Но именно из-за своей популярности он привлекает злоумышленников. В этой статье я расскажу, какие меры я применил, чтобы сделать SSH-соединения безопаснее.


1. Отключение прямого входа для root

Прямой вход под root — это серьёзная угроза. Если пароль root угадают, злоумышленник получит полный контроль над системой. Я сразу отказался от входа под root и создал отдельного пользователя с обычными привилегиями. Административные задачи выполняю через sudo.

Для отключения входа root в файле конфигурации SSH я выполнил:

sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config
# Или, если строка закомментирована:
# echo "PermitRootLogin no" | sudo tee -a /etc/ssh/sshd_config

После этого даже при угаданном пароле root никто не сможет войти напрямую. Администратор использует обычного пользователя и sudo. Такая практика стала для меня базовой на каждом сервере.

2. Аутентификация по ключам вместо паролей

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

Как я это сделал:

  • Генерация ключей: на локальном компьютере я выполнил ssh-keygen.
  • Копирование ключа на сервер: командой ssh-copy-id username@server_ip. Если бы команда не сработала, я бы скопировал ключ вручную в ~/.ssh/authorized_keys.
  • Отключение паролей: после проверки входа по ключу я отключил пароли в /etc/ssh/sshd_config:
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

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

3. Изменение стандартного порта SSH

Изменение порта не даёт полной защиты, но сильно снижает количество автоматических атак. Сканеры в первую очередь проверяют стандартный порт 22. Я перевёл SSH на нестандартный порт 2222, и количество попыток входа резко упало.

В файле sshd_config я изменил строку порта:

sudo sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config
# Или добавьте, если строка отсутствует:
# echo "Port 2222" | sudo tee -a /etc/ssh/sshd_config

Важно: перед перезапуском SSH я обновил фаервол, чтобы открыть новый порт: sudo ufw allow 2222/tcp. Без этого я бы отрезал себе доступ к серверу.

4. Использование Fail2Ban

Fail2Ban сканирует логи и автоматически блокирует адреса, которые делают много неудачных попыток входа. Я установил его на сервер и настроил бан после нескольких попыток. Теперь агрессивные боты получают блокировку на длительное время.

Установка на Ubuntu:

sudo apt update
sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

В файле jail.local я отрегулировал параметры: время блокировки и количество попыток. После настройки Fail2Ban подозрительная активность в логах практически исчезла.

5. Ограничение доступа по IP

Я администрирую серверы с фиксированных адресов, поэтому настроил доступ по белому списку. Фаервол разрешает SSH только с доверенных IP. Это одна из самых эффективных мер, которые я применил.

Пример с UFW:

sudo ufw allow from my_static_ip to any port 2222

Если с вашего адреса SSH закрыт, до сервера не доберётся никто другой. Конечно, это работает только при статическом IP. Но если есть такая возможность, обязательно используйте её.

6. Пустые пароли и протокол версии 2

Я проверил, что SSH не допускает вход с пустыми паролями и использует только протокол версии 2. По умолчанию эти настройки обычно корректны, но лишний раз убедиться не помешает:

PermitEmptyPasswords no
Protocol 2

7. Регулярное обновление SSH-сервера

В программном обеспечении постоянно находят уязвимости. Я обновляю систему регулярно, чтобы SSH всегда имел актуальные исправления. Вместе с автообновлениями безопасности это закрывает дыры ещё до того, как ими успеют воспользоваться.

После любых изменений в /etc/ssh/sshd_config я перезапускаю службу:

sudo systemctl restart sshd # Для большинства систем
sudo systemctl restart ssh # Для некоторых систем

Критически важно: я всегда проверяю возможность повторного подключения в новой сессии, прежде чем закрывать текущую. Один раз я чуть не остался без доступа к серверу, и теперь это правило для меня святое.


Что изменилось после всех настроек

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

Самое ценное, что я понял: безопасность SSH — это не одна мера, а их сочетание. Ключи, закрытый root, смена порта, Fail2Ban и ограничение по IP работают вместе, создавая несколько слоёв защиты. Даже если один слой прорвут, другие остановят атаку.

Резервная копия конфигурации SSH

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

Также я сохраняю приватные ключи в защищённом месте с резервной копией. Потерять ключ — значит потерять доступ к серверу. Поэтому ключи у меня хранятся надёжно и продублированы на другом устройстве.

Почему не стоит доверять только смене порта

Смена порта — полезная мера, но она не делает SSH безопасным сама по себе. Умные атакующие могут найти SSH и на нестандартном порту. Поэтому я рассматриваю смену порта лишь как способ уменьшить шум, а не как основную защиту. Главное — ключи и ограничение доступа.

Я бы не советовал успокаиваться после смены порта. Если на сервере слабые пароли и открытый root, рано или поздно найдут и нестандартный порт. Сочетание всех мер даёт настоящую защиту, а не отдельная опция.

Работа с несколькими серверами

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

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

Как быть, если доступ уже потерян

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

Я сам попадал в такую ситуацию и спасся консолью. Главное — не паниковать и помнить, что доступ можно вернуть. После восстановления я всегда разбираюсь, что именно пошло не так, чтобы не повторить ошибку.

Автоматизация защиты SSH

Чтобы не настраивать защиту вручную на каждом сервере, я использую небольшие скрипты. Они применяют стандартный набор правил SSH, ставят Fail2Ban и проверяют конфигурацию. Так настройка занимает минуты, а не час, и не зависит от памяти.

Скрипты я храню в своей коллекции и дополняю новыми проверками. При создании нового сервера я просто запускаю скрипт и получаю настроенную защиту. Такой подход сэкономил мне много времени и сделал процесс повторяемым.

Мои ошибки на этом пути

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

Вторая ошибка — я слишком рано отключил вход по паролю. Ключ на новом ноутбуке ещё не был настроен, и я чуть не остался снаружи. Теперь я сначала настраиваю ключи на всех своих устройствах и только потом отключаю пароли.

Как проверить настройки SSH

Я выработал простой чек-лист для проверки конфигурации SSH. Смотрю, что вход по root запрещён, пароли отключены, порт нестандартный, Fail2Ban запущен. Если что-то из этого не так — исправляю сразу.

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

Проверка целостности ключей

Иногда я проверяю, что мои ключи на месте и работают. Для этого просто пробую подключиться к серверу с разных устройств. Если с какого-то устройства вход не работает, я сразу разбираюсь: может, ключ не скопирован или права на файл сбиты.

Права на файл ключа имеют значение: слишком открытые права приводят к отказу в подключении. Я проверяю, что приватный ключ доступен только владельцу. Мелочь, но без неё SSH может вести себя странно.

Обновление ключей при смене устройства

Когда я меняю компьютер, первым делом генерирую новый ключ и добавляю его на серверы. Старый ключ при этом убираю, чтобы не плодить ненужные записи. Такой порядок поддерживает список ключей в порядке и не оставляет доступ от устаревших устройств.

Перед удалением старого ключа я всегда проверяю, что новый работает. Это правило спасло меня от потери доступа при смене рабочего ноутбука. Аккуратность с ключами — часть общей культуры безопасности.

Итог и напутствие

Защита SSH — это комплекс мер, которые я применяю на каждом сервере. Ключи вместо паролей, закрытый root, нестандартный порт, Fail2Ban и ограничение по IP. Вместе они дают уверенность, что сервер не станет жертвой автоматических атак.

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

Планы на дальнейшую защиту

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

Главный совет, который я могу дать: не откладывайте защиту SSH на потом. Настройте ключи, закройте root и поставьте Fail2Ban уже сегодня. Это займёт не больше часа, а защитит ваш сервер от большинства атак в интернете.

Ваш комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *