Як налаштувати UFW на VPS і не втратити SSH
Налаштуйте UFW на VPS із політикою заборони за замовчуванням: дозвольте лише потрібні порти, спершу відкрийте SSH і безпечно увімкніть firewall.
Що таке UFW і навіщо він потрібен
UFW розшифровується як Uncomplicated Firewall, і ця назва точно описує його призначення. Це зручний інтерфейс до брандмауера, уже вбудованого в ядро Linux. Замість написання правил вручну ви вводите короткі команди, наприклад ufw allow 22/tcp. На новому VPS кожен сервіс, що прослуховує порт, за замовчуванням доступний з Інтернету. Брандмауер змінює цю схему: ви забороняєте весь вхідний трафік, а потім дозволяєте лише ті порти, які фактично використовуєте. Така зміна приблизно за чотири команди усуває більшість зовнішньої доступності сервера.
Перш ніж змінювати налаштування, визначте, які порти прослуховуються. Саме від цих сервісів залежить, що дозволить або заблокує брандмауер. Правильний перший крок — перевірити порти, що прослуховуються за допомогою ss -tlnp.
Єдине правило, яке не дасть вам заблокувати собі доступ
Ось помилка, через яку багато хто відмовляється від firewall. Ви вмикаєте UFW із політикою default-deny, але не дозволяєте SSH. Тому одразу після запуску firewall ваше власне з’єднання розривається, і ви не можете підключитися знову. Щоб цього уникнути, завжди дозвольте SSH перед увімкненням UFW. У цьому весь принцип. Нижче наведено кроки в безпечному порядку.
Якщо це все ж сталося, доступ не втрачено назавжди: web console вашого провайдера через VNC або serial не використовує SSH. Увійдіть через неї та виконайте ufw disable або додайте відсутнє правило.
Крок 1: Встановіть політики за замовчуванням
Спочатку налаштуйте UFW так, щоб він забороняв усі вхідні підключення та дозволяв усі вихідні:
sudo ufw default deny incoming
sudo ufw default allow outgoingdeny incoming — важлива частина. Будь-який порт без явного правила allow буде закритий для зовнішнього доступу, навіть якщо на ньому прослуховується сервіс. allow outgoing дає серверу змогу нормально підключатися до інтернету для оновлень та інших подібних операцій. Ці дві команди змінюють лише політики. Жодні правила не застосовуються, доки ви не ввімкнете UFW на кроці 3.
Крок 2: Дозвольте лише потрібні порти
Перш ніж увімкнути UFW, відкрийте SSH, щоб не втратити з’єднання:
sudo ufw allow 22/tcpUFW також може обмежити частоту SSH-з’єднань: sudo ufw limit 22/tcp дозволяє порт, але блокує будь-яку адресу, з якої за тридцять секунд надходить шість або більше з’єднань. Це стримує скрипти для brute-force-атак без додаткового програмного забезпечення.
Якщо ви використовуєте вебсервер, також дозвольте HTTP і HTTPS:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcpДозволяйте лише ті служби, які ви відкриваєте для загального доступу. База даних, наприклад Postgres на порту 5432, майже ніколи не повинна мати правило allow. Прив’яжіть її до 127.0.0.1, щоб вона була доступна лише на цьому комп’ютері. Кожен відкритий порт — це додатковий компонент, який потрібно захищати, тому список має бути коротким.
Тут також можна підготувати повну послідовність команд ufw для свого сервера, а потім виконати їх по черзі:
Крок 3: Увімкніть firewall і перевірте, що він працює
sudo ufw enableЗ’явиться попередження, що команда може перервати наявні SSH-з’єднання. Оскільки на кроці 2 ви дозволили 22/tcp, ваша сесія не перерветься. Перевірте результат:
sudo ufw status verboseStatus: active
Default: deny (incoming), allow (outgoing)
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)
80/tcp ALLOW IN AnywhereЗверніть увагу на два моменти. Status: active означає, що firewall працює. Кожне правило також відображається двічі: спочатку без змін, а потім із (v6). Це означає, що UFW охоплює IPv6 так само, як і IPv4. Якщо рядки (v6) відсутні, трафік IPv6 не контролюється. Це окрема проблема, розглянута в матеріалі про firewall для IPv6.
Керування правилами надалі
Щоб переглянути правила з номерами й видалити одне з них:
sudo ufw status numbered
sudo ufw delete 3Щоб дозволити доступ до порту лише з однієї адреси, що зручно для відкриття адміністративного сервісу тільки для власної IP-адреси:
sudo ufw allow from 10.0.0.24 to any port 5432 proto tcpЦей підхід перестає працювати, коли змінюється ваша адреса або доступ потрібен кільком машинам. Зазвичай проблему вирішують так: узагалі не відкривають порт у публічний доступ, а підключаються до сервісу через приватну мережу. Для цього й потрібне оголошення приватної підмережі сервера у вашій tailnet.
Фаєрвол — це один із рівнів захисту. Він контролює, кому дозволено звертатися до порту, але не сповільнює спроби багаторазового підключення до відкритого порту, наприклад SSH. Для цього додайте Fail2ban перед SSH, щоб блокувати порушників, які повторюють такі спроби. Багаторівневий захист означає, що кожен рівень усуває ризики, які не можуть усунути інші.
Фаєрвол має сенс лише після того, як ви зрозуміли що таке порти і як сервіси прослуховують їх, а його налаштування є одним із кроків у перші 10 хвилин на новому VPS.
FAQ
Чи розірве ввімкнення UFW моє SSH-з’єднання?
Ні, якщо спочатку дозволити SSH. Виконайте sudo ufw allow 22/tcp перед sudo ufw enable. З’єднання не перерветься, оскільки брандмауер тепер дозволяє порт 22. Небезпечно вмикати брандмауер із політикою заборони за замовчуванням без правила дозволу SSH. Це призведе до втрати доступу. Якщо це сталося, увійдіть через VNC або послідовну консоль вашого провайдера та виконайте ufw disable.
Які порти потрібно відкрити на VPS?
Лише порти, через які ви надаєте публічні сервіси. SSH (22/tcp), щоб керувати сервером, а також HTTP і HTTPS (80/tcp, 443/tcp), якщо ви запускаєте вебсайт. Усі інші порти залиште забороненими. Внутрішні сервіси, наприклад бази даних, мають прослуховувати 127.0.0.1 і взагалі не повинні мати правил брандмауера. Тоді вони не будуть доступні з мережі.
Чи працює UFW з IPv6?
Так, у сучасних версіях Ubuntu: параметр IPV6=yes має значення в /etc/default/ufw. Тому кожне правило застосовується до обох стеків, а ufw status показує правила IPv6 із суфіксом (v6). Варіанти несправностей описано в розділі про проблему з брандмауером IPv6.
Як видалити правило UFW?
Виконайте sudo ufw status numbered, щоб переглянути правила з номерами індексів. Потім виконайте sudo ufw delete N, де N — номер правила, яке потрібно видалити. Правило також можна видалити за специфікацією, наприклад sudo ufw delete allow 80/tcp.
Як дозволити доступ до порту лише з однієї IP-адреси?
Замість звичайного allow використайте правило from. Щоб дозволити доступ до PostgreSQL лише з адреси вашого офісу, виконайте sudo ufw allow from 10.0.0.10 to any port 5432 proto tcp. За політики заборони за замовчуванням порт закритий для всіх, доки правило його не відкриє. Тому це правило from є єдиним способом доступу: весь інтернет залишається заблокованим, а доступ отримує лише вказана вами адреса. Не додавайте також звичайне allow 5432/tcp, оскільки воно відкриє порт для всіх. Це найбезпечніший спосіб відкрити доступ до бази даних або панелі адміністрування. Перевірте результат за допомогою sudo ufw status verbose. Ця команда показує адресу джерела поруч із портом.