xenon
@xenon
Too drunk to fsck

Как «навесить» капчу на готовый сайт (anti-ddos, apache2/nginx)?

Сайт одного из клиентов под ддосом. Похоже, ддосят через реальных визиторов (предположение: где-то на своем или ломаном сайте повесили ссылки, и их посетители незаметно для себя подгружают разные страницы, или исполняют какой-то JS код, который выполняет запросы. Но я часто вижу запросы с рандомными уникальными параметрами вроде /somepage.php?zGzn1=Ar4lt1aB). Обычно с одного IP даже если много запросов, то одинаковый User-Agent.

Сейчас самописно скриптом грепаю-баню. (уже под 1000 IP в iptables). Есть вариант, перейти на cloudflare, они знают, как бороться с ddos'ом, но не хочется перетаскивать DNS к ним.

Поэтому возник вопрос: Можно ли как-то навесить капчу поверх сайта, просто что-то подправив в конфигах вебсервера? (не переписывая его или с минимальными изменениями и чтобы ботовый запрос не дергал медленную CMSку). Чтобы если нет нужной куки - то выкидывал на капчу и только при решении капчи и получении валидной куки (человек осознанно загружает) - пускал бы на сайт. Главное - запрос от бота должен минимально грузить сервер.

На данный момент сайт под apache 2.4, но могу как-то через nginx прокси зарулить его, через caddy, traefik, хоть через черта лысого. Так что, подойдет решение для любого вебсервера. Есть ли что-то такое? (это главный вопрос)

И еще пара вопросов
- а как-то через CORS (Access-Control-Allow-Origin, ...) или Content-Security-Policy можно решить эту проблему (чтобы браузеры не запрашивали ничего, даже по GET запросам, ни во фреймах, никак) или не поможет? У меня тут скептицизм, потому как они в браузере отрабатывают, а значит, какой-то "тяжелый" запрос к сайту все равно выполнится, отожрет ресурсы и трафик и только в браузере отбросится.
- можно ли как-то узнать, с чего это (и с каких сайтов) браузеры с разных IPк нам лезут? В referer ничего нет.
  • Вопрос задан
  • 177 просмотров
Решения вопроса 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Капча ведь от полноценного DDoS-а не поможет. Если будет настоящий DDoS с 100500+ запросами в секунду - просто замучаетесь генерировать/отправлять эту капчу, с нулевым результатом, клиенты так и будут её без остановки запрашивать...

Самое простое - в самих скриптах проверять валидность данных. Например аргумент zGzn1=Ar4lt1aB у вас где-нибудь существует/используется? Нет? Ну и баньте запрашивающего сразу, не через iptables - так через отдельный файл, скидывать туда все блокированные IP-шки.

Можно сделать a-la Captcha, статичную страничку, на которую будут редиректиться все непроверенные запросы, и там JS-форма с кнопкой(ами), и надо щелкнуть определённую, и тогда будет нужный cookie/аргумент, и полный доступ к сайту... Но атакующие могут тоже адаптироваться, надо учитывать.

Да, CORS поможет, потому что браузер сначала HTTP OPTIONS запросом узнаёт разрешения https сайта - а уже потом ломится за содержимым. Но тут зависит от механизма, действительно ли атакующие браузеры делают запрос с какой-то злонамеренной страницы? Если бы страница была - она отображалась бы в Referer... А тут больше похоже на вредоносный браузерный плагин, а не на ссылку с какой-то страницы, и CORS просто не сработает.

По-моему так!
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Noizefan
@Noizefan
Есть oneliner (ну почти): в нгинксе запретить доступ без куки, и у кого ее нет - отправлять на капчу которая ее повесит
Минус - живые люди тоже должны будут один раз пройти
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы