Я запускаю кілька сотень веб-серверів за вантажистами, розміщуючи безліч різних сайтів з безліччю додатків (з яких я не маю контролю). Приблизно раз на місяць один із сайтів зламається, і сценарій затоплення завантажується для нападу на якийсь банк чи політичну установу. У минулому це завжди були повені UDP, які були ефективно усунені шляхом блокування вихідного трафіку UDP на окремому веб-сервері. Вчора вони почали затоплювати великий банк США з наших серверів, використовуючи безліч підключень TCP до порту 80. Оскільки цей тип з'єднань ідеально підходить для наших програм, просто блокування їх не є прийнятним рішенням.
Я розглядаю наступні альтернативи. Який би ви порадили? Ви реалізували це, і як?
- Обмежте на веб-сервері (iptables) вихідні пакети TCP з вихідним портом! = 80
- Те саме, але з чергою (тс)
- Обмеження норми вихідного трафіку на користувача на сервері. Досить адміністративний тягар, оскільки потенційно 1000 користувачів різних користувачів на сервері додатків. Може бути так: як я можу обмежити пропускну здатність користувача?
- Ще щось?
Звичайно, я також розглядаю способи мінімізувати шанси хакерів потрапити на один з наших розміщених сайтів, але оскільки цей механізм ніколи не буде на 100% водонепроникним, я хочу серйозно обмежити вплив вторгнення.
Оновлення. Зараз я тестую ці правила, що б не допустило цієї конкретної атаки. Як би ви запропонували зробити їх більш загальними? Чи пропускаю я відому атаку TCP DoS, коли я обмежую обмеження лише для пакетів SYN?
iptables -A OUTPUT -p tcp --syn -m limit --limit 100/min -j ACCEPT
iptables -A OUTPUT -p tcp --syn -m limit --limit 1000/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A OUTPUT -p tcp --syn -j REJECT --reject-with tcp-reset
Ура!