Через 10–15 минут после запуска любого VPS в логи начинают ломиться боты: сканеры круглосуточно перебирают пароли на стандартном 22-м порту. Сменить SSH-порт — самый быстрый способ убрать 95–99% этого шума: логи становятся читаемыми, fail2ban перестаёт банить сотни адресов в сутки, а нагрузка от мусорных соединений падает до нуля. В этой статье — пошаговая инструкция, как сменить SSH-порт на Ubuntu 24.04 LTS с учётом важного нюанса (systemd socket activation, из-за которого «классическая» правка конфига не срабатывает), и ещё пять способов защиты SSH, которые стоит применить вместе со сменой порта.
Зачем менять SSH-порт: что это даёт, а что — нет
Посмотрите на любой свежий сервер со стандартным портом:
sudo journalctl -u ssh --since "1 hour ago" | grep "Failed password" | wc -l
Сотни и тысячи неудачных попыток входа в час — это норма для порта 22. Боты сканируют весь IPv4-диапазон и первым делом проверяют стандартные порты. Что даёт перенос SSH на нестандартный порт:
- Чистые логи. Вместо тысяч записей о переборе — только ваши подключения. Реальную атаку теперь видно сразу.
- Меньше нагрузки. Каждое TCP-соединение и попытка аутентификации — это работа CPU и записи на диск. На слабом VPS шум ботов заметен.
- Отсечение массовых эксплойтов. Когда в очередной версии OpenSSH находят уязвимость, ботнеты бьют по порту 22. Нестандартный порт даёт время на обновление.
Чего смена порта не даёт: защиты от целевой атаки. Сканер вроде nmap найдёт SSH на любом порту за минуты. Поэтому смена порта — это снижение шума, а защита ssh строится на ключах и fail2ban, о которых ниже.
Важно: socket activation в Ubuntu 24.04
Начиная с Ubuntu 22.10 (и, соответственно, в Ubuntu 24.04 LTS) OpenSSH по умолчанию запускается через systemd socket activation: TCP-порт открывает не сам демон sshd, а юнит ssh.socket. Демон стартует только при входящем соединении. Проверить легко:
systemctl status ssh.socket
Из-за этого возникает классическая ошибка: администратор правит Port в /etc/ssh/sshd_config, делает systemctl restart ssh — а сервер продолжает слушать порт 22, потому что порт задан на уровне сокета.
В Ubuntu 24.04 это решено удобно: в состав openssh-server входит systemd-генератор, который при daemon-reload читает директивы Port и ListenAddress из sshd_config и автоматически применяет их к ssh.socket. То есть конфиг править можно и нужно — главное, не забыть daemon-reload и перезапустить именно сокет. Оба варианта разберём в инструкции.
Как сменить SSH-порт на Ubuntu 24.04: пошаговая инструкция
Главное правило: не закрывайте текущую SSH-сессию, пока не убедитесь, что вход по новому порту работает. Все проверки делайте во втором окне терминала.
Шаг 1. Выберите новый порт
Подойдёт любой свободный порт из диапазона 1024–65535: классический 2222, «читаемый» 22022 или случайный вроде 49222 (высокие порты сканируют реже). Убедитесь, что порт не занят:
sudo ss -tlnp | grep :49222
Пустой вывод — порт свободен.
Шаг 2. Откройте новый порт в файрволе
Сначала файрвол, потом SSH — только в таком порядке. Если у вас настроен UFW (если нет — вот инструкция по настройке UFW на Ubuntu):
sudo ufw allow 49222/tcp comment 'SSH new port'
sudo ufw status numbered
Правило для порта 22 пока оставляем — удалим его в самом конце.
Шаг 3. Пропишите порт в sshd_config
sudo nano /etc/ssh/sshd_config
Найдите строку #Port 22, раскомментируйте и замените:
Port 49222
На переходный период можно оставить оба порта — просто укажите две строки Port подряд (22 и 49222), а после проверки удалить первую. Проверьте синтаксис конфига:
sudo sshd -t
Нет вывода — ошибок нет. Учтите: если в каталоге /etc/ssh/sshd_config.d/ лежат файлы облачной инициализации (например, 50-cloud-init.conf), директивы из них имеют приоритет — загляните туда, если порт «не применяется».
Шаг 4. Перезапустите SSH с учётом socket activation
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket ssh.service
daemon-reload запускает генератор, который переносит порт из sshd_config в сокет. Проверьте, что сервер слушает новый порт:
sudo ss -tlnp | grep -E '22|49222'
Альтернатива: отключить socket activation совсем и вернуться к классической схеме, когда порт открывает сам демон. Тогда sshd будет читать порт напрямую из конфига, как в старых версиях Ubuntu:
sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service
Оба способа рабочие; первый — «родной» для Ubuntu 24.04, второй удобен, если вы управляете парком серверов на разных версиях ОС одними скриптами.
Шаг 5. Проверьте вход по новому порту
В новом окне терминала (старую сессию не трогаем!):
ssh -p 49222 user@203.0.113.10
Вход работает — отлично. Чтобы не указывать порт каждый раз, добавьте его в ~/.ssh/config на своём компьютере:
Host myvps
HostName 203.0.113.10
Port 49222
User user
Шаг 6. Закройте порт 22
sudo ufw delete allow 22/tcp
Если оставляли в конфиге строку Port 22 — удалите её и повторите шаг 4. Всё: с этой минуты боты стучатся в закрытую дверь, а в логах — тишина.
Ещё 5 способов снизить шум ботов и укрепить защиту SSH
Смена порта — первый слой. Вот что стоит сделать следом, по убыванию важности.
1. SSH-ключи вместо пароля
Самая эффективная мера: перебор становится бессмысленным в принципе. Сгенерируйте ключ, загрузите на сервер и отключите парольный вход (PasswordAuthentication no). Подробная инструкция — в статье «SSH-ключи вместо пароля: настройка за 5 минут».
2. Fail2ban
Автоматически банит IP после нескольких неудачных попыток входа. Даже на нестандартном порту пригодится против упорных сканеров. Не забудьте указать новый порт в jail: port = 49222. Разбор настройки — в статье про Fail2ban и блокировку подбора паролей.
3. Ограничения в sshd_config
PermitRootLogin no
MaxAuthTries 3
LoginGraceTime 20
AllowUsers user
Запрет входа под root, три попытки аутентификации вместо шести, 20 секунд на вход и белый список пользователей — четыре строки, которые режут поверхность атаки.
4. Доступ только с доверенных IP
Если у вас статический IP (дом, офис, VPN), закройте SSH для всех остальных:
sudo ufw delete allow 49222/tcp
sudo ufw allow from 198.51.100.5 to any port 49222 proto tcp
Это сильнее любой смены порта, но требует запасного канала (консоль в панели хостинга) на случай смены вашего IP.
5. Rate-limiting на уровне файрвола
UFW умеет ограничивать частоту новых соединений — больше 6 за 30 секунд с одного IP приводят к блокировке:
sudo ufw limit 49222/tcp
Сравнение методов: что выбрать
| Метод | Против массовых ботов | Против целевой атаки | Сложность |
|---|---|---|---|
| Смена SSH-порта | Отлично | Слабо | 10 минут |
| SSH-ключи + запрет паролей | Отлично | Отлично | 5 минут |
| Fail2ban | Хорошо | Хорошо | 15 минут |
| Доступ по белому списку IP | Отлично | Отлично | 2 минуты, нужен статический IP |
| ufw limit | Хорошо | Средне | 1 минута |
Рабочий минимум для любого VPS: ключи + смена порта + fail2ban. Полный список мер по укреплению сервера — в нашем чек-листе безопасности VPS из 15 пунктов.
Частые ошибки при смене порта
- Перезапустили ssh.service, но не ssh.socket. Сервер продолжает слушать 22-й порт. На Ubuntu 24.04 нужен
daemon-reload+ рестарт сокета (шаг 4). - Сначала сменили порт, потом вспомнили про файрвол. Итог — потеря доступа. Порядок строгий: открыть порт в UFW → сменить порт → проверить → закрыть 22-й.
- Закрыли старую сессию до проверки новой. Всегда тестируйте вход во втором окне. Если доступ всё же потерян — используйте VNC-консоль в панели хостинга.
- Забыли обновить порт в fail2ban, скриптах бэкапа и деплоя. После смены порта пройдитесь по всем местам, где он упоминается.
- Не проверили
/etc/ssh/sshd_config.d/. Файлы из этого каталога могут переопределять главный конфиг.
Нюанс для NAT VPS: нестандартный порт из коробки
Есть случай, когда менять ничего не нужно: NAT VPS. Там IPv4-адрес общий на несколько серверов, и каждому клиенту выдаётся свой диапазон портов плюс отдельный внешний SSH-порт — по определению нестандартный. Например, на NAT-тарифах Cheap-Host (от 59 ₽/мес за NAT Start: 1 vCPU, 1 ГБ RAM, 10 ГБ NVMe, 999 портов TCP/UDP) SSH-порт выдаётся сразу при создании сервера, и шум ботов на нём минимален по умолчанию. Для бота, VPN или пары скриптов это самый дешёвый способ получить «тихий» SSH.
FAQ
Почему после смены порта в sshd_config SSH всё равно слушает порт 22?
В Ubuntu 24.04 порт открывает юнит ssh.socket, а не сам демон. Выполните sudo systemctl daemon-reload и sudo systemctl restart ssh.socket ssh.service — генератор systemd перенесёт порт из конфига в сокет. Либо отключите socket activation: systemctl disable --now ssh.socket && systemctl enable --now ssh.service.
Смена SSH-порта — это полноценная защита от взлома?
Нет. Это снижение шума: 95–99% автоматических сканеров отсеиваются, но целевой атакующий найдёт порт за минуты. Настоящая защита ssh — ключи с отключённым парольным входом и fail2ban. Смена порта — дополнение к ним.
Какой порт выбрать вместо 22?
Любой свободный из диапазона 1024–65535: 2222, 22022 или случайный вроде 49222. Высокие порты сканируют реже. Избегайте портов, занятых популярными сервисами (3306, 5432, 8080).
Я сменил порт и потерял доступ. Что делать?
Зайдите через VNC/экстренную консоль в панели хостинга — она работает в обход SSH. Проверьте правила UFW (sudo ufw status), слушает ли sshd нужный порт (sudo ss -tlnp | grep sshd) и перезапущен ли ssh.socket.
Нужно ли менять SSH-порт на NAT VPS?
Обычно нет: внешний SSH-порт там нестандартный изначально, потому что IP общий, а порты распределены между клиентами. Боты, сканирующие 22-й порт, до вас просто не доберутся.
Вывод
Смена SSH-порта на Ubuntu 24.04 занимает десять минут, если помнить про socket activation: правим sshd_config, делаем daemon-reload, перезапускаем ssh.socket — и только после проверки входа закрываем 22-й порт в файрволе. Вместе с SSH-ключами и fail2ban это даёт тихие логи и минимальную поверхность атаки. Если вы только подключаетесь к серверу впервые — начните со статьи о подключении к VPS по SSH.
Если для экспериментов или боевого проекта нужен сервер — у Cheap-Host тариф Start от 450 ₽/мес: 6 vCPU, 8 ГБ RAM, 96 ГБ NVMe, KVM с полным root-доступом, безлимитный трафик и выдача IP с SSH за 45–60 секунд. Посмотреть все тарифы можно на cheap-host.onl.