Защита от DDoS с помощью утилиты tcpdump на Unix, FreeBSD, Linux

Тема в разделе "Защита от Ddos-атак", создана пользователем Devider, 6 сен 2013.

  1. tcpdump - это мощнейшая утилита UNIX, позволяющая перехватывать и анализировать сетевой трафик, проходящий через сетевые интерфейсы. Об установке читайте в документации утилиты или на сайте разработчика, в FreeBSD она есть в портах, в Debian Linux в репозиториях.

    С помощью команды
    Код:
    tcpdump -v -i eth0 dst port 80
    можно вывести список подключений к порту 80. Слишком большое количество подключений с одинаковых хостов может свидетельствовать о Ддос-атаке.
    Для большей наглядности можно использовать следующие команды:
    Код:
    tcpdump -v -n -w ddos.log dst port 80 -c 5000
    tcpdump -nr ddos.log |awk ‘{print $3}’ |grep -oE ‘[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}’ |sort |uniq -c |sort -rn
    С помощью первой команды мы выводим в файл ddos.log 5000 последних пакетов. Расшифровку директив можно посмотреть тут.
    Вторая команда упорядочивает информацию в файле по количеству запросов. Получаем такой вывод:
    Код:
    445  32.81.96.0
    344 75.172.183.197
    342 2.199.211.238
    234 223.255.231.88
    112 142.141.170.191
    
    Самые активные IP можно проверить на территориальную принадлежность с помощью подобного сервиса, чтобы временно перекрыть доступ на сервер для этих стран.

    Итак, у нас есть файл ddos.log в котором записаны IP адреса в порядке убывания их активности. У нормальных пользователей будет сильный разрыв по количеству подключений от ддос-ботов, поэтому все айпи с числом подключений, скажем, не больше 30 можно из файла удалять. Сделать это можно за 2 клика мышкой, т.к. нормальные будут находиться внизу.


    Теперь приводим лог в порядок командой:
    Код:
    tcpdump -nr ddos.log |awk ‘{print $3}’ |grep -oE ‘[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}’ |sort |uniq |sort -rn > ips.txt
    
    Эта команда извлечет только айпишники из файла ddos.log и запишет их в файл ips.txt. Теперь их можно заблокировать с помощью простенького скрипта:
    Код:
    #!/bin/bash
    BLOCKDB="ips.txt"
    IPS=$(grep -Ev "^#" $BLOCKDB)
    for i in $IPS
    do
    iptables -A INPUT -s $i -j DROP
     
    6 сен 2013
  2. Во FreeBSD утилита TCPDUMP идет вместе с ОС ;-)
     
    6 янв 2016

Поделиться этой страницей