SSH — это сетевой протокол прикладного уровня, который позволяет безопасно передавать данные по сети. Его используют для удаленного подключения к операционной системе или базам данных, передачи файлов (простого копирования или потоковой передачи, например, видео с веб-камеры), удаленного запуска команд и т.д.
Данный протокол шифрует весь трафик, включая пароли, поэтому он считается безопасным. Чтобы злоумышленники не получили доступ к учётным данным пользователей по SSH, нужно обезопасить свой сервер.
По умолчанию SSH слушает порт 22. В целях безопасности часто рекомендуется сменить порт на нестандартный. Эта мера не считается полноценной защитой, но значительно усложняет жизнь ботам, которые сканируют открытые порты, пытаясь подобрать логин и пароль для доступа к серверу по стандартному SSH-порту.
Кроме смены порта можно применить дополнительные базовые меры защиты:
- Установить лимит попыток подключений к серверу и настроить блокировку IP-адреса при превышении (например, с помощью утилиты fail2ban).
- Запретить подключение root-пользователя по SSH.
- Отказаться от простых и угадываемых логинов и паролей (admin, qwerty, zabbix и пр.).
- Запретить подключение по паролю и включить подключение только по ключу (требуется предварительная настройка и проверка, иначе можно потерять доступ к серверу по SSH).
Изменение порта SSH
Как правило, для подключения по SSH в терминале Linux используется следующая команда:
# ssh username@ip_addressЕсли порт SSH был изменен, его необходимо явно указать при подключении. Допустим, для порта 2233 команда выглядит так:
# ssh -p 2233 username@ip_addressДля подключения с ОС Windows часто используют специальные программы (PuTTY, MobaXterm), в которых всегда можно явно указать порт подключения по SSH.
Конфигурационный файл
Убедитесь, что новый SSH-порт свободен. Это можно сделать с помощью утилиты ss из пакета iproute2, которая установлена по умолчанию в современных системах.
Debian/Ubuntu:
# apt install iproute2CentOS/AlmaLinux:
# yum install iproute2Также для проверки доступности порта можно использовать утилиту netstat. Стоит учесть, что она устарела и, как правило, встречается на серверах со старыми ОС или у провайдеров в качестве привычного легаси. Для работы netstat установим пакет net-tools.
Debian/Ubuntu:
# apt install net-toolsCentOS/AlmaLinux:
# yum install net-toolsПроверка портов выполняется следующими командами.
Debian/Ubuntu:
# ss -tlpn | grep ':22'
# netstat -tlpn | grep ':22'CentOS/AlmaLinux:
# ss -tlpn | grep ':22'
# netstat -tlpn | grep ':22'Ключи в данном случае одинаковы. Поэтому дублировать описание команд для Ubuntu/CentOS не будем.
Вывод будет примерно таким:
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=745,fd=7))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=745,fd=8)) Из вывода понятно, что порт 22 занят. Проверим 2233:
# ss -tlpn | grep ':2233' Вывод пуст, значит, можно занимать.
Измените порт в конфигурационном файле SSH-сервера. Для этого можно воспользоваться любым текстовым редактором:
# vim /etc/ssh/sshd_configили
# nano /etc/ssh/sshd_configНайдите строку Port 22.
Если строка начинается с символа #, его нужно удалить, и вместо 22 порта указать любой другой, например, 2233 — Port 2233.
Сохраните изменения.
Обратите внимание. Хорошая практика — использование OpenSSH раздельных конфигураций (drop-in). При таком подходе нет необходимости менять файл конфигурации по умолчанию — изменения можно вносить в отдельном каталоге. При редактировании sshd_config вы можете заметить строчку:
Include /etc/ssh/sshd_config.d/*.conf. В этом файле можно указать все необходимые изменения, в том числе замену стандартного порта. Это позволит сразу увидеть, что поменялось, и быстро вернуться к конфигурации по умолчанию, удалив файл.
Если вы решили использовать такой подход, то предыдущее действие (удаление символа # и указание порта в /etc/ssh/sshd_config) выполнять не нужно. Создайте и отредактируйте файл:
# nano /etc/ssh/sshd_config.d/custom-port.confЗатем впишите нужный порт — Port 2233.
Настройка межсетевого экрана
Если на сервере включен и настроен файрвол, при смене порта нужно обязательно добавить новое правило. Иначе после рестарта SSH вы можете потерять доступ к серверу. Это часто случается на серверах с ufw, firewalld.
Перед внесением изменений советуем держать текущую SSH-сессию открытой, пока не убедитесь, что вход на новый порт работает. Ниже представлены варианты настройки файрвола для разных систем и утилит.
Debian/Ubuntu с UFW
Проверьте статус:
# ufw status verboseРазрешите новый порт:
# ufw allow 2233/tcpПроверьте правила:
# ufw status numbered CentOS/AlmaLinux с firewalld
Проверьте, активен ли firewalld:
# systemctl is-active firewalldПроверьте текущие разрешения:
# firewall-cmd --list-allРазрешите подключение через новый порт:
# firewall-cmd --permanent --add-port=2233/tcp
# firewall-cmd --reloadПроверьте правила:
# firewall-cmd --list-portsПроверка синтаксиса конфигурации
Перед рестартом проверьте конфигурацию sshd — это снижает риск потерять доступ из‑за ошибки в конфиге:
# sshd -t Если вывод команды пуст, синтаксис корректен.
Перезапуск SSH
Будьте осторожны: если вы допустили ошибку в конфигурационном файле, то можете потерять связь с сервером. Сначала лучше потренироваться на тестовой машине. Кроме того, проверьте альтернативный доступ к серверу, например, по VNC.
Для перезапуска SSH введите команду:
Debian/Ubuntu:
# systemctl restart sshCentOS/AlmaLinux:
# systemctl restart sshdВ Ubuntu 24.04 OpenSSH может работать через активацию systemd на основе сокетов. По умолчанию ssh.socket слушает ListenStream=22. При изменении параметра Port генератор systemd считывает данные конфигурационных файлов и устанавливает соответствующий параметр ListenStream в ssh.socket.
Проверьте, используется ли данный режим активации:
# systemctl is-enabled ssh.socket
# systemctl is-active ssh.socketЕсли в выводе есть enabled и active, то для применения изменений порта, после правок конфигурации нужно выполнить команды:
# systemctl daemon-reload
# systemctl restart ssh.socketПоскольку текущая сессия SSH ещё активна, можно открыть новое окно и проверить, что подключение по новому порту работает:
# ssh username@ip_address -p2233Если что-то пошло не так, можно проверить конфигурацию в уже открытом подключении.
Проверка изменений
Debian/Ubuntu:
# ss -tlpn | grep sshCentOS/AlmaLinux:
# ss -tlpn | grep sshЕсли все нормально, увидим похожий результат:
LISTEN 0 128 0.0.0.0:2233 0.0.0.0:* users:(("sshd",pid=1065,fd=7))
LISTEN 0 128 [::]:2233 [::]:* users:(("sshd",pid=1065,fd=8)) Готово: мы изменили стандартный порт SSH на нестандартный, усилив безопасность сервера.