Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: http_user_agent равен -
Hello!
On Tue, May 26, 2009 at 01:09:12PM +0400, Vasiliy Tolstov wrote:
> Добрый день.
> Есть небольшая, порядка 80 мегабит, DDoS атака. Для сбора айпишников
> сделал следующую конструкцию:
>
> location / {
> if ($http_user_agent = '') {
> rewrite ^.*$ /empty last;
> break;
> }
> if ($http_user_agent = '-') {
> rewrite ^.*$ /tire last;
> break;
> }
> if ($server_protocol = 'HTTP/1.0') {
> rewrite ^.*$ /proto last;
> break;
> }
> }
> location /tire {
> error_log /var/log/nginx/ddos_tire;
> access_log /var/log/nginx/ddos_tire;
> return 503;
> }
> location /proto {
> error_log /var/log/nginx/ddos_proto;
> access_log /var/log/nginx/ddos_proto;
> return 503;
> }
> location /empty {
> error_log /var/log/nginx/ddos_empty;
> access_log /var/log/nginx/ddos_empty;
> return 503;
> }
>
> В логах access_log все равно наблюдаю попытки получения доступа с -
> вместо юзер агента.
> 83.131.214.207 - - [26/May/2009:13:08:29 +0400] 408 "-" 0 "-" "-"
> Как это можно заблокировать? Где я ошибся?
Обработка запроса в соответствии с конфигурацией начинается
только после того как заголовки запроса получены. Если они не
получены - обрабатывать нечего.
В данном случае клиент судя по всему просто открыл соединение и
ничего не передавал. Соединение было закрыто nginx'ом по
таймауту.
Блокировать такое в nginx'е - смысла нет, т.к. реального запроса
всё равно нет, а соединение так и так открыто. Можно разве что
таймаут уменьшить (но опять же для всех, ибо плохие ничем не
отличаются от хороших). Наиболее общее решение - читать логи
скриптом и строить по ним правила для firewall'а.
Maxim Dounin
|