http_user_agent равен -

Maxim Dounin mdounin at mdounin.ru
Tue May 26 13:54:41 MSD 2009


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





More information about the nginx-ru mailing list