Чи можу я нечисто закрити TCP-з'єднання, щоб пом’якшити атаку відмови у наданні послуги?


1

Я працюю над веб-сервісом, який може стати об'єктом атаки відмови у наданні послуги. У нас є деякі пом’якшення проти атак у стилі "SYN poplava". Але є й інші атаки на рівні програми, коли зловмисний / зламаний клієнт може неодноразово доручати веб-сервісу виконувати дорогі завдання.

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

Наївний метод повинен був би розірвати з'єднання TCP з close(2), shutdown(2)або аналогічний. Але тоді клієнт може негайно знову підключитися (до встановленого ліміту підключень / другий для зменшення повені SYN), і це підключення дороге для нас через рукостискання TLS та інші витрати на налаштування з'єднання. Ми шукаємо спосіб зупинити взаємодію клієнта з нашою службою на деякий час, але чисте припинення TCP-з'єднання цього не робить.

Однак якщо наш процес зміг би припинити TCP-з'єднання нечисто , клієнт, який зловживав, затримався б на деякий час, перш ніж він відновиться, тим самим забезпечивши період "охолодження". Під "нечистим припиненням" я маю на увазі закриття TCP-з'єднання (обидві половини повнодуплексного) на стороні сервера, не надсилаючи жодного FINпакета, щоб сповістити клієнта про припинення, і не надсилаючи жодних подальших пакетів, що посилаються на це з'єднання. Це затримає клієнта, поки клієнт вважає, що з'єднання все ще знаходиться в ESTABLISHEDстані (що становить 13-30 хвилин в Linux).

Однак я не бачу жодного способу, щоб процес UNIX / Linux нечисто розірвав з'єднання TCP. close(2), shutdown(2)і подібні всі, схоже, чітко припиняють з'єднання і не надають жодних варіантів нечистого припинення.

Чи існує в UNIX / Linux якийсь варіант для негайного, нечистого припинення TCP-з'єднання, як пом'якшення для DOS-атак?


У будь-якому випадку вам доведеться перервати з’єднання, але ви повинні використовувати щось подібне fail2ban проти таких клієнтів.
Майкл Хемптон

Відповіді:


0

Що ви повинні шукати, це брандмауер і fail2ban. iptablesяк і раніше є майже стандартним для Linux дистрибутивів і fail2banбуде працювати з більшістю сервісів. Що ви хочете зробити, це налаштувати fail2banмоніторинг певного файлу журналу за допомогою конкретного шаблону регулярних виразів, щоб знати, коли підключається один із цих «проблемних» клієнтів, а потім fail2banавтоматично додати правило брандмауера або припинити або відхилити з'єднання. fail2ban налаштовується на те, як залишити правило брандмауера, щоб ви могли заблокувати клієнта на 5 хвилин або 5 днів, що б ви хотіли насправді.

Ви також можете використовувати брандмауер веб-додатків (WAF) і для цього типу матеріалів.

Що стосується атаки DOS, залежно від того, як це робиться, можливо, вам не пощастить з локальним брандмауером і, можливо, доведеться дістатися до свого постачальника до потоку маршрутів або хостів, які, як відомо, є проблемними та спричиняють серйозні перебої в обслуговуванні. Здається, ви не займаєте такого типу позиції і просто маєте можливі проблеми із шаром програми для вирішення, тому це зайве.


0

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

Оскільки ви вже згадували, що для встановлення нового з'єднання пов'язана вартість, я рекомендую вам розглянути альтернативний підхід, ніж припиняти з'єднання. Можливо, ви можете розглянути можливість обмеження зв’язку на 1 байт в хвилину або щось подібне. При такому підході ви все ще можете тримати ресурси зловмисника зайнятим при мінімальних витратах на вашому боці. Якщо у вас є більше часу і ви хочете проявити творчість, перенаправляйте всі такі з'єднання на один сервер у вашому оточенні, щоб інші сервери не витрачали обмеження на відкриті файли. Як згадував Ендрю, ви також можете розглянути можливість fail2ban, як тільки ви підтвердите, що з'єднання є зловмисником, і безпечно забороняти його протягом декількох годин.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.