Введение
SSH (Secure Shell) — основной инструмент для удаленного управления Linux-серверами. Однако стандартная установка OpenSSH оставляет несколько уязвимостей, которые активно эксплуатируются злоумышленниками: подбор паролей, попытки входа под root, сканирование порта 22. Данный гайд проведет вас через пять ключевых шагов по усилению безопасности SSH-сервера. После выполнения вы получите защищенное соединение, устойчивое к автоматическим атакам, без ущерба для удобства работы.
Требования
Перед началом убедитесь, что у вас есть:
- Доступ к серверу с правами sudo (или root).
- Установленный OpenSSH-сервер (пакет
openssh-server). - Работающая аутентификация по SSH-ключам (рекомендуется настроить заранее).
- Резервная копия конфигурационного файла:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup - Текстовый редактор (
nano,vimили другой).
Шаг 1: Смена порта SSH
Стандартный порт 22 является целью массовых сканирований. Смена порта уменьшает шум от ботов.
- Откройте конфигурационный файл:
sudo nano /etc/ssh/sshd_config - Найдите строку
#Port 22, удалите символ#и измените номер порта, например, на2222:Port 2222⚠️ Важно: Выберите порт из диапазона 1024-65535, который не используется другими службами.
- Сохраните файл (
Ctrl+O,Enter,Ctrl+Xв nano). - Перезапустите SSH-демон:
- Для systemd (Ubuntu/Debian/CentOS 7+/Fedora):
sudo systemctl restart sshd # Ubuntu/Debian # или sudo systemctl restart ssh # CentOS/Fedora (пакет ssh)
- Для systemd (Ubuntu/Debian/CentOS 7+/Fedora):
- Откройте новый порт в фаерволе:
- UFW (Ubuntu/Debian):
sudo ufw allow 2222/tcp sudo ufw reload - firewalld (CentOS/Fedora):
sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload
- UFW (Ubuntu/Debian):
- Проверьте, что служба слушает новый порт:
В выводе должен бытьsudo ss -tlnp | grep sshd*:2222.
Шаг 2: Отключение root-логина
Вход под root — распространенная атака. Запретите его, используйте обычного пользователя с sudo.
- В том же файле
/etc/ssh/sshd_configнайдите параметр#PermitRootLoginи установите:PermitRootLogin no - Сохраните и перезапустите SSH-демон (как в шаге 1).
Шаг 3: Отключение аутентификации по паролю
Если вы используете SSH-ключи, отключите парольную аутентификацию — это устранит подбор пароля.
- В
/etc/ssh/sshd_configнайдите#PasswordAuthenticationи установите:PasswordAuthentication no - Критически важно: перед применением убедитесь, что вы можете войти по ключу с нового клиента. Проверьте:
Если подключение успешно — примените настройку.ssh -p 2222 user@your-server-ip - Перезапустите SSH-демон.
Шаг 4: Настройка Fail2ban
Fail2ban автоматически блокирует IP после нескольких неудачных попыток входа.
- Установите Fail2ban:
- Debian/Ubuntu:
sudo apt update && sudo apt install fail2ban - CentOS/Fedora:
sudo yum install fail2ban # CentOS 7 # или sudo dnf install fail2ban # CentOS 8+/Fedora
- Debian/Ubuntu:
- Создайте локальный конфиг (не редактируйте
jail.confнапрямую):sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local - Отредактируйте
jail.local:
Найдите секциюsudo nano /etc/fail2ban/jail.local[sshd]и убедитесь, что параметры соответствуют:enabled = true port = 2222 # если сменили порт, укажите его; иначе оставьте ssh filter = sshd logpath = /var/log/auth.log # Debian/Ubuntu # logpath = /var/log/secure # CentOS/Fedora maxretry = 3 # количество попыток перед блокировкой bantime = 3600 # блокировка на 1 час (в секундах)💡 Совет: Для CentOS/Fedora измените
logpathна/var/log/secure. - Перезапустите Fail2ban:
sudo systemctl restart fail2ban sudo systemctl enable fail2ban - Проверьте статус:
sudo fail2ban-client status sshd
Шаг 5: Ограничение пользователей
Разрешите подключение только конкретным пользователям, снизив риск компрометации служебных аккаунтов.
- В
/etc/ssh/sshd_configдобавьте (или раскомментируйте) параметрAllowUsers:AllowUsers alice bob admin # перечислите логины через пробел⚠️ Важно: Убедитесь, что ваш текущий пользователь включен в список, иначе заблокируете себя.
- Сохраните и перезапустите SSH-демон.
Проверка результата
Убедитесь, что все настройки работают:
- Подключитесь с нового клиента, используя:
- Нестандартный порт (если меняли):
ssh -p 2222 user@server-ip - Только ключевую аутентификацию (пароль должен отклоняться).
- Попробуйте войти под root — подключение должно быть отклонено.
- Нестандартный порт (если меняли):
- Проверьте статус Fail2ban:
В выводе должны быть заблокированные IP (если были попытки).sudo fail2ban-client status sshd - Убедитесь, что служба SSH слушает нужный порт:
sudo ss -tlnp | grep sshd
Возможные проблемы
- Заблокировали себя после настройки: используйте консольный доступ (KVM/IPMI) через панель хостинг-провайдера. В консоли откатите
/etc/ssh/sshd_configиз резервной копии и перезапустите SSH. - Порт не открыт в фаерволе: проверьте правила (
sudo ufw statusилиsudo firewall-cmd --list-all). Убедитесь, что порт добавлен и фаервол активен. - Подключение по ключу не работает: проверьте права на
~/.ssh/authorized_keys(должны быть600) и на домашнюю директорию (755). Убедитесь, что публичный ключ добавлен вauthorized_keys. - Fail2ban не блокирует IP: проверьте логи (
sudo tail -f /var/log/fail2ban.log). Убедитесь, чтоlogpathвjail.localуказывает на правильный файл (auth.logдля Debian/Ubuntu,secureдля CentOS/Fedora). - SSH не перезапускается: проверьте синтаксис конфига перед перезапуском:
Если вывод пустой — конфиг корректен.sudo sshd -t