Я запускаю некоторые веб-приложения на сервере Debian, и иногда мне приходится бороться с атаками ddos. Он съедает все мои ресурсы, и я больше не могу подключиться к серверу по ssh. Идея заключалась в том, чтобы разорвать все соединения, если средняя нагрузка слишком высока, поэтому для меня все еще есть ресурсы и принять новые соединения, если средняя нагрузка достаточно низкая. Поскольку это должно работать при большой нагрузке, я боюсь, что cronjob будет недостаточно быстрым или потребует слишком много ресурсов.
tl; dr: есть ли способ настроить поведение, если средняя нагрузка превышает определенный порог?
Хотя я считаю, что вам следует попытаться решить реальную проблему на уровне брандмауэра или сети, быстрый и грязный подход к действиям на основе ресурсов заключается в использовании Утилита Monit.
В частности, Monit может выполнять тесты ресурсов, предупредить вас и принять меры в соответствии с этими условиями.
IF resource operator value [[<X>] <Y> CYCLES] THEN action [ELSE IF SUCCEEDED [[<X>] <Y> CYCLES] THEN action]
Так...
check system example.com
if loadavg (1min) > 10 then alert
Или для чего-то особенного для Apache:
check process apache with pidfile /var/run/httpd.pid
start program = “/sbin/service httpd start”
stop program = “/sbin/service httpd stop”
if children > 250 then restart
if loadavg(5min) greater than 10 for 8 cycles then stop
if 3 restarts within 5 cycles then timeout