Падает сервер из-за размножающихся httpd

12
D
На сайте с 16.04.2016
Offline
9
2362

Злоумышленники с помощью сканеров постоянно ищут уязвимости на сервере. Например, вот такими запросами:

/phpmyadmin/phpmyadmin.css.php?server=1&token=507a2b6ecc6b91d0d7405f7dd0c60bbe&nocache=%0ans%3anetsparker056650%3dvuln

/phpmyadmin/themes/pmahomme/?nsextt='%22--%3E%3C/style%3E%3C/scRipt%3E%3CscRipt%3Enetsparker(0x00FE90)%3C/scRipt%3E
/phpmyadmin/phpmyadmin.css.php?server=..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fetc%2fpasswd%00.php&token=7f541e0b2a653485be06109202409134&nocache=4370900414ltr
/phpmyadmin/themes/'ns='netsparker(0x00FE89)
...

Сканируют по 10-20 запросов в секунду. Раньше проблем с этим не было, но в последнее время стал замечать, что из-за таких сканирований сервер может упасть и не подниматься. Происходит это из-за того, что в какой-то момент из-за большого количества 404 ответов начинают накапливаться процессы httpd.itk, их количество доходит до 500, load average до 200 и сервер перестает отвечать на запросы.

Результаты команд:

ps auxwww -A | grep httpd.itk - http://prnt.sc/asqa0w

netstat -np | grep httpd.itk - http://prnt.sc/asqab7

Сервер на CentOS 6.7, Apache ITK + Nginx

Подскажите, как можно бороться с этой проблемой?

Den73
На сайте с 26.06.2010
Offline
523
#1

купить нормальный сервер который будет держать нагрузку.

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

D
На сайте с 16.04.2016
Offline
9
#2

Den73, сервер как раз нормальный. Дело не в нагрузке от запросов, сервер ее выдерживает легко.

Это какой-то непонятный глюк апача - при большом количестве отданных 404 ошибок, неактивные процессы httpd начинают накапливаться в памяти, заполняют всю память (16 Gb) и переходят в своп. Их количество резко поднимается за 500, хотя в обычное время их не более 15-20.

Возможно, кто-то сталкивался с такой проблемой?

Mik Foxi
На сайте с 02.03.2011
Offline
1165
#3

снизить pm.max_children и KeepAliveTimeout, должно полегчать.

Антибот, антиспам, веб файрвол, защита от накрутки поведенческих: https://antibot.cloud/ Форум на замену серчу: https://foxi.biz/
D
На сайте с 16.04.2016
Offline
9
#4

foxi, pm.max_children - это ведь опция для PHP-FPM, а не для Apache

KeepAliveTimeout отключен в конфигурации Apache

DV
На сайте с 01.05.2010
Offline
644
#5

Оттюньте nginx. Заведите зоны:

nginx.conf

#зона “one” размером 10 мегабайт, со средней скоростью запросов 300 в секунду
limit_req_zone $binary_remote_addr zone=one:10m rate=300r/s;
#зона “two” размером 10 мегабайт, со средней скоростью запросов 2 в секунду
limit_req_zone $binary_remote_addr zone=two:10m rate=2r/s;
#Зона three, количество соединений с одного IP-адреса
limit_conn_zone $binary_remote_addr zone=three:10m;

vhosts.conf (или где у вас виртуальные хосты)

В корневом локейшне

limit_req  zone=two burst=15 nodelay;
limit_conn three 8;

В локейшне на статику

limit_req  zone=one burst=200 nodelay;

Вдобавок, теперь вы можете парсить лог, вылавливать блокированных и впендюривать их в таблицу фаервола.

Если у сканера есть специфический юзерагент, можете перенаправить его ему же в задницу:

    if ( $http_user_agent ~* (OpenLinkProfiler.org|BLEXBot|WebIndex) ){
rewrite ^(.*)$ http://localhost/ permanent;
}
VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
D
На сайте с 16.04.2016
Offline
9
#6

DenisVS, спасибо, блокировать по IP тоже вариант, но непонятная проблема с апачем останется, хотелось бы ее решить.

Проблема звучит так:

В момент сканирования, когда апач выдает много 404 ответов, начинают плодиться неактивные процессы httpd, их количество доходит до 500+, забивает всю память (16 Gb) и уходит в своп. Вопрос в том, почему эти процессы не завершаются?

DV
На сайте с 01.05.2010
Offline
644
#7
Denniz:
Вопрос в том, почему эти процессы не завершаются?

httpd(2).conf нужно.

Mik Foxi
На сайте с 02.03.2011
Offline
1165
#8
Denniz:

KeepAliveTimeout отключен в конфигурации Apache

так разве не он отвечает за то, чтоб не плодились неактивные процессы?

D
На сайте с 16.04.2016
Offline
9
#9

Конфигурация:

Timeout 30

KeepAlive Off

MaxKeepAliveRequests 100

KeepAliveTimeout 15

<IfModule prefork.c>

StartServers 10

MinSpareServers 10

MaxSpareServers 40

ServerLimit 100

MaxClients 100

MaxRequestsPerChild 1000

</IfModule>

---------- Добавлено 16.04.2016 в 12:54 ----------

foxi, я имел в виду, что KeepAlive в апаче отключен, т.к. сверху стоит nginx

---------- Добавлено 16.04.2016 в 12:56 ----------

Несмотря на то, что стоят лимиты ServerLimit 100 и MaxClients 100, неактивные процессы httpd доходят количества 500 штук.

Den73
На сайте с 26.06.2010
Offline
523
#10
Denniz:
Den73, сервер как раз нормальный. Дело не в нагрузке от запросов, сервер ее выдерживает легко.
Это какой-то непонятный глюк апача - при большом количестве отданных 404 ошибок, неактивные процессы httpd начинают накапливаться в памяти, заполняют всю память (16 Gb) и переходят в своп. Их количество резко поднимается за 500, хотя в обычное время их не более 15-20.
Возможно, кто-то сталкивался с такой проблемой?

а чем они занимаются эти процессы? скапливаться могут по множеству причин, например: тормоза диска, скрипт который отдает 404 чем то долго занимается т.д и т.п

блокировать по ip бессмысленно.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий