我管理一个暴露在互联网上的 Ubunu 服务器,并且需要以允许我事后分析的方式监视和跟踪所有网络活动。
我已经尝试过一些工具,例如 tshark 或 tcpdump,它们给了我太多详细信息,vnstat,它没有给我想要的详细信息(它只显示带宽),还有 tcptrack,作为实时监控工具还可以但没有给我提供用于进一步分析的日志记录选项。
我想到的是 tcptrack 和 vnstat 之间的东西:
一个守护进程,它记录每个连接,并在需要时为我提供一份全面的报告,显示每个已建立连接的 IP、端口和时间戳以及每次连接尝试(因此,它还应该显示 iptables 丢弃的连接的 SYN 数据包) 。理想情况下(这只是一个奖励点:),它将信息存储到某些 sql 数据库中,例如 mysql 或 postgresql,这将允许执行任意 select 语句以获得自定义报告(例如,监视来自以下位置的所有活动):单个 IP,或提取使用特定服务的所有 IP 的列表)。
我必须说,我已经尝试组合一些工具,例如使用 tcpdump 进行日志记录,然后使用 tcptrack 显示结果,但它没有按预期工作。
那么,有没有接近这个“想法”的工具呢?
答案1
我认为实现您想要的最简单的方法是使用iptables
日志记录到 LOG 或 ULOG 目标。
这将为您留下以下类型的日志信息:
8 月 13 日 14:42:07 srv1 IN=eth0 OUT= MAC=00:0c:29:8c:2b:6c:00:d0:02:eb:e8:0a:08:00 SRC=75.125.70.194 DST=XXX .XXX.XXX.XXX LEN=40 TOS=00 PREC=0×00 TTL=54 ID=9566 PROTO=TCP SPT=57144 DPT=445 SEQ=2770468863 ACK=0 WINDOW=512 SYN URGP=0
8 月 13 日 14:45:29 srv1 IN=eth0 OUT= MAC=00:0c:29:8c:2b:6c:00:d0:02:eb:e8:0a:08:00 SRC=75.125.70.194 DST=XXX .XXX.XXX.XXX LEN=40 TOS=00 PREC=0×00 TTL=55 ID=13702 PROTO=TCP SPT=58528 DPT=445 SEQ=1217789951 ACK=0 窗口=512 SYN URGP=0
然后,当您想查看该系统上发生的情况时,您将能够使用标准工具(例如awk
或 )从中提取数据。grep
2 此类规则应记录任何传入或传出的“新”连接。这些将为规则添加前缀,以便更容易发现:
iptables -I INPUT -m state --state NEW -j LOG --log-prefix "New Connection: "
iptables -I OUTPUT -m state --state NEW -j LOG --log-prefix "New Connection: "
导致日志条目如下:
[2134.566659]新连接:IN = OUT = wlan0 SRC = 192.168.178.229 DST = 192.168.178.21 LEN = 60 TOS = 0x00 PREC = 0x00 TTL = 64 ID = 65094 DF PROTO = UDP SPT = 55717 DPT = 53 LEN = 40