Зміна порту SSH
Зміна стандартного порту SSH (22) зменшує ризик автоматизованого сканування та базових атак методом brute-force, але не замінює належних заходів безпеки.
Перед внесенням будь-яких змін переконайтеся, що у вас відкрита активна 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 на нестандартний порт може зменшити ризик автоматизованого сканування та базових спроб атак методом brute-force. Однак зміну порту слід розглядати як додатковий захід безпеки, а не як заміну належного захисту SSH.
Завжди залишайте поточну SSH-сесію відкритою, доки не переконаєтеся, що успішно підключилися через новий порт. Після перевірки нового підключення можна безпечно закрити стару сесію та видалити порт 22 з брандмауера, якщо він більше не потрібен.