Я управляю несколькими сотнями веб-серверов за балансировщиками нагрузки, на которых размещается множество различных сайтов с множеством приложений (которые я не контролирую). Примерно раз в месяц один из сайтов взламывается и загружается сценарий флуда для атаки на какой-либо банк или политическое учреждение. Раньше это всегда были UDP-флуды, которые эффективно разрешались путем блокировки исходящего UDP-трафика на отдельном веб-сервере. Вчера они начали наводнять крупный банк США с наших серверов, используя множество TCP-подключений к порту 80. Поскольку эти типы подключений идеально подходят для наших приложений, их простая блокировка не является приемлемым решением.
Я рассматриваю следующие альтернативы. Какой из них вы бы порекомендовали? Вы реализовали это и как?
Естественно, я также ищу способы минимизировать вероятность проникновения хакеров на один из наших размещенных сайтов, но, поскольку этот механизм никогда не будет на 100% водонепроницаемым, я хочу серьезно ограничить влияние вторжения.
Обновление: в настоящее время я тестирую эти правила, чтобы предотвратить эту конкретную атаку. Как бы вы предложили сделать их более общими? Пропускаю ли я известную DoS-атаку TCP, когда я ограничиваю скорость только для пакетов 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
Ура!
На мой взгляд, наилучшее из возможных решений, которое мне очень помогло, - это ограничить количество соединений / пакетов для IP-адреса назначения. Установка разумного лимита не позволит злоумышленнику отправить большое количество подключений к цели. Установка порта и протокола не является хорошей идеей, потому что, если злоумышленник отправляет HTTP-поток сегодня, завтра он будет использовать другой тип атаки. поэтому ограничение подключений по IP-адресу в целом было бы решением вашей проблемы.
Я надеюсь, что это помогает :)
Позиция, которую я всегда придерживался, заключается в том, что веб-сервер вообще не должен создавать исходящие TCP-соединения, а только отправлять трафик в качестве сервера, отвечающего на входящие запросы. (Я также разрешаю входящий TCP только для веб-сервера и SSH.) (В связи с этим я также считаю, что веб-сервер никогда не является подходящим хостом для отправки почты.) Это не только предотвратит исходящие атаки - это также немного усложнит к атакам, совершенным на ваши системы (хакеры не могут получить окно xterm или загрузить свой инструментарий на ваш хост).