Firewall чи WAF: що бачить і зупиняє кожен з них
Stateful firewall читає адреси, порти і стан з'єднання; WAF читає сам HTTP-запит, а формі входу потрібні обидва, послідовно.
У цій статті 5 розділів
- Stateful firewall ухвалює рішення за конвертом: джерело, призначення, порт і стан з'єднання. Бот, що підбирає паролі на формі входу, надсилає коректно сформовані запити на порт, який має бути відкритим, тож firewall їх пропускає.
- WAF, або reverse proxy, що виконує роботу WAF, ухвалює рішення за вмістом: шлях, метод, тіло, код відповіді й частота на клієнта. Невдалі входи, спроби ін'єкцій і скрапери видимі лише там.
- Ці два стають послідовно. Firewall звужує те, що взагалі може досягти проксі; проксі виявляє зловживання в потоці запитів і може передати адресу назад пакетному фільтру, з терміном дії і списком дозволених для оператора.
Що вирішує stateful firewall
Firewall рівнів 3/4 відстежує з'єднання і судить кожне нове за його адресами, портом і станом потоку, до якого воно належить. Cisco Firepower, OPNsense і netfilter усі роблять це добре: порт, якого не відкриває жодне правило, закритий, відповідь дозволена лише для з'єднання, яке почала внутрішня сторона, а порти керування відповідають лише діапазонам зі списку дозволених. Його погляд зупиняється на транспортному рівні. З TLS на шляху він узагалі не бачить усередину корисного навантаження, якщо не термінує сесію, і навіть у відкритому вигляді не має поняття про URL, заголовок, статус відповіді чи вхід.
Що додає WAF
Web application firewall читає HTTP-транзакцію після термінації TLS, що на практиці означає, що він живе в reverse proxy або поруч із ним. Він додає три види контролю, які firewall не може виразити. Сигнатурні правила, як ModSecurity з OWASP Core Rule Set, зіставляють ін'єкції, обхід каталогів і відомі експлойти в запиті. Поведінкові правила рахують на клієнта і на шлях: запити за хвилину на маршруті входу, відповіді про невдалий вхід на адресу, ознаки бота в заголовках і таймінгах. Позитивні правила визначають, що приймає шлях, наприклад які методи, які типи вмісту і який розмір тіла, і відхиляють решту.
WAF не є заміною firewall. Він бачить лише той трафік, що до нього доходить, і нічого не знає про SSH, порти баз даних чи площину керування.
Де стає видимим зловживання входом
Невдалий вхід є фактом у відповіді. Застосунок відповідає на POST на шлях входу статусом або перенаправленням, яке відрізняє невдачу від успіху, і проксі записує це у свій журнал доступу при кожній спробі. Підрахунок невдач на клієнта за хвилину є одним рядком awk над цим журналом, і це сигнал, який пакетний фільтр не має як побачити.
Контроль має бути прив'язаний до клієнта, а не до облікового запису. Блокування облікового запису саме по собі зупиняє спроби проти одного імені користувача і замикає його власника, тоді як бот переходить до наступного імені у своєму списку. Обмеження частоти на клієнта на маршруті входу робить те, чого блокування не може:
# nginx: at most 5 login attempts a minute per client, small burst allowed
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
location = /login {
limit_req zone=login burst=5 nodelay;
proxy_pass http://app;
}HAProxy виражає ту саму ідею через stick table з ключем за адресою джерела, а набір правил WAF може рахувати код відповіді про невдалий вхід безпосередньо.
Як ці два поєднуються
Порядок такий: firewall, потім термінація TLS і проксі з його правилами WAF, потім застосунок. Виявлення належить рівню 7, бо саме там докази. Примус може бути на будь-якому рівні. Проксі може відповісти клієнту-порушнику кодом 429 або 403 на його наступний запит, чого достатньо для більшості зловживань. Для клієнта, який не вгамовується, проксі може відправити адресу в динамічну таблицю пакетного фільтра на визначений період, що також скидає інші з'єднання цього клієнта і не коштує firewall нічого на пакет.
Два проєктні рішення передують зведенню цього зворотного зв'язку. Діапазони керування й моніторингу оператора потрапляють у список дозволених першими, щоб тест чи помилка не могли замкнути людей, які керують платформою. І спільні адреси реальні: офісний NAT або carrier-grade NAT ставить багатьох людей за однією адресою, тож блокування мають короткий термін дії і задокументований спосіб їх зняти. Увесь ланцюжок потім тестується з хоста поза мережею, так, як його зустрів би зловмисник, перш ніж хтось на нього покладеться.
Чого не бачить жоден з них
Правильний пароль. Credential stuffing із витеклим, дійсним паролем виглядає як успішний вхід для кожного рівня. Цю прогалину закриває багатофакторна автентифікація на обліковому записі та список дозволених для адміністративних шляхів на firewall, щоб дійсні облікові дані були марними з адреси, яка не є вашою.
Прямі відповіді
У чому різниця між firewall і WAF?+
Stateful firewall працює на рівнях 3/4 і ухвалює рішення за адресами, портами і станом з'єднання. WAF працює на рівні 7 і ухвалює рішення за вмістом HTTP-запиту й відповіді. Спроба входу є подією рівня 7, тож лише WAF або проксі можуть сказати, чи вона провалилася.
Чи може firewall зупинити credential stuffing на формі входу?+
Не сам. Спроби є коректно сформованими запитами на відкритий порт, а саме їх firewall і створений пропускати. Невдача міститься у відповіді, на рівень вище. Рахуйте її на проксі й дозвольте проксі вирішувати, або живіть firewall цим рішенням.
Чи потрібен мені WAF-пристрій, якщо я вже використовую nginx або HAProxy?+
Часто ні. ModSecurity працює як модуль в nginx і Apache, HAProxy має stick tables для відстеження частоти й зловживань, і обидва журналюють коди відповідей, які викривають зловживання входом. Проксі, який у вас уже є, бачить усе, що бачив би WAF; питання в тому, чи написав хтось правила.
Блокувати на проксі чи на firewall?+
Виявляйте на проксі, бо докази там. Застосовуйте на проксі в більшості випадків і ескалюйте до пакетного фільтра для наполегливих джерел, з терміном дії, списком дозволених оператора і шляхом звільнення для спільних адрес.
Зловживання входом є проблемою рівня 7.
Поговоріть з інженером про те, де за вашим стежать.
Поговоріть з інженеромВи дійшли до кінця.
Застосуйте прочитане на практиці
Що ви запускаєте?
Розкажіть нам про навантаження, трафік і вимоги до відновлення. Почніть з конструктора сервера або обговоріть деталі з інженером.
Написано інженерами, які будують і експлуатують інфраструктуру, про яку йдеться.Поговоріть з інженером
