Использование .htaccess для предотвращения DDOS-атаки, не работающей с постоянными ссылками

Мы стали жертвой злобной DDOS-атаки на сайт WordPress.

К счастью, их легко удалить, поскольку они представляют собой запросы GET со строкой? Ptrxcz, добавленной в конец URL-адреса.

Имея это в виду, мы создали правила для предоставления 403 страниц с ошибками разрешения для запросов, которые выполняют это с использованием .htacess. Проблема в том, что они, похоже, не работают и с установленными постоянными ссылками.

Вот мой полный файл .htaccess как есть.

RewriteEngine On
RewriteCond %{QUERY_STRING} .*ptrxcz.*
RewriteRule (.*) - [F]

# BEGIN WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

Первая часть - это перенаправление пользователей с ptrxcz на страницу 403. Это отлично работает, если я удалю правила WordPress под ним, но с их включением это просто никогда не работает.

К сожалению, использование отрицательного регулярного выражения с поиском QUERY_STRING работает в обратном порядке (блокирует все, кроме запроса с помощью строки запроса, например:

RewriteCond %{QUERY_STRING} !.*ptrxcz.*

(Обратите внимание на добавленное!)

Есть ли у кого-нибудь идеи:

  1. Почему не работает с постоянными ссылками
  2. Как я могу заставить его работать с постоянными ссылками
  3. Почему отрицательное регулярное выражение в строке запроса работает, но не положительное.

person Peter Featherstone    schedule 20.02.2013    source источник
comment
Питер, ответьте, пожалуйста, на свой вопрос, чтобы он не висел в списке неотвеченных ... Знаете ли вы, Черный список 5G?   -  person brasofilo    schedule 20.02.2013
comment
Да, извини, дружище. Там говорилось, что я не мог ответить на свой вопрос 8 часов ...   -  person Peter Featherstone    schedule 21.02.2013


Ответы (2)


У меня была та же проблема, но она была настолько серьезной, что я поднял небольшой веб-сервер, который выступал в качестве внешнего интерфейса и отфильтровывал эти запросы. Соответствующее правило iptables:

iptables -A INPUT -p tcp --dport 80 -m string --to 70 --algo bm --string 'ptrxcz_' -j DROP

Он дает системе указание проверить до первых 70 символов запроса и, если она найдет «ptrxcz_», отбросить запрос без уведомления. Я попытался вернуть сообщение об ошибке, но пропускная способность, потребляемая кодом ошибки, не стоила того, учитывая, что на другом конце соединения никогда не будет пользователя, который прочитал бы ошибку.

Я создал сообщение в блоге, описывающее шаги, которые я предпринял:

http://web.htcomp.net/?pageid=85&blogid=2

Ларри

person Larry Anglin    schedule 22.04.2013
comment
Спасибо за ввод, Ларри ... К счастью, мой был не настолько плох, что я мог заблокировать его с помощью простых правил .htaccess, но если он вернется сильнее, то спасибо за предупреждение! - person Peter Featherstone; 22.04.2013

Если вы замените QUERY_STRING в приведенном выше коде на THE_REQUEST, тогда это будет работать нормально и точно так же, как требуется в WordPress.

person Peter Featherstone    schedule 21.02.2013