LINUX.ORG.RU
ФорумAdmin

Посчитать количество пакетов в секунду на сервере

 


0

2

Добрый день. Нашёл один способ через парсинг лога cat /var/log/nginx/-access.log | awk ‘{print $1}’ | uniq -c | sort -rn

проблема почему то считает все запросы сразу а не ип в секунду. Как поправить? Заранее спасибо.

В лучших традициях этого форума ты описал свои фантазии на тему решения некой задачи, не описывая саму задачу.
Это путь, полный боли и страдания. Подумай, хочешь ли ты по нему пройти

zolden ★★★★★
()
Ответ на: комментарий от slowpony

хотя нет.почему то считает несколько ип повторно:

162 31/Dec/2022 15:57:01 104.208.113.195
164 31/Dec/2022 15:55:54 104.208.113.195
164 31/Dec/2022 15:57:08 104.208.113.195
166 31/Dec/2022 15:57:15 104.208.113.195
168 31/Dec/2022 15:56:37 157.245.42.150
168 31/Dec/2022 15:57:42 152.69.220.225
183 31/Dec/2022 15:56:25 152.69.220.225
salanca
() автор топика
Последнее исправление: salanca (всего исправлений: 3)
Ответ на: комментарий от salanca

От сюда следующая проблема, имеем такой список:

159 31/Dec/2022 15:58:46 103.227.177.76
162 31/Dec/2022 15:57:01 104.208.113.195
164 31/Dec/2022 15:55:54 104.208.113.195
164 31/Dec/2022 15:57:08 104.208.113.195
166 31/Dec/2022 15:57:15 104.208.113.195
168 31/Dec/2022 15:56:37 157.245.42.150
168 31/Dec/2022 15:57:42 152.69.220.225
183 31/Dec/2022 15:56:25 152.69.220.225

имеем правила в iptables:

-A INPUT -p tcp -m tcp –dport 443 -m hashlimit –hashlimit-upto 20/sec –hashlimit-burst 20 –hashlimit-mode srcip –hashlimit-name abc -j ACCEPT

-A INPUT -p tcp -m tcp –dport 443 -j DROP

Почему не работает интересно. Буду разбираться.

salanca
() автор топика
Последнее исправление: salanca (всего исправлений: 6)
Ответ на: комментарий от salanca

Попробовал подругому:

-A INPUT -p tcp -m tcp –dport 443 -m hashlimit –hashlimit-above 5/sec –hashlimit-burst 5 –hashlimit-mode srcip –hashlimit-name abc -j DROP

157 31/Dec/2022 20:54:36 159.223.173.237
164 31/Dec/2022 20:54:27 143.110.186.10
168 31/Dec/2022 20:54:29 125.143.142.204
168 31/Dec/2022 20:54:30 167.71.241.136
168 31/Dec/2022 20:54:31 3.230.123.103
168 31/Dec/2022 20:54:35 167.71.241.136
168 31/Dec/2022 20:54:39 47.243.88.120
168 31/Dec/2022 20:54:40 125.143.142.204
181 31/Dec/2022 20:54:34 1.221.173.148

Более 180 запроов в секунду при лимитах 5 пакетов в секунду.

или hashlimit не работает или я делаю что то не так.

АП при такой конфигурации работает:

-A INPUT -p tcp -m tcp –dport 443 -m hashlimit –hashlimit 5/sec –hashlimit-burst 5 –hashlimit-mode srcip –hashlimit-name abc -j ACCEPT

-A INPUT -p tcp -m tcp –dport 443 -j DROP

Имеем

  4 31/Dec/2022 21:05:01 52.214.198.69
  4 31/Dec/2022 21:05:07 77.45.132.254
  5 31/Dec/2022 21:05:06 167.172.75.22
  5 31/Dec/2022 21:05:10 178.34.151.66
  6 31/Dec/2022 21:05:17 85.140.3.100
  7 31/Dec/2022 21:05:07 172.104.125.58
 15 31/Dec/2022 21:05:08 172.104.125.58
 15 31/Dec/2022 21:05:10 172.104.125.58
 16 31/Dec/2022 21:05:09 172.104.125.58
salanca
() автор топика
Последнее исправление: salanca (всего исправлений: 5)
Ответ на: комментарий от salanca

Мне глубоко симпатично твоё упорство в решении какой-то неведомой задачи, которую ты упорно не желаешь описать.
На всякий случай упомяну, что в Nginx есть свои достаточно гибкие механизмы rate limit, с помощью которых можно реализовать зайчатки WAF

zolden ★★★★★
()
Ответ на: комментарий от zolden

Я пытаюсь ограничить запросы к серверу http порт использую в качестве теста.

Пока вариант:

-A INPUT -p tcp -m tcp –dport 443 -m hashlimit –hashlimit 5/sec –hashlimit-burst 5 –hashlimit-mode srcip –hashlimit-name abc -j ACCEPT

работает но сильно нагружает nginx или сам файрвол т.к. при таком правиле сайты работают оч медленно. При стресстесте вообще еле прогружаются при условии нагрузки на спу всего около 20-30% в момент атаки.

Ресурсы на сервере есть как и канал не забит. Где узкое место непонятно.

salanca
() автор топика
Последнее исправление: salanca (всего исправлений: 3)
Ответ на: комментарий от slowpony

Спасибо.

Попробовал limit для ограничения запросов а не пакетов.

Работает хорошо. Только ограничивает все запросы сразу. Нет правила для ограничения с каждого ip?

salanca
() автор топика
Последнее исправление: salanca (всего исправлений: 1)
Ответ на: комментарий от zolden

Попробовал настроить ngx_http_limit_req_module

При досс атаке:

311 31/Dec/2022 22:12:09 176.77.33.241
312 31/Dec/2022 22:11:57 95.78.175.117
314 31/Dec/2022 22:12:04 95.78.175.117
331 31/Dec/2022 22:11:54 176.77.33.241
335 31/Dec/2022 22:11:46 176.77.33.241
378 31/Dec/2022 22:12:06 95.78.175.117
383 31/Dec/2022 22:12:10 176.77.33.241
387 31/Dec/2022 22:12:06 176.77.33.241
390 31/Dec/2022 22:11:49 184.82.196.69
429 31/Dec/2022 22:12:08 176.77.33.241
436 31/Dec/2022 22:11:59 176.77.33.241
563 31/Dec/2022 22:12:13 176.77.33.241

в nginx добавил:

limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;

в хост:

location ~ \.php$ {
            limit_req   zone=one  burst=5 nodelay;
	include snippets/fastcgi-php.conf;

Что делаю не так?

salanca
() автор топика
Последнее исправление: salanca (всего исправлений: 6)
Ответ на: комментарий от salanca

Мм...я так понял, концепция изменилась и теперь надо отразить DDoS, а не посчитать количество запросов, как ты утверждал ранее?
А может быть и что-то ещё, но ты традиционно не расскажешь об этом, до поры до времени?
Как уже выше сказал slowpony все эти танцы с бубнами не запрещают атакующему делать запросы, а лишь изменяют логику их обработки на твоём хосте.
Поэтому в логах запросы так и будут отображаться, это хорошо и правильно (нууу, до какого-то момента, если уже диск не потянет запись access логов, то не очень хорошо, да)
Если у тебя срабатывает rate limit правило, то Nginx дропает такой запрос быстрее(т.е. не будет запросов в бэкенд и прочие апстримы и файловые системы).
Нужно проверить соотношение по кодам ответа.
При срабатывании rate limit запрос отбивается с кодом 403 - это дефолтное ожидаемое поведение (код ответа можно переопределить)

В принципе, это нормально иметь некие защитные трешолды как на L4, так и на L7(где ты можешь ограничить количество обрабатываемых запросов на уровне конкретного локейшена. Ибо отдача статичного файла из кеша в оперативке на порядки быстрее, чем сходить в базу)

zolden ★★★★★
()
Ответ на: комментарий от zolden

Понял. Значит я неверно считаю входящие запросы. Теперь понятно. Спасибо. limit работает но с большим сайтом сразу ложит его какой бы лимит не выставлял. С включенным кешированием нагрузки почти нет.

salanca
() автор топика
Последнее исправление: salanca (всего исправлений: 1)
Ответ на: комментарий от anc

Ип правильно повторяются по дате. Я сам нагружаю сервер запросами для теста. конлимит тут не подходит. В итоге реально работает только кеширование всё остальное почти не эффективно.

salanca
() автор топика
Ответ на: комментарий от salanca

Если соединение не установлено то ничего не передастся.

Та ладно. Такой большой маленький, а все в сказки веришь. Вопрос: что такое установление соединения по UDP ?

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от salanca

Ясно. Ответа на «что такое установление соединения по UDP ?» не будет.
ЗЫ Про TCP накиньте плиз тоже. Что такое «установление соединения»

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от anc

Про udp я вам ответил. Про tcp происходит обращение клиент сервер syn пакетами, если пакеты дошли происходит соединение.

salanca
() автор топика
Последнее исправление: salanca (всего исправлений: 2)

Он не как не ограничивает запросы с ип. Только соединения

Ты если вырубишь keepalive с http/2 в nginx (на время дудоса), то у тебя на одно соединение будет приходиться как раз один запрос. В противном случае тебе запросы только внутри соединения только внутри nginx на L7 считать нормально выйдет.

slowpony ★★★★★
()

Ну сделай себе какой-нибудь механизм, который будет по формальному признаку триггерить паник-бункер: вырубать http/2 и keepalive, врубать правила в файрволле и connlimit в nginx, одновременно, можно даже вместе с кешированием. И таким же макаром обратно, если «дудос» больше не фиксируется 5-10 минут.

slowpony ★★★★★
()
Ответ на: комментарий от slowpony

Да я уже протестировал. Сам файрвол работает с лимитами но появляется задержка в скорости сайта. Небольшая.

По поводу nginx он почему то при ддос атаке никак не помог сразу ложил сайт.

salanca
() автор топика
Последнее исправление: salanca (всего исправлений: 1)