Когда ни одна из служб защиты не смогла отразить атаку или сервер начал работать под высокой нагрузкой по другой причине. Мы предлагаем установить скрипт и запускать его каждую минуту через службу crontab. Это позволит не потерять доступ к серверу при критичной нагрузке и принять меры по устранению данной ситуации.
/etc/cron.daily/load-average-2.sh
#!/bin/bash
loadavg=`uptime | awk '{print $10+0}'`
# bash doesn't understand floating point
# so convert the number to an interger
thisloadavg=`echo $loadavg|awk -F \. '{print $1}'`
if [ "$thisloadavg" -ge "2" ]; then
echo "Busy - Load Average $loadavg ($thisloadavg) "
echo 'Warning - Load AVG (my.server.tld) on:' `date` `uptime` | mailx -s "Warning: LA from `uptime | cut -d'(' -f2 | cut -d')' -f1`" -S smtp=smtp://mail.server.tld -S smtp-auth=login -S smtp-auth user=user@domain.tld -S smtp-auth-password=PassW0rd -S from="LLC COMPANY" to@domain.tld
else
echo "Okay - Load Average $loadavg ($thisloadavg) "
fi
Данный скрипт необходимо сохранить в файл load-average-2.sh в папке /etc/cron.daily задать права на выполнение.
Потом нужно добавить через команду crontab -e строку, чтобы выполнять его каждые 2 минуты:
*/2 * * * * /etc/cron.daily/load-average-2.sh >> /dev/null 2>&1
Значения необходимо заменить на свои:
- my.server.tld - имя сервера, на который Вы устанавливаете скрипт.
- mail.server.tld - имя домена почтового сервера, через который скрипт будет отправлять Вам уведомления.
- user@domain.tld - имя почтового ящика для подключения к серверу почты (логин).
- PassW0rd - пароль для почтового аккаунта.
- LLC COMPANY - имя и адрес от кого будет отправлено письмо.
- to@domain.tld - почтовый адрес куда будет отправлено уведомление.
В случае если нагрузка (load average) будет превышать 2 т.е. 200% (2 ядра), скрипт вышлет уведомление. Данный параметр выделен, его можно поменять на свой в зависимости от количества ядер у сервера. К примеру если у Вас 4 ядра, то максимальная нагрузка будет 4, т.е. 400%.
При необходимости Вы можете добавить в скрипт команды, которые необходимо выполнять, например перезапуск служб с целью сброса нагрузки. Добавить их необходимо перед else, например:
service nginx restart
service ddos restart
service httpd restart