Фаєрвол ufw: закриваємо зайве
Як налаштувати ufw за п'ять хвилин: відкрити потрібні порти, закрити решту, обмежити доступ за адресою і не відрізати собі SSH.
Оновлено 23 серпня 2026 р.
На новій машині відкрито все, що слухає мережу. Частину сервісів ви встановили навмисно, частина прийшла разом із пакетами. Фаєрвол вирішує це одним махом: заборонено все, крім того, що ви перелічите.
ufw — це проста обгортка над правилами ядра. Її достатньо в переважній більшості випадків; складніші конфігурації розглянуті в статті про nftables.
Базова конфігурація
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw enable
ufw status verbose
Тут важливий порядок: правило для SSH додається до увімкнення. Інакше ufw enable обірве ваше з'єднання, і доведеться повертатися через консоль у панелі /hosting/vds/m/<id> або режим відновлення.
Консоль у панелі працює незалежно від мережі, тож повністю відрізати себе не вийде — але це коштує часу.
Типові правила
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow from 203.0.113.5 to any port 22 proto tcp
ufw limit 22/tcp
ufw delete allow 80/tcp
ufw status numbered
ufw delete 3
ufw limit сповільнює кожного, хто відкриває понад шість з'єднань за 30 секунд — дешевий захист від перебору паролів. Точніший інструмент для цієї ж задачі — fail2ban.
Правило allow from стане в пригоді для сервісів, які не повинні бути публічними: баз даних, адмінпанелей, експортерів метрик.
ufw allow from 203.0.113.5 to any port 5432 proto tcp
Перевірка результату
ufw status verbose
ss -tulpn
ss показує, що система слухає, ufw status — що пропущено ззовні. Різниця між списками — це закриті вами сервіси, і це нормально. Погано, коли навпаки: порт відкритий в ufw, але слухача немає.
Ззовні перевіряйте портом, а не пінгом:
nc -vz <address> 443
Docker і ufw
Якщо на машині працює Docker, майте на увазі: переадресація портів контейнерів обробляється в ланцюжках ядра до правил ufw. Контейнер, запущений із -p 5432:5432, буде доступний ззовні навіть тоді, коли ufw status показує deny. Прив'язуйте такі порти до локального інтерфейсу:
docker run -p 127.0.0.1:5432:5432 postgres
Типові помилки
| Помилка | Наслідок | Рішення |
|---|---|---|
ufw enable без правила для SSH | Втрата доступу до мережі | Зайдіть через консоль у панелі, ufw allow 22/tcp |
| Змінили порт SSH, залишили старе правило | Те саме | Спершу правило, потім порт |
| Порт відкритий, сервіс не відповідає | Сервіс слухає на 127.0.0.1 | Змініть адресу прив'язки |
| Контейнер доступний попри deny | Docker обходить ufw | Прив'яжіть до 127.0.0.1 |
Перш ніж закривати порт, виконайте
ss -tulpnі переконайтеся, що розумієте, що на ньому сидить. Закритий порт моніторингу згодом виглядає як «сервіс упав».