База знаний: Linux Server
Как выявить DoS / DDoS-атаку и найти веб-сайты под атакой на сервере Plesk
Автор Алексей | HiTex.BY, Последнее изменение: Алексей | HiTex.BY на 10 мая 2022 14:10

Для атаки в реальном времени

  • Подключитесь к серверу через SSH.
  • Определите исходные IP-адреса и номера подключений:
  • ss -tan state established | grep ":80\|:443" | awk '{print $4}'| cut -d':' -f1 | sort -n | uniq -c | sort -nr
  • Найдите домены, которые в данный момент подвергаются атаке:
  • for log in /var/www/vhosts/system/*/logs/*access*log; do echo -n "$log "; tail -n10000 "$log" | grep -c 203.0.113.2; done | sort -n -k2
  • Проверьте количество подключений в состоянии SYN_RECV (возможный syn-flood):
  • ss -tan state syn-recv | wc -l
  • Если в Plesk имеется несколько IP-адресов, определите целевой IP-адрес, подвергающийся атаке:
  • netstat -lpan | grep SYN_RECV | awk '{print $4}' | cut -d: -f1 | sort | uniq -c | sort -nk 1

Вполне возможно, что существует не так много установленных подключений к веб-серверу, однако может быть много запросов, которые были успешно обслужены nginx и переданы Apache, и в этот момент Apache подвергается атаке. Чтобы отслеживать эти запросы, выполните следующие действия:

  • Перейдите к/var/www/vhosts/system:

  • cd /var/www/vhosts/system

  • Создайте файл requests для получения количества запросов, которые были сделаны за последний час, используя команду ниже.

    Примечание: В качестве примера будет использоваться 24 / Jan / 2022:20. Здесь ": 20" - это 8 часов вечера.

  • for i in *;do echo -n "$i "; grep '24/Jan/2022:20' $i/logs/access_ssl_log | awk '{print $1}' | wc -l;done > ~/requests

  • Проверьте сгенерированный файл:

cat ~/requests | sort -k 2 -r -n | head
example.com 24549
example.net 18545

test.com 3

Для завершенной атаки
  • Подключитесь к серверу через SSH.

  • Создайте среду для расследования:

mkdir /root/inv
# cd /var/www/vhosts/system
# for i in *; do mkdir /root/inv/$i; done

  • Заполните среду файлами журналов за последние несколько дней:

for i in *; do find $i -mtime -3 -type f -exec cp -a {} /root/inv/$i \;; done

  • Распакуйте обработанные лог-файлы:

cd /root/inv
# for i in /root/inv/*/*; do [[ ${i:(-3)} == ".gz" ]] && gunzip $i ; done

  • Удалить статистику и файлы конфигурации:

rm /root/inv/*/*.conf /root/inv/*/*.png /root/inv/*/*webalizer* /root/inv/*/*webstat */*html

  • Получить записи со дня нападения, чтобы сформировать отчет:

    Примечание: В качестве примера будет использоваться 30 / Oct / 2017.

for i in *; do [[ -d $i ]] && grep -rh "\[30/Oct/2017" ./$i > $i.accessed; done

  • Сортировка записей по размеру:

ls -laS | less

  • Примечание: Будет отображен размер файла журнала. Чем больше размер лог-файла, тем выше вероятность того, что он станет мишенью.

  • Найдите наиболее часто используемые IP-адреса:

cut -f 1 -d ' ' *.accessed | sort -n | uniq -c | sort -nr | less

  • Примечание: Эта команда отображает количество попыток доступа к веб-сайту по каждому IP-адресу за период времени, указанный на шаге 6.

  • Найдите домены, на которые были нацелены эти IP-адреса:

grep -rc 203.0.113.2 /root/inv/*/* | sort -n -k2 -t:
(2 голос(а))
Эта статья полезна
Эта статья бесполезна

Комментарии (0)