Защита от DDoS с помощью tcpdump

tcpdump — это наисильнейшая утилита UNIX, позволяющая перехватывать и анализировать сетевой трафик, проходящий через сетные интерфейсы. Об установке читайте в документации утилиты или на сайте разработчика, в FreeBSD она есть в штанах, в Debian Linux в репозиториях. Приведу пример как можно использовать tcpdump. Например, на сервере выключены логи, идет легкая ddos атака, происходит что-то не ладное, вы хотите живо посмотреть масштабность или убедиться, что это DDoS-атака, а не DoS или может это вообще никак не связано с внешним миром? Подавайте посмотрим:

tcpdump -v -i eth0 dst port 80

После выше набранной команды вы сможете наблюдать перечень подключений к 80-у порту, чем больше повторных подключений с одинаковых хостов тем вероятнее мы столкнулись с DoS или DDoS нападением. Как вы уже наверное догадались, изменив порт можно проверить есть ли атака на FTP, SSH или другие сервисы которые крутятся на сервере. Добавив ключ -n имена хостов преобразуются в IP адреса. Очами все не уследить, при атаке на веб-сервер вывод tcpdump-a сумасшедшей скоростью будет двигаться вдоль окна вывода терминала Потому, мы сначала запишем вывод tcpdump-a в файл. пакетов 200-300 хватит.

Читайте также:  Символические и жесткие ссылки в Linux что это такое и как их использовать

tcpdump -v -n -w attack.log dst port 80 -c 250

  • v наиболее простой уровень логирования, без изысканности.
  • n преобразуем имена хостов в IP адреса
  • w записываем анализ трафика в файл
  • c число захваченных пакетов

Приступим к анализу полученных данных через tcpdump, отпарсим лог последующей командой:

tcpdump -nr attack.log |awk ‘{print $3}’ |grep -oE ‘[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}’ |sort |uniq -c |sort -rn

Итог будет — 2 столбца, в первом количество подключений, во втором IP. Чем больше подключений для 1-го IP тем вероятнее что это бот. Если список очень длинный можно ограничить его указав нужное число выводимых строк.

tcpdump -nr attack.log |awk ‘{print $3}’ |grep -oE ‘[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}’ |sort |uniq -c |sort -rn | head -20

Что бы заполучить только IP адреса, без первого столбца, нужно убрать ключ -c после uniq. Вывод (может употребляться в разных контекстах: Вывод — проводник в составе электрического устройства, предназначенный для электрического соединения с другими устройствами Устройства ввода-вывода — класс) парсинга возможно перенаправить в файл, а затем простым bash-скриптом, заблокировать все IP со списка.

Читайте также:  Два метода установки Google Chrome на Ubuntu 18.04 LTS Bionic Beaver

#!/bin/bash

BLOCKDB=»ips.txt»
IPS=$(grep -Ev «^#» $BLOCKDB)
for i in $IPS
do
iptables -A INPUT -s $i -j DROP