В основном я хочу записывать все захваченные 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 дает много результатов, поэтому вам понадобится изрядное количество свободного места на диске!
Если вы работаете в 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 в сообщения.