Серверна безпека Технічні

Файрвол на сервері: як невидима стіна щодня зупиняє тисячі атак, про які ви навіть не здогадуєтесь

О третій ночі, поки ви спите, ваш сервер відбиває від 3 до 15 тисяч спроб несанкціонованого доступу. Щодня. Боти сканують порти, скрипти підбирають паролі, а хтось з IP-адреси десь у Південно-Східній Азії намагається увійти під root вже 47-й раз за останню годину. Якщо файрвол налаштований правильно - ви про це навіть не дізнаєтесь. Якщо ні - дізнаєтесь дуже скоро, але вже з неприємними наслідками. Бо зламаний сервер не надсилає сповіщень. Він просто тихо починає працювати на когось іншого.

Я бачив десятки випадків, коли власники бізнесу відкривали панель керування сервером і знаходили там маленький криптомайнер, що їв 80% CPU вже другий тиждень. І кожного разу перше питання було одне: "Як це сталось?" Відповідь майже завжди та сама - файрвол або не працював, або працював з налаштуваннями за замовчуванням, які мало чим відрізняються від відчинених дверей.

Що насправді робить файрвол і чому "він там є" - це не відповідь

Уявіть свій сервер як офісну будівлю. Файрвол - це не замок на дверях. Це охоронець на прохідній, який перевіряє кожного відвідувача, звіряє списки, не пускає підозрілих і веде журнал. Без нього будь-хто може зайти через будь-які двері - а на типовому сервері таких "дверей" (портів) 65 535.

Більшість хостинг-провайдерів встановлюють файрвол, але не налаштовують його під ваш конкретний проєкт. Це як поставити охоронця, який пропускає всіх, бо не отримав інструкцій. Формально захист є. Фактично - ні.

Ось що файрвол має робити щоденно:

  • Блокувати вхідні з'єднання на всі порти, крім тих, що реально потрібні (зазвичай 22, 80, 443)
  • Обмежувати кількість спроб підключення з однієї IP-адреси за хвилину
  • Фільтрувати вихідний трафік - так, з сервера теж не все повинно виходити назовні
  • Логувати заблоковані спроби для подальшого аналізу

Якщо хоча б один пункт з цього списку вам незнайомий - час перевірити, що саме відбувається на вашому сервері прямо зараз.

iptables, UFW, firewalld - хто всі ці люди

Коли ви чуєте "налаштувати файрвол на Linux", мова майже завжди про один з трьох інструментів. І вибір між ними - це не питання смаку. Це питання вашого рівня комфорту з командним рядком і операційної системи.

Інструмент ОС Складність Для кого
iptables Будь-який Linux Висока Досвідчені адміни, максимальний контроль
UFW Ubuntu/Debian Низька Початківці, малий бізнес, стартапи
firewalld CentOS/RHEL/Fedora Середня Ті, хто працює з зонами та динамічними правилами

UFW - це, по суті, зручна обгортка над iptables. Як автоматична коробка передач в машині: під капотом той самий механізм, але керувати простіше. Команда ufw allow 443 робить те саме, що кілька рядків iptables-правил, але вам не треба запам'ятовувати синтаксис, від якого навіть у досвідчених адмінів іноді тремтить око.

Моя порада? Якщо ви не адмін з п'ятирічним стажем - починайте з UFW. Серйозно. Краще працюючий простий файрвол, ніж складний, але неправильно налаштований iptables, який блокує все, включаючи ваших клієнтів.

П'ять правил, які треба створити в перші 10 хвилин після запуску сервера

Я знаю, про що ви думаєте: "У мене новий сервер, хто мене буде атакувати?" Відповідь: автоматичні сканери знаходять новий сервер за 30-90 секунд після того, як він отримує публічну IP-адресу. Це не перебільшення - дослідження Cyentia Institute 2023 року підтвердило, що середній час до першої спроби сканування свіжої IP-адреси - менше двох хвилин.

  1. Закрийте все за замовчуванням - політика deny incoming. Спочатку заблокуйте всі вхідні з'єднання, потім відкривайте лише потрібне.
  2. Відкрийте SSH (порт 22) тільки для вашої IP-адреси - або хоча б для діапазону вашого провайдера. Не для всього світу.
  3. Відкрийте порти 80 і 443 - HTTP та HTTPS для веб-трафіку. Якщо у вас не веб-сервер - навіть це зайве.
  4. Увімкніть rate limiting для SSH - не більше 6 спроб за 30 секунд з однієї адреси. Це знищує 99% брутфорс-атак.
  5. Заблокуйте ICMP-флуд - дозвольте ping для діагностики, але обмежте частоту, щоб вас не "запінгували до смерті".

"Безпека - це не продукт, а процес. Файрвол, який ви налаштували і забули, через рік стане частиною проблеми, а не рішення." - Брюс Шнаєр, криптограф і автор книги "Applied Cryptography"

Ця цитата 1990-х залишається актуальною, як ніколи. Бо файрвол - це не "поставив і забув". Це живий організм, якому потрібна увага.

