The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"nginx не отвечает 444"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (nginx)
Изначальное сообщение [ Отслеживать ]

"nginx не отвечает 444"  +/
Сообщение от TyLLIKAH (ok), 13-Июл-21, 11:59 
Задача: не отвечать вообще на явно мусорные запросы

В конфиге прописано
if ($http_user_agent = "") {
    return 444;
}

if ($http_user_agent = "-") { // на всякий случай
    return 444;
}

И тем не менее:
139.59.225.6 http://domain.tld - [13/Jul/2021:04:27:10 +0300] "GET / HTTP/1.0" 400 248 "-" "-" 0.000

Почему он здесь отвечает 400 ?

Но иногда это срабатывает:
135.125.245.246 https://domain.tld - [08/Jul/2021:03:55:44 +0300] "POST / HTTP/1.1" 444 0 "-" "-" 0.000

Я подозреваю, приходит не совсем пустой UA. Пустым его делает nginx при записи в лог.


Похожее с запросами
if ($request_method !~ ^(GET|POST|HEAD)$ ) {
    return 444;
}

Но
193.70.3.242 http://domain.tld - [07/Jul/2021:00:28:18 +0300] "\x00\x00\x02\x00" 400 150 "-" "-" 0.044

Почему он здесь отвечает 400 ?


Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "nginx не отвечает 444"  +/
Сообщение от Аноним (1), 13-Июл-21, 12:23 
>
> Почему он здесь отвечает 400 ?

man strlen и думаем над "\x00\x00\x02\x00"

Ответить | Правка | Наверх | Cообщить модератору

2. "nginx не отвечает 444"  +/
Сообщение от TyLLIKAH (ok), 13-Июл-21, 12:49 
>>
>> Почему он здесь отвечает 400 ?
> man strlen и думаем над "\x00\x00\x02\x00"

Спасибо, Капитан! строка "\x00\x00\x02\x00" нулевой длины по strlen, равна "" по strcmp и не входит во множество констант GET|POST|HEAD и, тем не менее, правило не срабатывает.

Ответить | Правка | Наверх | Cообщить модератору

3. "nginx не отвечает 444"  +/
Сообщение от Аноним (1), 13-Июл-21, 13:32 
>>>
>>> Почему он здесь отвечает 400 ?
>> man strlen и думаем над "\x00\x00\x02\x00"
> Спасибо, Капитан! строка "\x00\x00\x02\x00" нулевой длины по strlen, равна "" по strcmp
> и не входит во множество констант GET|POST|HEAD и, тем не менее,
> правило не срабатывает.

скорее всего поток управления туда и не доходит, и в моих кодовых базах тоже бы не дошло

1. if (str == NULL || *str='\0') { ихБинПесец( 01 ); return; } // <= САМОЕ БАЗОВОЕ
2. if (!isValidUTF8(str)) { ихБинПесец( 02 ); return; }
3. if (!isAllowedCharset( str, charset )) { ихБинПесец( 03 ); return; }
n. if (!...) { ихБинПесец( n ); return; }

Тады копать сорцы на предмет логики обработки и цепочки дeфолтных обработчиков
if ($request_method !~ ^(GET|POST|HEAD)$ ) {
    return 444;
}

Ответить | Правка | Наверх | Cообщить модератору

4. "nginx не отвечает 444"  +/
Сообщение от TyLLIKAH (ok), 13-Июл-21, 14:49 
> скорее всего поток управления туда и не доходит, и в моих кодовых
> базах тоже бы не дошло

Спасибо, конечно, что вы мне отвечаете, но я не думаю, что nginx протянул бы столько лет с такой замечательной логикой сравнения строк, как вы описали...


> ... *str='\0') { ихБинПесец( 01 ); return;

Пустая строка - это вполне себе легитимная строка. Какой песец ? Не надо так!

Ответить | Правка | Наверх | Cообщить модератору

5. "nginx не отвечает 444"  +/
Сообщение от Аноним (1), 13-Июл-21, 15:25 
>> скорее всего поток управления туда и не доходит, и в моих кодовых
>> базах тоже бы не дошло
> Спасибо, конечно, что вы мне отвечаете, но я не думаю, что nginx
> протянул бы столько лет с такой замечательной логикой сравнения строк, как
> вы описали...

Тады копать на предмет логики обработки конфигов и/или цепочки дeфолтных обработчиков


Ответить | Правка | Наверх | Cообщить модератору

6. "nginx не отвечает 444"  +/
Сообщение от eRIC (ok), 14-Июл-21, 14:04 
> Но иногда это срабатывает:
> 135.125.245.246 https://domain.tld - [08/Jul/2021:03:55:44 +0300] "POST / HTTP/1.1"
> 444 0 "-" "-" 0.000

И

> Но
> 193.70.3.242 http://domain.tld - [07/Jul/2021:00:28:18 +0300] "\x00\x00\x02\x00" 400
> 150 "-" "-" 0.044
> Почему он здесь отвечает 400 ?

у вас проверка в nginx в секции https стоит, потому для https срабатывает, а для http нет.

Ответить | Правка | Наверх | Cообщить модератору

7. "nginx не отвечает 444"  +/
Сообщение от TyLLIKAH (ok), 14-Июл-21, 14:34 
> у вас проверка в nginx в секции https стоит, потому для https
> срабатывает, а для http нет.

Это я не совсем неудачно из логов надёргал записей.
Проверка и там, и там. И для http, и для https может и сработать, а может и не сработать.

Если делать запросы curl с пустым или пробельным UA, то срабатывает как надо и по http, и по https

Но периодически присылают что-то, что, как я предполагаю, в логах выглядит как пустой UA, но для nginx таковым не является.

Ответить | Правка | Наверх | Cообщить модератору

8. "nginx не отвечает 444"  +/
Сообщение от eRIC (ok), 14-Июл-21, 19:30 
нужен конфиг nginx где logformat ваш виден. сервер один? случаем напрямую по IP не обращаются?
Ответить | Правка | Наверх | Cообщить модератору

9. "nginx не отвечает 444"  +/
Сообщение от TyLLIKAH (ok), 14-Июл-21, 21:31 
> нужен конфиг nginx где logformat ваш виден. сервер один? случаем напрямую по
> IP не обращаются?

/usr/local/etc/nginx/logs/formats.conf                                                                                                            

log_format main '$remote_addr $scheme://$host $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_time';

log_subrequest  on;

/usr/local/etc/nginx/logs/error.conf                                                                                                                

# error_log doesn't support variables
error_log       /var/log/nginx/default.error.log warn;

Тех, кто напрямую обращается по ip, записываю в отдельный log и баню

Ответить | Правка | Наверх | Cообщить модератору

10. "nginx не отвечает 444"  +/
Сообщение от eRIC (ok), 19-Июл-21, 13:24 
> log_format main '$remote_addr $scheme://$host $remote_user [$time_local] "$request"
> $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_time';

хз даже. если нужно лишний трафик сеит, то есть активный проект https://github.com/mitchellkrogza/nginx-ultimate-bad-bot-blo... гляньте

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру