Изменение порта SSH
Изменение стандартного порта SSH (22) снижает вероятность автоматизированного сканирования и базовых атак методом перебора, но не заменяет надлежащие меры безопасности.
Перед внесением любых изменений убедитесь, что у вас открыта активная SSH-сессия. Не закрывайте её, пока не убедитесь, что новый порт работает. Если что-то пойдёт не так, вы потеряете доступ к серверу.
Выбор номера порта
Выберите номер порта выше 1024. Порты в диапазоне 49152–65535 реже конфликтуют с другими известными службами. Избегайте часто используемых альтернатив, таких как 2222 или 22222, поскольку они часто становятся целью автоматизированных сканеров. В этом руководстве в качестве примера используется 22777.
Создание резервной копии файла конфигурации
Перед внесением изменений создайте резервную копию файла конфигурации SSH:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
Изменение порта SSH в Ubuntu и Debian
Начиная с Debian 12 и некоторых более новых версий Ubuntu (22.04+), SSH может по умолчанию использовать активацию сокета systemd. В этом случае одного изменения директивы Port в sshd_config часто недостаточно.
Сначала проверьте, активна ли активация сокета:
systemctl is-active ssh.socket
Если команда возвращает active, настройте сокет SSH для использования нового порта.
Создайте переопределение systemd для сокета SSH:
systemctl edit ssh.socket
Добавьте следующее содержимое:
[Socket] ListenStream= ListenStream=22777
Пустая строка ListenStream= очищает порт по умолчанию (22). Без неё SSH может продолжить прослушивать как порт 22, так и новый порт.
Для большей надёжности также укажите порт в конфигурации SSH. Это помогает генератору systemd и сохраняет настройку после обновлений OpenSSH:
mkdir -p /etc/ssh/sshd_config.d echo "Port 22777" | tee /etc/ssh/sshd_config.d/10-port.conf
Для лучшей совместимости можно вместо этого явно указать адреса:
[Socket] ListenStream= ListenStream=0.0.0.0:22777 ListenStream=[::]:22777
Сохраните конфигурацию и примените изменения:
systemctl daemon-reload systemctl restart ssh.socket systemctl restart ssh
Проверьте, что служба запущена:
systemctl status ssh.socket
В некоторых более новых системах, например Ubuntu 24.04+, генератор systemd может автоматически считывать порт из sshd_config. В этом случае может быть достаточно изменить Port напрямую, а затем выполнить systemctl daemon-reload и systemctl restart ssh.socket. Описанный выше метод с переопределением работает во всех версиях.
Старые версии Ubuntu и Debian
В версиях Ubuntu до 22.04 и Debian до 12 SSH не управляется с помощью активации сокета. Откройте файл конфигурации SSH:
nano /etc/ssh/sshd_config
Найдите следующую строку:
Port 22
Раскомментируйте её и замените 22 на выбранный номер порта:
Port 22777
Сохраните файл и проверьте конфигурацию:
sshd -t
Если команда не найдена, используйте:
/usr/sbin/sshd -t
Если команда не возвращает никаких сообщений, конфигурация корректна. Перезапустите службу SSH:
systemctl restart ssh
Отключение активации сокета
Если вы предпочитаете управлять SSH через традиционную службу, а не через сокет, можно отключить активацию сокета:
systemctl disable --now ssh.socket systemctl enable --now ssh
После этого отредактируйте sshd_config, как описано выше, и перезапустите SSH:
systemctl restart ssh
Изменение порта SSH в AlmaLinux, Rocky Linux и CentOS
Редактирование файла конфигурации SSH
Откройте файл конфигурации SSH:
nano /etc/ssh/sshd_config
Найдите следующую строку:
Port 22
Раскомментируйте её и замените 22 на выбранный номер порта:
Port 22777
Сохраните файл и проверьте конфигурацию:
/usr/sbin/sshd -t
Если команда не возвращает никаких сообщений, конфигурация корректна. Перезапустите службу SSH:
systemctl restart sshd
Проверьте, что служба запущена:
systemctl status sshd
Разрешение порта в SELinux
В системах с включённым SELinux необходимо также разрешить новый порт в политике SELinux. Чтобы проверить, какие порты в настоящее время разрешены для SSH, выполните:
semanage port -l | grep ssh
Затем добавьте или измените новый порт:
semanage port -a -t ssh_port_t -p tcp 22777 || semanage port -m -t ssh_port_t -p tcp 22777
Если semanage не установлен, установите необходимый пакет:
dnf install policycoreutils-python-utils
Настройка брандмауэра
Всегда разрешайте новый порт в брандмауэре до перезапуска SSH. Если сначала перезапустить SSH, можно потерять доступ к серверу.
UFW
ufw allow 22777/tcp ufw reload ufw status
firewalld
firewall-cmd --permanent --zone=public --add-port=22777/tcp firewall-cmd --reload
iptables
iptables -I INPUT -p tcp --dport 22777 -j ACCEPT iptables-save > /etc/iptables/rules.v4
Команда iptables-save сохраняет правила в файл только в том случае, если iptables-persistent установлен и настроен в системе. Для его установки выполните:
apt install -y iptables-persistent
Перед тем как полагаться на этот файл для сохранения правил после перезагрузки, убедитесь, что ваш дистрибутив использует именно этот файл. Обратите внимание, что современные системы могут использовать nftables вместо iptables. Если вы используете nftables, добавьте в конфигурацию nftables правило, разрешающее новый порт.
Настройка Fail2Ban
Если Fail2Ban настроен на сервере, обновите порт SSH в его конфигурации. Откройте /etc/fail2ban/jail.local или соответствующий файл в каталоге /etc/fail2ban/jail.d/ и установите:
port = 22777
После обновления конфигурации перезапустите Fail2Ban:
systemctl restart fail2ban
Проверка нового порта
Проверьте, прослушивает ли SSH новый порт:
ss -tlnp | grep :22777
Также можно вывести все слушающие процессы, связанные с SSH:
ss -tlnp | grep ssh
В старых системах вместо этого используйте netstat:
netstat -tlnp | grep :22777
Также можно непосредственно проверить состояние службы.
В Ubuntu и Debian:
systemctl status ssh.socket
В AlmaLinux, Rocky Linux и CentOS:
systemctl status sshd
Не закрывая текущую SSH-сессию, откройте новое окно терминала и подключитесь с использованием нового порта:
ssh root@YOUR_SERVER_IP -p 22777
Если подключение успешно, можно закрыть старую сессию. Затем удалите порт 22 из правил брандмауэра, если он больше не нужен.
Для UFW:
ufw delete allow 22/tcp ufw reload
Для firewalld:
firewall-cmd --permanent --zone=public --remove-port=22/tcp firewall-cmd --reload
Не удаляйте порт 22 из брандмауэра, пока не убедитесь, что новый порт работает. Если новое подключение не удаётся установить, используйте открытую SSH-сессию для устранения проблемы или отмены изменений:
systemctl revert ssh.socket cp /etc/ssh/sshd_config.backup /etc/ssh/sshd_config rm -f /etc/ssh/sshd_config.d/10-port.conf systemctl daemon-reload systemctl restart ssh.socket
Если активация сокета отключена, замените последние две команды на:
systemctl restart ssh
Заключение
Изменение стандартного порта SSH с 22 на нестандартный порт может снизить вероятность автоматизированного сканирования и базовых попыток атак методом перебора. Однако изменение порта следует рассматривать как дополнительную меру безопасности, а не как замену надлежащей защиты SSH.
Всегда оставляйте текущую SSH-сессию открытой до тех пор, пока не убедитесь, что подключение через новый порт успешно установлено. После проверки нового подключения можно безопасно закрыть старую сессию и удалить порт 22 из брандмауэра, если он больше не требуется.