我基本上想要的是每3天将所有tcpdump捕获的数据包写入一个文件。 所以基本上tcpdump应该在第一天运行24小时,并将输出写入Day1.log,Day2和Day3也是类似的。 在第四天,它应该重复,并将日志再次写入Day1。 这基本上是检查我的服务器上的DDoS尝试,并找出包括攻击者的IP在内的攻击types,因为在过去7天内我的机器是DDoS的,我希望它再次发生。 我知道它由一些cronjobs完成,但我需要实际的命令放在那里?
我也想知道哪个IP以最大的mb / secinput了多less,因为我有很高的stream量,所以我几乎花了6个小时来search攻击者IP的文件。 那么Wireshark在分析这些文件的时候是否还有什么可以说明一个IP在我的服务器上有多lessmb / s的input呢? 如果不是,我该如何find?
编辑: ——————————————–
你们可以自由地发表你们的反对意见。 我需要的只是find攻击者的IP,他发送的数据包数据和以mb / s为单位input到我的服务器的input。 我的客户不会超过300kb / s的input,所以如果我们设置一个filter来捕获超过1mb / s的input,我们可以捕获。
而不是logging所有的stream量,我会build议如下:监视发送到您的服务器的数据包的数量。 如果超过某个阈值,则logging几千个数据包,然后等待较长的时间。
数据包跟踪应包含大量可用于分析的信息。 另外,在一切正常的情况下,它不会给你的服务器带来太多额外的负担。 您可以使用下面的黑客攻击代码作为起点(例如,可以在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
随意适应您的需求。
在man页面中, 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小时内旋转,所以这不是技术上的每天,除非你在午夜运行。
我不是说你打算做什么是一个好主意,只是这是你要求的解决scheme。
你当然可以从tcpdump获得这些数据,但这并不完全是直接的。
首先,tcpdump写入一个不是日志文件的特殊文件格式,所以你需要另外一个tcpdump或Wireshark实例来分析日志文件。 但是这里有一个基本的build议:
被警告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 }
这个logrotateconfiguration会进入eg /etc/logrotate.d/tcpdump 。
你可能在/etc/crontab有一行,或者像我一样调用logrotate的脚本/etc/cron.daily/logrotate 。
Logrotate将在处理该文件时将/var/log/dump.pcap.1重命名为/var/log/dump.pcap.2 ,将/var/log/dump.pcap.1重命名为/var/log/dump.pcap.1 ,等等。 然后,当所有这些文件被重命名并删除最旧的文件(在本例中/var/log/dump.pcap.2将在重命名.1到.2之前被删除),它将执行postrotate的命令。 不幸的是,tcpdump并没有提供一个kill -HUP,在httpd等其他deamon上使用,所以这个配方杀死它,然后开始一个新的捕获。
请注意,您可能需要手动启动tcpdump的第一天。
这是未经testing,但应该做的伎俩。
类似darkstat的东西可能对识别高stream量主机更有用,尽pipe它不会存储实际的stream量(虽然它logging了端口号)。
我用tshark做这个,但是你需要小心。
tshark -i eth0 -a duraition:86400 -b -w x.pcap
或者你可以设置复杂的输出格式选项并redirect标准输出。 问题是tshark从不丢弃收到的数据包,所以最终会耗尽内存。 短跑比较好。
我喜欢的另一种技术是使用iptables和ULOG。 有几个ulog守护进程可以把东西发送到普通的日志文件。 我也用幽灵将ulog报告转换为消息。