我在 Debian 服务器上运行一些 Web 应用程序,有时不得不应对 DDoS 攻击。它耗尽了我所有的资源,我无法再通过 ssh 进入服务器。一个想法是,如果负载平均值过高,则断开所有连接,这样我仍有资源可用,如果负载平均值足够低,则接受新连接。由于这必须在重负载下工作,我担心 cronjob 速度不够快或占用太多资源。
tl;dr:如果负载平均值高于特定阈值,是否有办法配置行为?
答案1
虽然我认为你应该尝试在防火墙或网络层面解决真正的问题,但基于资源的行动的一个快速而粗略的方法是使用监视实用程序。
具体来说,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