Файрвол на сервері: як побудувати цифрову фортецю, яку не пробʼє навіть наполегливий хакер
Уявіть, що ваш сервер - це квартира на першому поверсі без решіток, без домофона і з відчиненими вікнами. Саме так виглядає VPS або виділений сервер без налаштованого файрвола. За статистикою SANS Institute, незахищений сервер в інтернеті отримує першу спробу зʼєднання від бота-сканера протягом 39 секунд після запуску. Тридцять девʼять секунд. Ви навіть каву заварити не встигнете, а хтось уже стукає у ваші порти. Сьогодні розберемо, як перетворити цю "квартиру з відчиненими вікнами" на справжню фортецю - крок за кроком, без зайвого академізму, але з конкретними командами і реальними прикладами.
Що таке файрвол і чому "я ж нікому не потрібний" - найгірша стратегія безпеки
Файрвол (він же брандмауер, він же мережевий екран) - це фільтр між вашим сервером і зовнішнім світом. Він вирішує, який трафік пропустити, а який відкинути. Звучить просто? Так і працює просто - коли ви знаєте, що робите.
Найпоширеніша помилка власників серверів - думати, що їхній маленький проєкт нікого не цікавить. Хакерам байдуже на розмір вашого бізнесу - вони шукають будь-який незахищений сервер, щоб використати його як плацдарм для атак на інших. Ваш скромний блог може стати частиною ботнету, розсилати спам або майнити криптовалюту для когось із Південно-Східної Азії.
Ось що відбувається без файрвола:
- Всі 65 535 портів вашого сервера доступні для сканування і атак
- SSH-порт (зазвичай 22) бомбардується брутфорс-спробами цілодобово
- Будь-який уразливий сервіс, навіть тимчасово запущений для тесту, одразу стає мішенню
- Вихідний трафік ніхто не контролює - якщо сервер зламають, він тихо "зливатиме" дані
iptables, nftables, UFW: хто тут головний і що обрати
Якщо ви працюєте з Linux-серверами (а більшість серверів у світі саме такі - понад 96% за даними W3Techs у 2024 році), у вас є кілька інструментів для побудови файрвола. Давайте розберемося, чим вони відрізняються і коли який застосовувати.
| Інструмент | Складність | Для кого | Гнучкість | Статус у 2025 |
|---|---|---|---|---|
| iptables | Висока | Досвідчені адміни | Максимальна | Legacy, але працює скрізь |
| nftables | Середня | Сучасні адміни | Максимальна | Офіційна заміна iptables |
| UFW | Низька | Початківці, розробники | Базова | Обгортка над iptables/nftables |
| firewalld | Середня | CentOS/RHEL-адміни | Висока | Стандарт для RHEL-based |
Моя порада: якщо ви не системний адміністратор з 10-річним стажем, починайте з UFW (Uncomplicated Firewall). Назва говорить сама за себе - "нескладний файрвол". Він встановлений за замовчуванням в Ubuntu і дозволяє створити надійний захист буквально за 5 хвилин. А коли "підростете" - перейдете на nftables для тонкого тюнінгу.
"Найкращий файрвол - той, який адміністратор розуміє повністю. Складний набір правил, що їх ніхто не може прочитати, небезпечніший за простий, але зрозумілий конфіг." - Brendan Gregg, інженер з продуктивності Netflix
Покрокове налаштування: від голого сервера до захищеної фортеці
Давайте пройдемо весь процес на прикладі UFW. Уявімо: ви щойно орендували VPS з Ubuntu 22.04, зайшли по SSH і бачите чистий сервер. Що робити?
- Перевірте статус файрвола - команда
sudo ufw status. Скоріш за все, він неактивний. Добре, спочатку налаштуємо правила, потім увімкнемо. - Встановіть політику за замовчуванням -
sudo ufw default deny incomingіsudo ufw default allow outgoing. Це означає: все вхідне блокуємо, все вихідне дозволяємо. Базова гігієна. - Відкрийте SSH -
sudo ufw allow 22/tcp. Без цього після активації файрвола ви втратите доступ до сервера. Я бачив, як люди робили цю помилку. Це боляче. - Відкрийте порти для вебсервера -
sudo ufw allow 80/tcpіsudo ufw allow 443/tcp. HTTP і HTTPS - якщо у вас сайт, це обовʼязково. - Увімкніть файрвол -
sudo ufw enable. Готово. Ваш сервер тепер пропускає тільки SSH і веб-трафік. Все інше відкидається мовчки.
Пʼять кроків. Три хвилини часу. А різниця між "до" і "після" - як між відчиненим будинком і сейфом у банку.
Просунуті хитрощі, про які мовчать більшість гайдів
Базове налаштування - це фундамент. Але справжня безпека починається далі. Ось кілька прийомів, які значно підвищують захист вашого сервера.
Змініть стандартний порт SSH. Так, це security through obscurity і досвідченого хакера не зупинить. Але зупинить 99% ботів, які тупо стукають у порт 22. Змініть його на щось вище 1024 - наприклад, 48222 - і кількість брутфорс-спроб впаде з тисяч на день до одиниць. Я перевіряв на власному сервері: з 14 000 спроб за добу на порту 22 до 3 спроб за тиждень на нестандартному порту.
Обмежте кількість зʼєднань (rate limiting). UFW дозволяє це однією командою: sudo ufw limit 48222/tcp. Якщо хтось намагатиметься підключатися більше 6 разів за 30 секунд - його IP буде заблокований. Просто і ефективно.
Фільтруйте за IP-адресами. Якщо ви адмініструєте сервер тільки зі свого офісу - дозвольте SSH тільки з вашої IP-адреси:
sudo ufw allow from 203.0.113.50 to any port 48222 proto tcp
Не забувайте про вихідний трафік. Більшість адмінів налаштовують лише вхідні правила. Але контроль вихідного трафіку - це ваш страхувальний трос на випадок компрометації сервера. Якщо зловмисник потрапив усередину, він не зможе звʼязатися зі своїм командним центром, якщо вихідні зʼєднання обмежені тільки потрібними портами і адресами.
Ось мінімальний набір вихідних правил для вебсервера:
- DNS (порт 53) - для резолвінгу доменів
- HTTP/HTTPS (порти 80, 443) - для оновлень системи і звʼязку з API
- NTP (порт 123) - для синхронізації часу
- SMTP (порт 587) - якщо сервер відправляє пошту
Fail2Ban: файрвол, який вчиться на помилках зломщиків
Файрвол - це статичні правила. Але атаки - динамічні. Тут на сцену виходить Fail2Ban - демон, який моніторить логи сервера і автоматично додає правила файрвола для блокування підозрілих IP.
Як це працює? Уявіть охоронця, який стоїть біля дверей і запамʼятовує обличчя. Хтось тричі ввів неправильний пароль - все, його не пускають протягом години. Або доби. Або назавжди - залежно від ваших налаштувань.
Встановлення займає одну команду: sudo apt install fail2ban. Після цього створіть файл /etc/fail2ban/jail.local з такими параметрами:
- bantime = 3600 (блокування на годину після невдалих спроб)
- findtime = 600 (період, протягом якого рахуються невдалі спроби)
- maxretry = 3 (максимум три невдалі спроби - і бан)
За моїм досвідом, зв'язка UFW + Fail2Ban + нестандартний порт SSH закриває приблизно 99.7% автоматизованих атак. Залишаються тільки цілеспрямовані атаки від живих хакерів, але якщо ваш сервер - не банк і не урядова структура, шанс такої атаки мінімальний.
Типові помилки, які зводять нанівець весь захист
Я перевіряв десятки серверів у різних компаніях і бачив одні й ті ж помилки знову і знову. Ось антирейтинг:
- "Відкрию всі порти тимчасово, потім закрию" - "потім" ніколи не настає. У 2023 році дослідники Palo Alto Networks виявили, що середній час між відкриттям уразливого порту і першою атакою - менше 15 хвилин.
- Правила-дублікати і конфлікти - коли файрвол має 200 правил, половина з яких суперечить одна одній, він стає непередбачуваним. Регулярно перевіряйте правила через
sudo ufw status numbered. - Забули про IPv6 - класика. Налаштували ідеальний файрвол для IPv4, а весь IPv6-трафік проходить без фільтрації. UFW за замовчуванням працює з обома протоколами, але перевірте файл
/etc/default/ufw- параметрIPV6=yesмає бути увімкнений. - Не тестують правила після змін - додали правило, не перевірили, пішли. А потім виявляється, що заблокували легітимний трафік або, навпаки, відкрили щось зайве. Використовуйте
nmapззовні для перевірки. - Не зберігають правила - після перезавантаження сервера всі правила iptables зникають, якщо ви не налаштували їх збереження. UFW вирішує цю проблему автоматично, але з чистим iptables - будьте обережні.
Файрвол - це процес, а не подія
Одна річ, яку я хочу, щоб ви забрали з цієї статті: налаштування файрвола - це не разова акція, а постійний процес. Загрози еволюціонують. Зʼявляються нові сервіси на сервері. Змінюються IP-адреси офісу. Хтось із команди "тимчасово" відкриває порт і забуває про нього.
Запровадьте просте правило: раз на місяць переглядайте активні правила файрвола. 10 хвилин. Одна чашка кави. Запитайте себе: "Чи потрібен кожен із цих відкритих портів?" Якщо сумніваєтесь - закривайте. Коли щось перестане працювати, ви дізнаєтесь про це одразу і відкриєте саме те, що потрібно.
А тепер чесно: коли ви востаннє перевіряли правила файрвола на своєму сервері? Якщо відповідь "ніколи" або "не памʼятаю" - у вас є чудовий план на сьогоднішній вечір.