iptables - штука могутня, але писати його правила руками - то окремий вид страждання: ланцюжки, таблиці, синтаксис, який забувається наступного ранку. Для 95% задач цього не треба. У Debian і Ubuntu є ufw (Uncomplicated Firewall) - надбудова, де «заблокувати все вхідне, дозволити SSH і 80 порт» пишеться трьома зрозумілими командами.
Що потрібно зробити?#
Поставити базовий фаєрвол: за замовчуванням блокувати все вхідне, дозволити лише те, що треба (SSH, веб), навчитися дивитись статус, робити whitelist по IP і вмикати/вимикати все це - не відрізавши собі доступ до сервера.
З чим працюю?#
Два свіжі Debian 13 в одній мережі: сервер (там ufw і тестовий вебсервер на 80 порту) і клієнт, який стукає до нього curl-ом. Так одразу видно, що правило реально блокує, а що пропускає.
У записі зліва - сервер з ufw, справа - клієнт. Додаю правило зліва - і тієї ж секунди видно справа: достукався клієнт чи отримав по носі. Далі ті самі команди по порядку.
Базова конфігурація#
Золоте правило фаєрвола: все вхідне - заборонено, все вихідне - можна. А далі точково відкриваємо потрібне.
| |
ufw enable чесно заблокує і твою SSH-сесію - і ти дивитимешся на застиглий термінал віддаленого сервера, до якого вже не достукаєшся. | |
OpenSSH - це готовий профіль застосунку (порт 22). Подивитись усі такі профілі можна через ufw app list. Тепер, коли двері для себе відчинені, вмикаємо:
| |
У відповідь ufw скаже Firewall is active and enabled on system startup - друга частина означає, що він сам підніметься після перезавантаження. Про автозапуск можна не думати.
Перевіряємо, чи працює#
Отут і згодився другий термінал. До ввімкнення клієнт спокійно відкривав сайт. А щойно ufw enable з політикою deny incoming - той самий curl з клієнта впирається в стіну і через таймаут повертає rc=28. Порт 80 ми ж не дозволяли - значить, закрито. Дозволяємо:
| |
Rule added - і клієнт знову бачить сторінку. Жодних перезапусків, правило діє одразу.
Whitelist - пускаємо тільки своїх#
«Дозволити 80 порт усім» - це нормально для публічного сайту. Але якщо сервіс має бачити лише одна конкретна машина (умовно - твій офіс чи сусідній сервер), правило робиться адресним. Прибираємо загальний дозвіл і ставимо точковий:
| |
Тепер на 80 порт пустить тільки 10.10.60.103, усім іншим - deny за замовчуванням. Так само можна відкрити цілу підмережу: ufw allow from 10.10.60.0/24 to any port 80.
Статус, автозапуск, вимкнути#
Подивитись, що в нас накручено:
| |
Видаляти правила можна як за описом (ufw delete allow 80/tcp), так і за номером зі списку: ufw delete 2.
Автозапуск, як я казав, вмикається сам разом із ufw enable. Переконатись:
| |
А коли фаєрвол треба тимчасово прибрати з дороги (наприклад, щось дебажиш):
| |
Весь базовий набір - це буквально:
deny incoming,allow OpenSSH,enable, і далі точковоallowте, що треба. П’ять команд - і сервер показує світу рівно стільки, скільки ти дозволив, і ні портом більше.



