Назад | Перейти на главную страницу

Журнал вывода tcpdump

В основном я хочу записывать все захваченные tcpdump пакеты в файл каждые 3 дня. Таким образом, в основном tcpdump должен работать в течение 24 часов в день 1 и записывать вывод в Day1.log и тому подобное для Day2 и Day3. На 4-й день он должен повториться и снова записать журнал в День 1. В основном это делается для проверки попыток DDoS на моем сервере и для определения типа атаки, включая IP-адрес злоумышленника, поскольку в последние 7 дней мои машины подвергались DDoS-атакам, и я ожидаю, что это повторится снова. Я знаю, что это делается с помощью некоторых cronjobs, но мне нужны настоящие команды, чтобы поместить туда?

Я также хочу знать, какой IP-адрес сделал максимальный ввод в мегабитах в секунду, поскольку у меня большой трафик, поэтому мне потребуется почти 6 часов, чтобы продолжить поиск этих файлов для IP-адреса злоумышленника. Итак, есть ли что-нибудь в WireShark во время анализа этих файлов, которое могло бы сказать, какой объем ввода в мегабайтах в секунду был сделан IP-адресом моего сервера? Если нет, как мне это найти?

Редактировать: --------------------------------------------

Вы, ребята, также можете публиковать свои идеи по борьбе с этим. Все, что мне нужно, это найти IP-адрес злоумышленника, пакетные данные, которые он отправил, и ввод в мегабитах в секунду, сделанный на моем сервере. Мои клиенты не делают более 300 кбит / с входных данных, поэтому, если мы установим фильтр для захвата входных данных со скоростью более 1 МБ / с, если они будут сделаны, мы сможем захватить это.

Это прямо на страницах руководства, tcpdump имеет -G,

If specified, rotates the dump file specified with the -w option every
rotate_seconds seconds. Savefiles will have the name specified by -w
which should include a time format as defined by strftime(3). If no
time format is specified, each new file will overwrite the previous.

Так, tcpdump -i eth0 -s 65535 -G 86400 -w /var/log/caps/%F.pcap будет писать в /var/log/caps/%F.pcap (где% F будет 2012-05-10, 2012-05-11, 2012-05-12 и т. д.). Имейте в виду, что он будет вращаться через 24 часа с момента запуска ограничения, поэтому технически это не каждый день, если вы не запустите его в полночь.

Я не говорю, что то, что вы планируете делать, является хорошей идеей, просто это решение, о котором вы просите.

Вместо того, чтобы регистрировать весь трафик, я бы предложил следующее: Отслеживайте количество пакетов, отправленных на ваш сервер. Если он превышает определенный порог, зарегистрируйте пару 1000 пакетов, а затем подождите более длительное время.

Эта трассировка пакета должна содержать много информации, которую можно использовать для анализа. Кроме того, это не приведет к чрезмерной дополнительной нагрузке на ваш сервер, пока все в порядке. Вы можете использовать следующий взломанный код bash в качестве отправной точки (можно запустить в screen, например):

interface=eth0
dumpdir=/tmp/

while /bin/true; do
  pkt_old=`grep $interface: /proc/net/dev | cut -d :  -f2 | awk '{ print $2 }'`
  sleep 1
  pkt_new=`grep $interface: /proc/net/dev | cut -d :  -f2 | awk '{ print $2 }'`

  pkt=$(( $pkt_new - $pkt_old ))
  echo -ne "\r$pkt packets/s\033[0K"

  if [ $pkt -gt 5000 ]; then
    echo -e "\n`date` Under attack, dumping packets."
    tcpdump -n -s0 -c 2000 -w $dumpdir/dump.`date +"%Y%m%d-%H%M%S"`.cap
    echo "`date` Packets dumped, sleeping now."
    sleep 300
  fi
done

Не стесняйтесь адаптировать его под свои нужды.

Вы, конечно, можете получить эти данные из tcpdump, но это не совсем просто.

Во-первых, tcpdump записывает в специальный формат файла, который не является файлом журнала, поэтому вам понадобится другой экземпляр tcpdump или Wireshark для анализа файлов журнала. Но вот базовое предложение:

  • напишите сценарий, который убивает любой запущенный tcpdump и запускает новый, который записывает в файл журнала с датой дня в его имени
  • запускать этот скрипт из cron каждую полночь
  • иметь запись cron, которая очищает файлы старше 3 дней в каталоге, в котором вы храните файлы журнала

Имейте в виду, что tcpdump дает много результатов, поэтому вам понадобится изрядное количество свободного места на диске!

Если вы работаете в Linux, вы можете использовать logrotate.

Что-то вроде

   /var/log/dump.pcap {
       rotate 3
       daily
       postrotate
           /usr/bin/killall tcpdump
           /usr/sbin/tcpdump options -w /var/log/dump.pcap
       endscript
   }

Эта конфигурация logrotate войдет, например, в /etc/logrotate.d/tcpdump.

У вас наверняка есть строчка в /etc/crontab или как мне сценарий /etc/cron.daily/logrotate который вызывает logrotate.

Logrotate при обработке этого файла переименует /var/log/dump.pcap.1 к /var/log/dump.pcap.2 и /var/log/dump.pcap к /var/log/dump.pcap.1 и так далее. Затем, когда все эти файлы будут переименованы, а самые старые удалены (в этом примере /var/log/dump.pcap.2 будет удален перед переименованием .1 в .2) он будет выполнять команды в postrotate. К сожалению, tcpdump не отслеживает kill -HUP, который используется другими демонами, такими как httpd, поэтому этот рецепт убивает его, а затем запускает новый захват.

Обратите внимание, что в первый день вы можете захотеть запустить tcpdump вручную.

Это не проверено, но должно помочь.

Что-то вроде darkstat может быть более полезным для определения хостов с высоким трафиком, хотя он не будет хранить фактический трафик (хотя записывает номера портов).

Я использовал цирк для этого нужно быть осторожным.

tshark -i eth0 -a duraition:86400 -b -w x.pcap

Или вы можете установить сложные параметры формата вывода и перенаправить stdout. Проблема в том, что tshark никогда не отбрасывает полученные пакеты, поэтому в конечном итоге у него заканчивается память. чем короче, тем лучше.

Еще один прием, который мне нравится, - использование iptables и ULOG. Есть несколько демонов ulog, которые могут отправлять сообщения в обычные файлы журналов. Я также использовал Spectre для преобразования отчетов ulog в сообщения.