Зміна порту SSH | INTROSERV
EUR
european

EUR

usa

USD

Ukraine Ua
Ex. VAT Ex. VAT 0%

Зміна порту SSH

Зміна стандартного порту SSH (22) зменшує ризик автоматизованого сканування та базових атак методом brute-force, але не замінює належних заходів безпеки.

Warning

Перед внесенням будь-яких змін переконайтеся, що у вас відкрита активна 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

Info

Для кращої сумісності можна також явно вказати адреси:

[Socket] ListenStream= ListenStream=0.0.0.0:22777 ListenStream=[::]:22777

Збережіть конфігурацію та застосуйте зміни:

systemctl daemon-reload systemctl restart ssh.socket systemctl restart ssh

Перевірте, чи працює служба:

systemctl status ssh.socket

Info

У деяких новіших системах, таких як 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

Info

Команда 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

Warning

Не видаляйте порт 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 на нестандартний порт може зменшити ризик автоматизованого сканування та базових спроб атак методом brute-force. Однак зміну порту слід розглядати як додатковий захід безпеки, а не як заміну належного захисту SSH.

Завжди залишайте поточну SSH-сесію відкритою, доки не переконаєтеся, що успішно підключилися через новий порт. Після перевірки нового підключення можна безпечно закрити стару сесію та видалити порт 22 з брандмауера, якщо він більше не потрібен.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA