Назад | Перейти на главную страницу

Как найти количество рабочих Apache в заданной точке для общих IP-адресов?

Узнать количество рабочих Apache, потребляемых IP-адресом в мгновенный момент времени, можно, выполнив:

netstat -pantu | grep :80 |sort | uniq -c |grep <IP_HERE, eg: 192.168> | wc -l

Это полезно, например, во время DDoS-атаки. Исходя из этого, можно определить, эффективны ли контрмеры для сокращения количества рабочих Apache, которые создаются для обработки слишком большого трафика и т. Д.

Недавно я столкнулся с ситуацией, когда произошла атака на общий IP-адрес, и я не мог легко определить, какой пользователь потребляет больше всего рабочих Apache. Как определить такую ​​стоимость?

Было предложено следить за трафиком для каждого пользователя, но это, похоже, не дает ответа, который я ищу, когда создается большое количество рабочих, которые создают тупик, и поэтому я дошел до точки, где я Я пытаюсь изолировать владение работником для каждого пользователя.

вы могли бы разбирать mod_status ж /ExtendedStatus On вывод. Это состояние в реальном времени всех рабочих / потоков / детей. плюс SSL.

Осторожно, это затрудняет отслеживание фактического количества запросов, если сервер отвечает быстро (вы не видите, что происходит между перезагрузками статуса - только последний запрос рабочего).

curl 'http://localhost/server-status' | perl -ne 'print "$1\n" if m~<td nowrap>(.*?)</td>.*</td></tr>~ ' | sort | uniq -c | sort -n

или использовать хардкорный grep для заголовков 'Host:' в сниффе tcpdump - это не дает счетчика рабочих в реальном времени, но показывает поток сервера в реальном времени - так что вам нужно сделать свое собственное (sort|uniq|sort) выборка, если она прокручивается слишком быстро - но вы можете увидеть ВСЕ запросы служил спросил. Будьте осторожны, это небезопасный парсер (заголовки / пакеты могут быть искажены и т. Д.)

tcpdump -qlnpA dst port 80 | egrep '^Host:'

вы можете пофантазировать с этим tcpdump, например

tcpdump -qlnpA dst port 80 | egrep -e '^Host:' -e '(GET|POST)\s.*HTTP'

если вы не используете grep для IP-адреса сервера, вы можете узнать, просто посмотрев на результат. Если нет, вы можете использовать sed, чтобы получить только IP-адрес клиента, а затем используйте sort и uniq -c для подсчета, но будет легче поддерживать сценарий.