The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
nginx не отвечает 444, !*! TyLLIKAH, 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 ?


  • nginx не отвечает 444, !*! Аноним, 12:23 , 13-Июл-21 (1)
    >
    > Почему он здесь отвечает 400 ?

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

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

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

      • nginx не отвечает 444, !*! Аноним, 13:32 , 13-Июл-21 (3)
        >>>
        >>> Почему он здесь отвечает 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;
        }

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

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


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

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

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

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


  • nginx не отвечает 444, !*! eRIC, 14:04 , 14-Июл-21 (6)
    > Но иногда это срабатывает:
    > 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 нет.

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

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

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

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

      • nginx не отвечает 444, !*! eRIC, 19:30 , 14-Июл-21 (8)
        нужен конфиг nginx где logformat ваш виден. сервер один? случаем напрямую по IP не обращаются?
        • nginx не отвечает 444, !*! TyLLIKAH, 21:31 , 14-Июл-21 (9)
          > нужен конфиг 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 и баню




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

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