Вихідний трафік: дірка, про яку всі забувають

98% підручників з налаштування файрвола фокусуються на вхідному трафіку. І це логічно - ми звикли думати про загрози, що приходять ззовні. Але ось сценарій, який я бачив на практиці тричі за останній рік.

Зловмисник знаходить вразливість у застарілому плагіні WordPress. Отримує мінімальний доступ. Не руйнує нічого. Замість цього - запускає скрипт, який з'єднується назовні з командним сервером на порту 4444 і починає надсилати дані. Ваших клієнтів. Їхні email, паролі, номери карток.

Якщо ваш файрвол не контролює вихідні з'єднання - сервер може місяцями "зливати" дані, і ви цього не побачите.

Що робити:

  • Дозвольте вихідні з'єднання тільки на порти 80, 443, 53 (DNS) і порт вашого поштового сервера
  • Все інше - заблокуйте і моніторте логи на спроби вихідних з'єднань на нестандартні порти
  • Якщо бачите вихідний трафік на порт 6667 (IRC), 4444, або будь-який порт вище 10000, якого ви не відкривали - це червоний прапор

Так, це трохи параноїдально. Але параноя в серверній безпеці - це не діагноз. Це професійна якість.

Fail2Ban: напарник файрвола, який ловить тих, хто прослизнув

Файрвол працює з правилами: "цей порт відкритий, цей - ні". Але що робити з тим, хто стукає у відкриті двері - порт 22 або 443 - і намагається підібрати пароль? Тут на сцену виходить Fail2Ban.

Цей інструмент читає логи в реальному часі і автоматично додає IP-адреси в бан-лист файрвола. П'ять невдалих спроб входу по SSH за дві хвилини? Бан на годину. Десять спроб підібрати пароль до панелі адміністратора? Бан на добу. Повторний нападник? Бан назавжди.

На одному з проєктів після впровадження Fail2Ban з агресивними правилами кількість спроб брутфорсу впала з 12 000 на день до 40. Не тому що атакувальників стало менше - просто їхні IP блокувались так швидко, що вони навіть не встигали розпочати.

Встановлення на Ubuntu займає одну команду: apt install fail2ban. Базова конфігурація - ще 10 хвилин. Це одна з найкращих інвестицій часу в безпеку, яку ви можете зробити.

WAF - коли звичайного файрвола вже не вистачає

Класичний файрвол працює на рівні мережі: він бачить IP-адреси, порти, протоколи. Але він не розуміє, що саме відбувається всередині HTTP-запиту. Для нього легітимний запит до сторінки товару і SQL-ін'єкція виглядають однаково - обидва йдуть на порт 443.

Web Application Firewall (WAF) працює на рівні додатку. Він аналізує вміст запитів і блокує ті, що містять шкідливі патерни: SQL-ін'єкції, XSS-атаки, спроби читання файлів сервера через path traversal.

Найпопулярніші варіанти:

  • ModSecurity - безкоштовний, працює з Apache і Nginx, потребує ручного налаштування
  • Cloudflare WAF - хмарне рішення, базовий захист безкоштовний, просунутий - від $20/місяць
  • Wordfence - якщо у вас WordPress, це найшвидший спосіб отримати WAF без глибоких знань серверного адміністрування

Ідеальна схема - класичний файрвол (iptables/UFW) + Fail2Ban + WAF. Три рівні захисту, кожен з яких ловить те, що пропустив попередній. Як три фільтри для води: перший затримує каміння, другий - пісок, третій - бактерії.

Аудит: як перевірити, що ваш файрвол дійсно працює

Найнебезпечніша ілюзія - думати, що файрвол захищає, коли він просто встановлений. Я рекомендую перевіряти захист щомісяця. Ось мінімальний чек-лист:

  1. Запустіть nmap зі зовнішньої машини - скільки портів відкрито? Якщо більше трьох-чотирьох, щось не так.
  2. Перевірте активні правила: ufw status verbose або iptables -L -n. Чи немає правил, які ви не створювали?
  3. Загляньте в логи Fail2Ban: fail2ban-client status sshd. Скільки IP заблоковано? Якщо нуль - або у вас немає атак (малоймовірно), або Fail2Ban не працює.
  4. Спробуйте підключитись до сервера з нового IP на порт, який має бути закритий. Він дійсно закритий?

Весь процес займає 15-20 хвилин. Раз на місяць. Це менше, ніж ви витрачаєте на вибір серіалу на Netflix ввечері п'ятниці.

Останнє, про що хочу сказати. Файрвол - це не магічний щит. Це інструмент, ефективність якого на 100% залежить від людини, яка його налаштувала. Ви можете витратити тисячі доларів на найкращий хостинг з DDoS-захистом і виділеними ресурсами - і втратити все через один забутий відкритий порт. Питання не в тому, чи зламають ваш сервер. Питання в тому, наскільки ви ускладните цю задачу для тих, хто спробує. То коли ви востаннє перевіряли, які порти відкриті на вашому сервері?