Файрвол на сервері: як невидима стіна щодня зупиняє тисячі атак, про які ви навіть не здогадуєтесь
О третій ночі, поки ви спите, ваш сервер відбиває від 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-адреси - менше двох хвилин.
- Закрийте все за замовчуванням - політика deny incoming. Спочатку заблокуйте всі вхідні з'єднання, потім відкривайте лише потрібне.
- Відкрийте SSH (порт 22) тільки для вашої IP-адреси - або хоча б для діапазону вашого провайдера. Не для всього світу.
- Відкрийте порти 80 і 443 - HTTP та HTTPS для веб-трафіку. Якщо у вас не веб-сервер - навіть це зайве.
- Увімкніть rate limiting для SSH - не більше 6 спроб за 30 секунд з однієї адреси. Це знищує 99% брутфорс-атак.
- Заблокуйте 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. Три рівні захисту, кожен з яких ловить те, що пропустив попередній. Як три фільтри для води: перший затримує каміння, другий - пісок, третій - бактерії.
Аудит: як перевірити, що ваш файрвол дійсно працює
Найнебезпечніша ілюзія - думати, що файрвол захищає, коли він просто встановлений. Я рекомендую перевіряти захист щомісяця. Ось мінімальний чек-лист:
- Запустіть nmap зі зовнішньої машини - скільки портів відкрито? Якщо більше трьох-чотирьох, щось не так.
- Перевірте активні правила: ufw status verbose або iptables -L -n. Чи немає правил, які ви не створювали?
- Загляньте в логи Fail2Ban: fail2ban-client status sshd. Скільки IP заблоковано? Якщо нуль - або у вас немає атак (малоймовірно), або Fail2Ban не працює.
- Спробуйте підключитись до сервера з нового IP на порт, який має бути закритий. Він дійсно закритий?
Весь процес займає 15-20 хвилин. Раз на місяць. Це менше, ніж ви витрачаєте на вибір серіалу на Netflix ввечері п'ятниці.
Останнє, про що хочу сказати. Файрвол - це не магічний щит. Це інструмент, ефективність якого на 100% залежить від людини, яка його налаштувала. Ви можете витратити тисячі доларів на найкращий хостинг з DDoS-захистом і виділеними ресурсами - і втратити все через один забутий відкритий порт. Питання не в тому, чи зламають ваш сервер. Питання в тому, наскільки ви ускладните цю задачу для тих, хто спробує. То коли ви востаннє перевіряли, які порти відкриті на вашому сервері?