↓ До тексту
  1. Статті/

ufw - фаєрвол для нормальних людей

·3 хвилини
cat /etc/passwd
Автор
cat /etc/passwd
Технічний блог про Linux, DevOps та Open Source технології.
Зміст

iptables - штука могутня, але писати його правила руками - то окремий вид страждання: ланцюжки, таблиці, синтаксис, який забувається наступного ранку. Для 95% задач цього не треба. У Debian і Ubuntu є ufw (Uncomplicated Firewall) - надбудова, де «заблокувати все вхідне, дозволити SSH і 80 порт» пишеться трьома зрозумілими командами.

Що потрібно зробити?
#

Поставити базовий фаєрвол: за замовчуванням блокувати все вхідне, дозволити лише те, що треба (SSH, веб), навчитися дивитись статус, робити whitelist по IP і вмикати/вимикати все це - не відрізавши собі доступ до сервера.

З чим працюю?
#

Два свіжі Debian 13 в одній мережі: сервер (там ufw і тестовий вебсервер на 80 порту) і клієнт, який стукає до нього curl-ом. Так одразу видно, що правило реально блокує, а що пропускає.

ufw: сервер + клієнт linuxway.com.ua

У записі зліва - сервер з ufw, справа - клієнт. Додаю правило зліва - і тієї ж секунди видно справа: достукався клієнт чи отримав по носі. Далі ті самі команди по порядку.

Базова конфігурація
#

Золоте правило фаєрвола: все вхідне - заборонено, все вихідне - можна. А далі точково відкриваємо потрібне.

1
2
ufw default deny incoming
ufw default allow outgoing
Спершу дозволь SSH, лише потім вмикай ufw. Інакше ufw enable чесно заблокує і твою SSH-сесію - і ти дивитимешся на застиглий термінал віддаленого сервера, до якого вже не достукаєшся.
1
ufw allow OpenSSH

OpenSSH - це готовий профіль застосунку (порт 22). Подивитись усі такі профілі можна через ufw app list. Тепер, коли двері для себе відчинені, вмикаємо:

1
ufw enable

У відповідь ufw скаже Firewall is active and enabled on system startup - друга частина означає, що він сам підніметься після перезавантаження. Про автозапуск можна не думати.

Перевіряємо, чи працює
#

Отут і згодився другий термінал. До ввімкнення клієнт спокійно відкривав сайт. А щойно ufw enable з політикою deny incoming - той самий curl з клієнта впирається в стіну і через таймаут повертає rc=28. Порт 80 ми ж не дозволяли - значить, закрито. Дозволяємо:

1
ufw allow 80/tcp

Rule added - і клієнт знову бачить сторінку. Жодних перезапусків, правило діє одразу.

Whitelist - пускаємо тільки своїх
#

«Дозволити 80 порт усім» - це нормально для публічного сайту. Але якщо сервіс має бачити лише одна конкретна машина (умовно - твій офіс чи сусідній сервер), правило робиться адресним. Прибираємо загальний дозвіл і ставимо точковий:

1
2
ufw delete allow 80/tcp
ufw allow from 10.10.60.103 to any port 80

Тепер на 80 порт пустить тільки 10.10.60.103, усім іншим - deny за замовчуванням. Так само можна відкрити цілу підмережу: ufw allow from 10.10.60.0/24 to any port 80.

Статус, автозапуск, вимкнути
#

Подивитись, що в нас накручено:

1
2
3
4
5
# короткий список з номерами (зручно для видалення)
ufw status numbered

# детально - з default-політиками й логуванням
ufw status verbose

Видаляти правила можна як за описом (ufw delete allow 80/tcp), так і за номером зі списку: ufw delete 2.

Автозапуск, як я казав, вмикається сам разом із ufw enable. Переконатись:

1
2
systemctl is-enabled ufw
# enabled

А коли фаєрвол треба тимчасово прибрати з дороги (наприклад, щось дебажиш):

1
ufw disable

Весь базовий набір - це буквально: deny incoming, allow OpenSSH, enable, і далі точково allow те, що треба. П’ять команд - і сервер показує світу рівно стільки, скільки ти дозволив, і ні портом більше.

Related